したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | メール | |

管理人の独り言(プログラミング関連)

1みみず★:2008/08/10(日) 23:28:15
あまりにもプログラミングの内容が増えすぎた。
よって隔離スレの中を更に隔離。

2511774さん:2010/07/24(土) 16:05:13
ちゃんとプログラミングを書くんだったら、リソース管理用のクラスとか用意して、キャラクターの情報は全て一つのクラスにまとめて(ry

2512774さん:2010/07/24(土) 16:11:53
整数の割り算が早いか、メモリ参照が早いか、doubleをintに変換するのが早いか。

2513774さん:2010/07/24(土) 16:36:49
std::list::remove_ifがあるだと!
そして、STLのページには、削除されなかったiteratorは有効であるだと!
これは良い。が、もうiteratorは使わないと思うのでどうでもいい。

2514774さん:2010/07/24(土) 16:39:08
30fpsで滑らかに動いて見えるんじゃないの?
テレビって30fpsなんでしょ?

2515774さん:2010/07/24(土) 16:59:09
1500個あたりで、60fpsでなくなるなあ。

2516774さん:2010/07/24(土) 17:01:28
間引きたいが、間引くには、ソートが必要だし、ランダムアクセス出来ないと間引く意味がないし。

2517774さん:2010/07/24(土) 17:03:11
挿入、消去、ランダムアクセス、ソートが定数時間で出来、順番は覚えて無くてもいい、そういうコンテナはないんだろうなあ

2518774さん:2010/07/24(土) 21:37:38
Windows 7の便利なキーボードショートカット15選 : ライフハッカー[日本版]
http://www.lifehacker.jp/2010/07/100722ucscopaw7.html

2519qnighy:2010/07/25(日) 13:23:11
定数時間は無理だけど、O(log n)なランダムアクセスが可能なように平衡二分木を実装することはできるはず。

ソート済みのデータ列と、未ソートのデータ列を、同時に管理するのは難しいかと。

要求仕様が曖昧なのでなんとも言えないですけど…

2520マインスイーパ:2010/07/25(日) 13:58:23
今夏、戦争にかかわる小説を書きたいのですが
戦争を経験したことがないのでどうしようかと。
祖父に聞いておけば良かったのかなと思っています。

まあ、戦争を経験していないからこそ、
こんなことを思い立つのですが。。。

2521マインスイーパ:2010/07/25(日) 13:59:27
書く場所間違えましたね。。。

2522774さん:2010/07/25(日) 17:35:48
>>2519
定数は無理ですよね・・・

元々、当たり判定を間引くためにx座標 or y座標でソートしようと思いましたが、今考えるとフレーム毎にソートをするとかどんだけ時間かかr(ry

2523774さん:2010/07/25(日) 17:37:56
>>2520
戦争とか体験したくないこと筆頭。
ネットで調べればいっぱい見つかると思いますが。

2524774さん:2010/07/25(日) 17:54:14
グレイズでも実装してみる。
仕様は、在る範囲に近づいたらフラグ立てて、その範囲から玉に当たらず出たら+1というシステムでいいだろう。

2525774さん:2010/07/26(月) 00:56:05
色々と書いてみて思ったこと。
弾のデータと軌道のデータは分けるべき。
弾の種類をランダムにすることはないと思うので、データをclassで纏めてtemplateで渡すようにするといい気がする。
ランダムに出来るような仕様も一応出来るようにはしておく。あと、リソースの管理を引き受けるクラスも勿論要る。
struct 丸いの{
static bool HitTest(RECT &rc){
//・・・
}
static bool HitTest(unsigned int x, unsigned int y){
//・・・
}
static void Show(){
CResource::getInstance()->ShowImage(/*なんとかかんとか*/); //こうはしないだろうが・・・
}
};

template<class Shot>
class CShotLine : public IShot{
virtual bool HitTest(const RECT &rc){
//・・・ (rcを座標変換して、bufへ)
return Shot::HitTest(buf);
}
//(略)
};

2526774さん:2010/07/26(月) 00:57:10
こうすれば、最適化されてそこまで酷くはならないだろう。

2527774さん:2010/07/26(月) 16:10:27
弾を回転させる時はどうしようか。
四角い弾を飛ばすんだったら、回転させたいよなあ。

まだ、double型とint型の変換スピードとか比較はしていないが、恐らくビットシフトよりは遅いので、全体の座標は2^n(2**n)倍にして保持するようにしよう。

2528774さん:2010/07/26(月) 16:55:56
大学でRubyやるし、これを機会に勉強してみるか。
簡単にサーバープログラム書けるみたいだし。
今日からやるわけではない。
なんか前も言った気がする。

2529774さん:2010/07/26(月) 17:07:29
>>2528
日本人じゃないみたい・・・

2530774さん:2010/07/26(月) 17:15:36
某所で見たが、元々何処で見たか分からないようなTips。
メンバ関数ポインタはアップキャスト可能。
-----

#include <iostream>
#include <windows.h>

class ITest{
public:
virtual double Function(unsigned int i) = 0;
};

class CDoubleTest : public ITest{
public:
virtual double Function(unsigned int i){
return static_cast<double>(i);
}
};

class CDouble2Test : public ITest{
virtual double Function(unsigned int i){
return static_cast<double>(i * 2);
}
};

int main(int argc, char **argv){
if(IsDebuggerPresent()){
DebugBreak();
}

CDoubleTest dt;
CDouble2Test dt2;
ITest *pt = &dt;
double (CDoubleTest::*pdf)(unsigned int) = &CDoubleTest::Function;
double (ITest::*pif)(unsigned int) = (double (ITest::*)(unsigned int))pdf;
std::cout << (dt.*pdf)(100) << std::endl;
std::cout << (dt.*pif)(100) << std::endl;
//std::cout << (pt->*pdf)(100) << std::endl; //暗黙の型変換は無理らしい
std::cout << (pt->*pif)(100) << std::endl;
std::cout << (dt2.*pif)(100) << std::endl; //元と型が違ってもいい
}

2531774さん:2010/07/26(月) 17:30:37
俺は参照よりポインタの方が好きだ!

2532774さん:2010/07/26(月) 17:31:29
どうせ、処理スピードは一緒です。
違う例ってなにかあるのか?

2533774さん:2010/07/26(月) 17:46:46
適当にunsigned int型をdoubleに変換するだけのソースを書いたのだが、これが32bitsと64bitsで速度が結構違う。
呼出の所で最適化が行われないようにするためにvirtual化して、TestIt関数に渡して多態性が出るようにしてある。(ソースは下)
で、測ってみたところ、64bitsの方が大体7/8の時間で終わらせるようだ。CPUの仮想化の影響?どうやって、64bitsと32bitsを切り替えているんだっけなあ。
-----
class ITest{
public:
virtual double Function(unsigned int i) = 0;
};

class CDoubleTest : public ITest{
public:
virtual double Function(unsigned int i){
return static_cast<double>(i);
}
};

void TestIt(ITest *p){
Timer t;
t.Start();
for(unsigned int i = 0; i < 1000000; ++i){
p->Function(i);
}
t.Stop();
std::cout << typeid(*p).name() << std::endl;
std::cout << t.Distance() << std::endl;
}

int main(int argc, char **argv){
if(IsDebuggerPresent()){
DebugBreak();
}

CDoubleTest dt;

TestIt(&dt);
}
-----

2534774さん:2010/07/26(月) 17:52:28
あれ・・・
回数増やすとかなり近くなる。

2535774さん:2010/07/26(月) 17:53:14
あれ、誤差の範囲内だったのか・・・?
五回ぐらいそれぞれ測定したのだが。

2536774さん:2010/07/26(月) 17:55:38
CDoubleTestは上のソース通り。CControlTestはstatic_cast<double>(0);を返すだけ。
64bistはCDoubleTestが7000000を超えることは無かった。(四回しか計ってないが・・・)

C:\Users\Owner\Desktop\projects\gcctest>g++ main.cpp -O3 -std=c++0x -m32

C:\Users\Owner\Desktop\projects\gcctest>a
QueryPerformanceFrequency=2078154
11CDoubleTest
7046745
12CControlTest
6908983

C:\Users\Owner\Desktop\projects\gcctest>g++ main.cpp -O3 -std=c++0x -m64

C:\Users\Owner\Desktop\projects\gcctest>a
QueryPerformanceFrequency=2078154
11CDoubleTest
6906016
12CControlTest
6884568

2537774さん:2010/07/26(月) 17:56:21
64bitsのプログラムをデバッグできるOllyDbgが欲しい。

2538774さん:2010/07/26(月) 18:10:10
えっ・・・。
return static_cast<double>(i) * 2;の方が、
return static_cast<double>(i * 2);より早いだと・・・

前者-----
0040DAF0 /. 55 PUSH EBP
0040DAF1 |. 89E5 MOV EBP,ESP
0040DAF3 |. 83EC 08 SUB ESP,8
0040DAF6 |. 660F6E45 0C MOVD XMM0,DWORD PTR SS:[ARG.2]
0040DAFB |. 660FD645 F8 MOVQ QWORD PTR SS:[LOCAL.2],XMM0
0040DB00 |. DF6D F8 FILD QWORD PTR SS:[LOCAL.2]
0040DB03 |. D8C0 FADD ST,ST
0040DB05 |. C9 LEAVE
0040DB06 \. C3 RETN

後者-----
0040DCE0 /. 55 PUSH EBP
0040DCE1 |. 89E5 MOV EBP,ESP
0040DCE3 |. 83EC 10 SUB ESP,10
0040DCE6 |. 8B45 0C MOV EAX,DWORD PTR SS:[ARG.2]
0040DCE9 |. 01C0 ADD EAX,EAX
0040DCEB |. 8945 F4 MOV DWORD PTR SS:[LOCAL.3],EAX
0040DCEE |. 660F6E45 F4 MOVD XMM0,DWORD PTR SS:[LOCAL.3]
0040DCF3 |. 660FD645 F8 MOVQ QWORD PTR SS:[LOCAL.2],XMM0
0040DCF8 |. DF6D F8 FILD QWORD PTR SS:[LOCAL.2]
0040DCFB |. C9 LEAVE
0040DCFC \. C3 RETN

2539774さん:2010/07/26(月) 18:10:51
C:\Users\Owner\Desktop\projects\gcctest>a
QueryPerformanceFrequency=2078154
12CControlTest
6999951
12CControlTest
6954194
11CDoubleTest
7152501
12CDouble2Test
8027300
13CDouble2Test2
10438310

C:\Users\Owner\Desktop\projects\gcctest>a
QueryPerformanceFrequency=2078154
12CControlTest
7130992
12CControlTest
6921307
11CDoubleTest
6988063
12CDouble2Test
7870519
13CDouble2Test2
9395658

2540774さん:2010/07/26(月) 18:14:20
三倍でも変わらないwwww
後からdoubleに変換する定数倍はdoubleに変換してから行ったほうが早い。
-----
C:\Users\Owner\Desktop\projects\gcctest>a
QueryPerformanceFrequency=2078154
12CControlTest
6888722
12CControlTest
6887930
11CDoubleTest
7870127
12CDouble2Test
7288124
13CDouble2Test2
9397208
12CDouble3Test
7879957
13CDouble3Test2
9421286

C:\Users\Owner\Desktop\projects\gcctest>a
QueryPerformanceFrequency=2078154
12CControlTest
6893313
12CControlTest
6871961
11CDoubleTest
7875863
12CDouble2Test
7290366
13CDouble2Test2
9377153
12CDouble3Test
7853346
13CDouble3Test2
9399327

2541774さん:2010/07/26(月) 18:19:42
これって一度XMMレジスタで行っているから遅いんじゃね?

2542774さん:2010/07/26(月) 18:21:16
unsigned intが必ず早いわけじゃないんだなあ。まあdoubleに変換しているからだと思うのだが。
QueryPerformanceFrequency=2078154
12CControlTest
6987426
12CControlTest
6981907
11CDoubleTest
7988838
14CDoubleMulTestILj2EE
7993224
15CDoubleMulTest2ILj2EE
9500573
14CDoubleMulTestILj128EE
8000337
15CDoubleMulTest2ILj128EE
9533468
14CDoubleMulTestILj1024EE
7999294
15CDoubleMulTest2ILj1024EE
9501704

2543774さん:2010/07/26(月) 18:24:15
2の累乗じゃない値にすると、最早unsigned intは死亡する。
これは酷い。
-----
C:\Users\Owner\Desktop\projects\gcctest>a
QueryPerformanceFrequency=2078154
12CControlTest
6951026
12CControlTest
6981173
14CDoubleMulTestILj1000EE
7971458
15CDoubleMulTest2ILj1000EE
9969852

C:\Users\Owner\Desktop\projects\gcctest>a
QueryPerformanceFrequency=2078154
12CControlTest
7001421
12CControlTest
6979492
14CDoubleMulTestILj1000EE
7971876
15CDoubleMulTest2ILj1000EE
9989926

2544774さん:2010/07/26(月) 18:24:48
因みに繰り返し回数は十億回です。

2545774さん:2010/07/26(月) 19:43:37
(1..100).each{|i|f="Fizz";b="Buzz";a=f,i,i;puts [[f+b,b,b],a,a,a,a][i%5][i%3]}
-----
へ?

2546774さん:2010/07/26(月) 19:44:26
ああ。
理解。

2547774さん:2010/07/26(月) 19:46:07
''=~('('.'?'.'{'.('`'|'%').('['^'-').('`'|'!').('`'|',').'"'.('`'|'&').('`'|'/').('['^')').'('.('^'^('`'|'/')).'.'.'.'.('^'^('`'|'/')).('^'^('`'|'.')).('^'^('`'|'.')).')'.'\\'.'{'.('`'|')').('`'|'&').'('.'\\'.'$'.'_'.'%'.('^'^('`'|'/')).('^'^('`'|'+')).'='.'='.('^'^('`'|'.')).')'.'\\'.'{'.('['^'+').('['^')').('`'|')').('`'|'.').('['^'/').'\\'.'"'.('`'^'&').('`'|')').('['^'!').('['^'!').('`'^'"').('['^'.').('['^'!').('['^'!').'\\'.'\\'.('`'|'.').'\\'.'"'.'\\'.'}'.('`'|'%').('`'|',').('['^'(').('`'|')').('`'|'&').'('.'\\'.'$'.'_'.'%'.('^'^('`'|'-')).'='.'='.('^'^('`'|'.')).')'.'\\'.'{'.('['^'+').('['^')').('`'|')').('`'|'.').('['^'/').'\\'.'"'.('`'^'&').('`'|')').('['^'!').('['^'!').'\\'.'\\'.('`'|'.').'\\'.'"'.'\\'.'}'.('`'|'%').('`'|',').('['^'(').('`'|')').('`'|'&').'('.'\\'.'$'.'_'.'%'.('^'^('`'|'+')).'='.'='.('^'^('`'|'.')).')'.'\\'.'{'.('['^'+').('['^')').('`'|')').('`'|'.').('['^'/').'\\'.'"'.('`'^'"').('['^'.').('['^'!').('['^'!').'\\'.'\\'.('`'|'.').'\\'.'"'.'\\'.'}'.('`'|'%').('`'|',').('['^'(').('`'|'%').'\\'.'{'.('['^'+').('['^')').('`'|')').('`'|'.').('['^'/').'\\'.'"'.'\\'.'$'.'_'.'\\'.'\\'.('`'|'.').'\\'.'"'.'\\'.'}'.'\\'.'}'.'"'.'}'.')')

print+(Fizz)[$_%3].(Buzz)[$_%5]||$_,"\n"for 1..100

perl意味分からん。

2548774さん:2010/07/26(月) 20:05:10
>>2547
は、一行目だけで一つのプログラムです。

2549774さん:2010/07/26(月) 20:35:16
Haskellな人が、C++の型推論もどきのどこが型推論なんだみたいなことを言っていたが、本当だな。
Haskellすげー

2550774さん:2010/07/26(月) 22:40:38
俺がスピードに拘る理由はない。気分である。キリッ。

2551774さん:2010/07/26(月) 23:49:34
弾幕に関する本が売っていたが、前はアホだろとか思ってたが、今はちょっと欲しい。
なかなか弾幕は思い浮かばない。

2552774さん:2010/07/27(火) 18:11:09
3Dソフト?
俺には到底出来ない。
そういえば、3Dソフトとかポリゴンどれくらい描画しているのかね?
このパソコンは2Dで弾を1500ぐらい表示させただけで60fps出なくなるのだが・・・
やはり当たり判定を改善しないと駄目なのか?
それともSDL使うと遅くなるのはデフォ?

2553774さん:2010/07/27(火) 19:18:16
>>2551
龍神録プログラミングの館
http://dixq.net/rp/

下の方に東方の弾幕を参考にしたやつ乗ってるけど参考になるもんかね

2554774さん:2010/07/27(火) 23:12:19
>>2553
参考にしてみますが、多分今の所無理です。
面倒臭いので、内部的には直線の弾しか飛ばせないwwwww
Luaとか導入して弾幕を楽に追加できるようにしたい。
最終的には弾幕プレーヤー見たいな乗りで。

2555774さん:2010/07/28(水) 00:02:16
gcc4.5.0不安定すぎる。
正しくコンパイルできない。

2556774さん:2010/07/28(水) 00:05:00
明らかにコンパイラのバグ・・・、だと思う。
適当に再現ソースを作ってみるか・・・

2557774さん:2010/07/28(水) 22:23:33
都合がいい時だけ正しく動きやがるコンパイラ、GCC!

2558774さん:2010/07/28(水) 23:11:52
やっぱり俺のミスっぽい。
GCCにミスは無かった!!

2559774さん:2010/07/28(水) 23:13:20
結論:コンパイルするときは-Wallを付けましょう。

2560774さん:2010/07/28(水) 23:23:07
やはり描画処理が一番遅いらしい。

2561774さん:2010/07/28(水) 23:23:35
描画処理が無かったら2000個弾を飛ばしても遅延しなかった。

2562774さん:2010/07/28(水) 23:39:41
32bitsが非常に軟弱だと思う限り。

2563774さん:2010/07/29(木) 00:40:38
unsigned intとintの暗黙の変換はやめていただきたい限りだ。

2564774さん:2010/07/29(木) 19:02:36
HTML5についてのおさらい - W3G Blog Studies
http://w3g.jp/blog/studies/html5report

2565774さん:2010/07/29(木) 23:42:36
Going My Way: マルチタスク対応 iPhone 4 で乗り越し防止に役立つアプリ、駅ベル
http://kengo.preston-net.com/archives/004622.shtml
-----
こういうの出たら、自分で作ればただなんだなあと。
まあ、iPod touchにはGPS機能が付いていないので関係ないのだが。

2566774さん:2010/07/30(金) 14:36:27
テスト終了記念で寝るか。

2567774さん:2010/07/30(金) 22:21:14
HTML5を今すぐ使うためのコツや情報をまとめてみました - EC studio デザインブログ
http://designblog.ecstudio.jp/htmlcss/start-html.html
-----
CSSのセレクタのパフォーマンスに付いては微妙じゃね?
正直回線速度の方が影響が大きいだろ。
JavaScriptで何万回もセレクタで選択する処理を繰り返すならば、考えてもいいが、基本イニシャルコストなんだから普通に払っても良いと思う。

2568774さん:2010/07/30(金) 22:22:09
付いて→就いて

2569774さん:2010/07/30(金) 23:26:05
はやり東方は、弾幕の美しさが違う。
計算すれば再現できるのだろうが・・・

2570774さん:2010/07/31(土) 19:34:48
【2ch】ニュー速クオリティ:WWWへのアクセス権を持つ7人
http://news4vip.livedoor.biz/archives/51592223.html
-----
>断片的な情報しか入ってない。
さて、どういうふうに入れたら必ず大丈夫なのか考えよう!

2571774さん:2010/07/31(土) 19:35:27
モダンなプログラミング言語の開発環境の構築方法まとめ - ネットサービス研究室
http://d.hatena.ne.jp/seikenn/20100730/modernEnviroment
-----
メモ帳+プログラミング言語のコンパイラ。

2572774さん:2010/07/31(土) 22:28:44
シケプリ、Web構築はやらないと

2573774さん:2010/08/01(日) 14:00:16
モダンなC, C++の開発環境の構築方法 - 考える人, コードを書く人
http://d.hatena.ne.jp/cubicdaiya/20100731/1280561128
-----
俺はデバッガはOllyDbgしか使えません。

2574774さん:2010/08/01(日) 16:12:52
適当に視点ずらして、平行法使えばなんでも3Dに見えますねー。多分。

2575774さん:2010/08/01(日) 17:57:49
適当に作ったのだが見えない・・・orz...

2576774さん:2010/08/01(日) 18:02:59
#define _WCHAR_T_DEFINED

#include <gl/gl.h>
#include <gl/glu.h>
#include <gl/glut.h>

GLdouble vertex[][3] = {
{ 0.0, 0.0, 0.0 },
{ 1.0, 0.0, 0.0 },
{ 1.0, 1.0, 0.0 },
{ 0.0, 1.0, 0.0 },
{ 0.0, 0.0, 1.0 },
{ 1.0, 0.0, 1.0 },
{ 1.0, 1.0, 1.0 },
{ 0.0, 1.0, 1.0 }
};

int face[][4] = {
{ 0, 1, 2, 3 },
{ 1, 5, 6, 2 },
{ 5, 4, 7, 6 },
{ 4, 0, 3, 7 },
{ 4, 5, 1, 0 },
{ 3, 2, 6, 7 }
};

GLdouble color[][3] = {
{ 1.0, 0.0, 0.0 },
{ 0.0, 1.0, 0.0 },
{ 0.0, 0.0, 1.0 },
{ 1.0, 1.0, 0.0 },
{ 1.0, 0.0, 1.0 },
{ 0.0, 1.0, 1.0 }
};

static int g_screen_w = 0, g_screen_h = 0;

void DrawImage(unsigned int frame){
glRotated((double)frame / 10, 0.0, 1.0, 1.0);

glColor3d(1.0, 1.0, 1.0);
glBegin(GL_QUADS);
for(int i = 0; i < 6; ++i){
glColor3dv(color[i]);
for(int j = 0; j < 4; ++j){
glVertex3dv(vertex[face[i][3 - j]]);
}
}
glEnd();
}

void DisplayProc(){
static unsigned int frame = 0;
//バッファクリア
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);


//左目------------------------------------------
glViewport(0, 0, g_screen_w / 2, g_screen_h);

//変換行列
glLoadIdentity();
gluLookAt(3.0, 4.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);

DrawImage(frame);

//右目------------------------------------------
glViewport(g_screen_w / 2, 0, g_screen_w / 2, g_screen_h);

//変換行列
glLoadIdentity();
gluLookAt(3.1, 4.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);

DrawImage(frame);

//画面スワップ
glutSwapBuffers();

frame++;
}

void ResizeProc(int w, int h){
g_screen_w = w;
g_screen_h = h;

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(30.0, (double)(w / 2) / (double)h, 1.0, 100.0);

glMatrixMode(GL_MODELVIEW);
}

void IdleProc(){
glutPostRedisplay();
}

void Initialize(){
glClearColor(0.0, 0.0, 0.0, 1.0);
glEnable(GL_DEPTH_TEST);

glEnable(GL_CULL_FACE);
glCullFace(GL_BACK);
}

int main(int argc, char **argv){
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow(argv[0]);

glutDisplayFunc(DisplayProc);
glutReshapeFunc(ResizeProc);
glutIdleFunc(IdleProc);

Initialize();

glutMainLoop();
return 0;
}

2577774さん:2010/08/01(日) 18:10:39
立体に見える気もするし、見えない気もする。

2578774さん:2010/08/01(日) 18:22:29
#define _WCHAR_T_DEFINED

#include <gl/gl.h>
#include <gl/glu.h>
#include <gl/glut.h>

GLdouble vertex[][3] = {
{ 0.0, 0.0, 0.0 },
{ 1.0, 0.0, 0.0 },
{ 1.0, 1.0, 0.0 },
{ 0.0, 1.0, 0.0 },
{ 0.0, 0.0, 1.0 },
{ 1.0, 0.0, 1.0 },
{ 1.0, 1.0, 1.0 },
{ 0.0, 1.0, 1.0 }
};

int face[][4] = {
{ 0, 1, 2, 3 },
{ 1, 5, 6, 2 },
{ 5, 4, 7, 6 },
{ 4, 0, 3, 7 },
{ 4, 5, 1, 0 },
{ 3, 2, 6, 7 }
};

GLdouble color[][3] = {
{ 1.0, 0.0, 0.0 },
{ 0.0, 1.0, 0.0 },
{ 0.0, 0.0, 1.0 },
{ 1.0, 1.0, 0.0 },
{ 1.0, 0.0, 1.0 },
{ 0.0, 1.0, 1.0 }
};

static int g_screen_w = 0, g_screen_h = 0;

void DrawImage(unsigned int frame){
glRotated((double)frame / 10, 0.0, 1.0, 0.0);

glColor3d(1.0, 1.0, 1.0);
glBegin(GL_QUADS);
for(int i = 0; i < 6; ++i){
glColor3dv(color[i]);
for(int j = 0; j < 4; ++j){
glVertex3dv(vertex[face[i][3 - j]]);
}
}
glEnd();

glPushMatrix();
glTranslated(1.1, -1.1, 0.0);
glBegin(GL_QUADS);
for(int i = 0; i < 6; ++i){
glColor3dv(color[i]);
for(int j = 0; j < 4; ++j){
glVertex3dv(vertex[face[i][3 - j]]);
}
}
glEnd();
glPopMatrix();

glPushMatrix();
glTranslated(0.0, -1.1, -1.1);
glBegin(GL_QUADS);
for(int i = 0; i < 6; ++i){
glColor3dv(color[i]);
for(int j = 0; j < 4; ++j){
glVertex3dv(vertex[face[i][3 - j]]);
}
}
glEnd();
glPopMatrix();

glPushMatrix();
glTranslated(1.1, 0.0, -1.1);
glBegin(GL_QUADS);
for(int i = 0; i < 6; ++i){
glColor3dv(color[i]);
for(int j = 0; j < 4; ++j){
glVertex3dv(vertex[face[i][3 - j]]);
}
}
glEnd();
glPopMatrix();
}

void DisplayProc(){
static unsigned int frame = 0;
//バッファクリア
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);


//左目------------------------------------------
glViewport(0, 0, g_screen_w / 2, g_screen_h);

//変換行列
glLoadIdentity();
gluLookAt(2.5, 4.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);

DrawImage(frame);

//右目------------------------------------------
glViewport(g_screen_w / 2, 0, g_screen_w / 2, g_screen_h);

//変換行列
glLoadIdentity();
gluLookAt(3.0, 4.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);

DrawImage(frame);

//画面スワップ
glutSwapBuffers();

frame++;
}

void ResizeProc(int w, int h){
g_screen_w = w;
g_screen_h = h;

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(30.0, (double)(w / 2) / (double)h, 1.0, 100.0);

glMatrixMode(GL_MODELVIEW);
}

void IdleProc(){
glutPostRedisplay();
}

void Initialize(){
glClearColor(0.0, 0.0, 0.0, 1.0);
glEnable(GL_DEPTH_TEST);

glEnable(GL_CULL_FACE);
glCullFace(GL_BACK);
}

int main(int argc, char **argv){
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow(argv[0]);

glutDisplayFunc(DisplayProc);
glutReshapeFunc(ResizeProc);
glutIdleFunc(IdleProc);

Initialize();

glutMainLoop();
return 0;
}

2579774さん:2010/08/01(日) 18:22:39
見えないことはよく分かった。

2580774さん:2010/08/02(月) 18:06:07
Webサイト制作でよく出てくるコンテンツ内容とそれによく使うディレクトリ・ファイル名の一覧 - btmup Blog
http://blog.btmup.com/web-general/contents-directory-file-name-list.html

2581774さん:2010/08/02(月) 18:18:19
新gTLDドメインを応募で決める「ワールドドメインカップ」の優勝ドメインが決定 - GIGAZINE
http://gigazine.net/index.php?/news/comments/20100802_world_domain_cup_prize/
-----
http://から始まれば何でもURLに成り得るということか。

2582774さん:2010/08/02(月) 18:23:46
ゲームプログラマになる方法 - Keep Crazy;shi3zの日記
http://d.hatena.ne.jp/shi3z/20100801/1280682397

2583774さん:2010/08/02(月) 18:27:39
Pythonでいろんなバイナリファイルを覗いてみる &laquo; taichino.com
http://taichino.com/programming/1860

2584774さん:2010/08/03(火) 10:40:58
The range-based for statement

for ( for-range-declaration : expression ) statement

is equivalent to

{
auto && __range = ( expression );
for (auto __begin = begin-expr, __end = end-expr; __begin != __end; ++__begin ) {
for-range-declaration = *__begin;
statement
}
}

2585774さん:2010/08/03(火) 11:00:40
C++よ。複数の値を返せるようにしてくれ(笑)

2586774さん:2010/08/03(火) 11:34:56
boost::shared_ptrは、参照カウンタがゼロになった時に、自動で関数を呼び出してくれる何か、と言った感じか。

2587774さん:2010/08/03(火) 14:36:55
letsboost::multi_index
http://www.kmonos.net/alang/boost/classes/multi_index.html
-----
例の、当たり判定の間引きに就いて。
これを使うとどうなんだろうか。
パフォーマンス遅いのかねぇ。

2588774さん:2010/08/03(火) 15:06:06
new Image()はどうなったんだ。

2589774さん:2010/08/04(水) 01:22:29
はやり、自分が書いたプログラムが一発で上手く動くと怖い。
それが、十分ぐらいで書いたものだと特に。

2590774さん:2010/08/04(水) 01:23:13
十五分か

2591774さん:2010/08/04(水) 02:12:14
ぬー。
swfから画像を取り出そうと思ったのだが、どうやらJPEG,PNGでは無いらしい。
結構大きくしても綺麗だから、ベクタグラフィックスなのだろうか。

2592774さん:2010/08/04(水) 02:20:08
もう、時給千円の仕事はやめて、時給-千円の仕事するし。

2593774さん:2010/08/04(水) 13:46:46
[ Note: if a program could assign a pointer of type T** to a pointer of type const T** (that is, if line #1
below were allowed), a program could inadvertently modify a const object (as it is done on line #2). For
example,
int main() {
const char c = ’c’;
char* pc;
const char** pcc = &pc; // #1: not allowed
*pcc = &c;
*pc = ’C’; // #2: modifies a const object
}
―end note ]

2594774さん:2010/08/04(水) 15:17:03
[ Example:
struct B {
int f();
};
struct L : B { };
struct R : B { };
struct D : L, R { };
int (B::*pb)() = &B::f;
int (L::*pl)() = pb;
int (R::*pr)() = pb;
int (D::*pdl)() = pl;
int (D::*pdr)() = pr;
bool x = (pdl == pdr); // false
―end example ]

2595774さん:2010/08/04(水) 15:37:39
constexprは最適化のための宣言だと見て良いと思う。
画面に表示するとか、そういう副作用がなければ、コンパイル時にコンストラクタを呼んだりしてメモリ上に色々と配置できるわけだし。

2596774さん:2010/08/06(金) 01:34:24
Open Dynamics Engine - home
http://ode.org/

2597774さん:2010/08/06(金) 21:05:39
これであなたも野生のプロ、特殊効果・自動BGM作成・音ズレ補正・CM自動カットなどがサクサクできる映像編集ソフト「Movie Pro」 - GIGAZINE
http://gigazine.net/index.php?/news/comments/20100806_movie_pro/

2598774さん:2010/08/06(金) 21:49:05
C++の参照の参照の扱いが気になる。

2599774さん:2010/08/06(金) 21:54:17
以下は、コンパイルエラーになった。
-----
#include <iostream>
#include <windows.h>

class CTest{
protected:
int m_i;

public:
CTest(int i)
: m_i(i)
{}

template<typename T>
CTest(T) = delete;
CTest(const CTest&) = delete;
};

int main(int argc, char **argv){
CTest t = 90;
}

2600774さん:2010/08/06(金) 22:10:03
Variadic templatesの構文がキモ過ぎて覚えられない件について。

2601774さん:2010/08/06(金) 22:11:48
最早意味不明である。
-----
[ Example:
template<typename... T> void f(T (* ...t)(int, int));
int add(int, int);
float subtract(int, int);
void g() {
f(add, subtract);
}
– end example ]

2602774さん:2010/08/06(金) 22:31:05
パーサー処理面倒。

2603774さん:2010/08/06(金) 22:39:39
エラーチェック?何それ美味しいの?
-----

#include <iostream>
#include <functional>
#include <windows.h>

void TestFunctionHelper(std::ostream *os, std::function<void()> *funcs, unsigned int index){
}

template<typename First, typename... Rest>
void TestFunctionHelper(std::ostream *os, std::function<void()> *funcs, unsigned int index, First first, Rest... rest){
funcs[index] = [os, first]{
*os << *first;
};
TestFunctionHelper(os, funcs, index + 1, rest...);
}

template<typename... Arg>
void TestFunction(std::ostream &os, const std::string str, Arg... arg){
static_assert(sizeof...(Arg) <= 10, "無理");

std::function<void()> funcs[sizeof...(Arg)];

TestFunctionHelper(&os, funcs, 0, &arg...);

for(unsigned int i = 0, len = str.length(); i < len; ++i){
if(str[i++] == '%'){
if(str[i] == '%'){
os << "%";
}else{
funcs[str[i] - '0']();
}
}else{
os << str[i];
}
}
}

int main(int argc, char **argv){
TestFunction(std::cout, "test%0,%1,%%,%1,%0", 100, 120);
}

2604774さん:2010/08/07(土) 08:03:11
正直、VC++2010に魅力を感じない。
次のバージョン出たら考えよう。

2605774さん:2010/08/07(土) 08:14:19
そうか!
当たり判定を、マルチスレッドにすれば早くなるんじゃね?
イニシャルコストがどれくらいかは知らんが。

2606774さん:2010/08/07(土) 16:40:52
Javaバイトコード入門
http://www.slideshare.net/kmizushima/java-4912958

2607774さん:2010/08/07(土) 16:43:47
PHPで書くにしても、Perlで書くにしても、どちらにせよデータベースを設計しなければいけないので、そろそろ始めようかと思う。

2608774さん:2010/08/08(日) 02:42:55
>もしあなたがこのハンガリアン記法をC++で採用している、またはこの説明を読んでアプリケーションハンガリアンが便利だと思ったのであれば、あなたはC++の型システムを正しく理解していません。
-----
なんてこったい><

2609774さん:2010/08/08(日) 03:06:19
理想
>「boost::begin(a)はboost::end(a)へ有限数のインクリメントで到達可能でなければならない」
現実
>「googolplex回のインクリメントで到達可能だと仮定する」

2610774さん:2010/08/08(日) 03:42:58
もう、これ以上発行しないんじゃね?といったぐらいの濃さだった気がする。
俺が詳しくないだけか。


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板