シューティングゲーム製作技術総合 17機目
レス数が1000を超えています。これ以上書き込みはできません。
0001名前は開発中のものです。
2008/11/27(木) 10:18:19ID:bBI1A+d5それは「シューティングゲーム製作」・・・。
このスレでは、そんなシューティングゲームの製作技術や技術の検証、成功談
失敗談笑い話、難易度の設定方法論、多弾の是非などについて語り合いましょう。
もちろんBulletMLなどで弾幕を作成してみたり、自分の作ったシューティングを
晒してみたり、プロジェクトをはじめてみるなどもOK!
ただし、シューティングの未来とか既存のゲームの話題などは、関連する他の
スレでやってくれ。
過去スレ,関連スレは >>2-3で。
0951名前は開発中のものです。
2009/03/30(月) 14:56:36ID:7NVi2nBuViewは、World*View*Projを何度も使う3Dではややこしくないか?
0952名前は開発中のものです。
2009/03/30(月) 16:01:14ID:kjBKEg9u:
45[SIN] = 2[SQRT] / 2.0;
:
↑この前こんな感じの見かけたんだけど、今時これはないと思った
0953名前は開発中のものです。
2009/03/30(月) 17:51:34ID:Bov4VD4yszExceptionTitle db "Exception",0
szWindows2000Required db "This application requires NT 5.0 (2000) or later versions of Windows system",0
szErrorSymDefFileNotFound db "The symbolic definition file has not found",0
szErrorSpecSymDefNotFound db "A specific symbolic definition has not found",0
szErrorFileNotReadable db "Could not open or read a specified file",0
szErrorInvalidSize db "The size of symbolic definition file is invalid",0
szErrorBomMismatch db "The byte order mark of symbolic definition file is not the UTF-16 unicode format",0
szErrorOutOfMemory db "Out of memory",0
szErrorMessageFormat db "A fatal exception has occured at procedure ID %08u:",0Dh,0Ah,0Dh,0Ah,"%s.",0
0954名前は開発中のものです。
2009/03/30(月) 17:52:20ID:Bov4VD4ypush 1
push SIZEOF PT_EXCHANGE_RANDOM_SEED
call ExchangeData
test ecx,ecx
mov eax,[lpLargeBuffer]
jl ProcessTerminated
cmp [eax + PT_PUBLIC_CONTROL_WORD.ControlWord],ACT_EXCHANGE_RANDOM_SEED
jne @b
cmp ecx,SIZEOF PT_EXCHANGE_RANDOM_SEED
jne @b
cmp [bHost],0
lea ecx,[edi + CONTEXT.regEax]
jne @f
mov eax,[eax + PT_EXCHANGE_RANDOM_SEED.Seed]
mov [ecx],eax
0955名前は開発中のものです。
2009/03/30(月) 20:32:01ID:MsfTb8Bc0956名前は開発中のものです。
2009/03/31(火) 00:11:44ID:DQD5khQBdouble sin[360];
double sqrt[1000];
sin[45] = sqrt[2] / 2.0;
ってこと?
0957名前は開発中のものです。
2009/03/31(火) 01:33:09ID:jA3Wyd63本来めちゃくちゃコストがかかる計算のはずだよな?
なら、やっぱりゲーム的には精度落としてテーブル実装にするのがモアベターなのかなあ。
0958名前は開発中のものです。
2009/03/31(火) 01:35:57ID:7Dccknp/計算式で求めない確定した数値なら、テーブルのほうがベターじゃねーかな。
結局は、作り手の選択な部分なんで、絶対な解法というのはないよ。
0959名前は開発中のものです。
2009/03/31(火) 01:36:09ID:+yfcmkdB今時のPCゲームで数学関数がボトルネックになるなんて考えられない
そもそもそこを気にするんならまず描画をやめれ
0960名前は開発中のものです。
2009/03/31(火) 03:22:49ID:TlPvCoUd下手な考え何とやら
0961名前は開発中のものです。
2009/03/31(火) 04:22:06ID:DdunG5bw0962名前は開発中のものです。
2009/03/31(火) 05:20:12ID:AlfaWHG9DirectXなので当然そうなる
というか、>>961の脳内にだけ誤差とかで上手くいかない状況があるんじゃね?
0963名前は開発中のものです。
2009/03/31(火) 09:46:08ID:6nFXdL0R0964名前は開発中のものです。
2009/03/31(火) 10:03:31ID:lrQoi4dbテープル参照と三角関数のベンチマークを
ランダムな引数で比較してみろよw
0965名前は開発中のものです。
2009/03/31(火) 10:13:48ID:Z60UL3VOつ〜か、キャッシュ絡みの動作は分かりにくい。
0966名前は開発中のものです。
2009/03/31(火) 10:54:26ID:6nFXdL0Rテーブル参照の方が10分の1のコストで済んでいた。
どういう組み方すれば三角関数の方が早くなるのか教えて欲しい。
0967名前は開発中のものです。
2009/03/31(火) 11:20:46ID:NJFMHqzDまあそれでもテーブルの方が速いってことは十分ありえるが
0968名前は開発中のものです。
2009/03/31(火) 17:37:45ID:AlfaWHG9>>966のPCで特殊な結果が出たなら、珍しいねとしか言えない
0969名前は開発中のものです。
2009/03/31(火) 17:52:51ID:oMQsq3DX速度とか書き込む前に少なくともOS・CPUスペック・RAM容量・言語・住所・氏名を明示しましょう。
0970名前は開発中のものです。
2009/03/31(火) 18:03:17ID:EoCekJlWベンチマーク用のサンプルソースが示されないのはなんで?
論ずるよりもそれ実行すれば一発で納得できると思うんだけど
そんなに特殊なプログラムなの?
0971名前は開発中のものです。
2009/03/31(火) 18:08:55ID:wt58uqRX可読性重視
0972名前は開発中のものです。
2009/03/31(火) 18:35:26ID:YrEQyE+G0973名前は開発中のものです。
2009/03/31(火) 18:55:24ID:DdunG5bwDirectXなら当然のことなのか
ついでに動的使う負荷も無視できるのかな
あれってvirtual宣言した時点で動的と判断されて負荷かかるのかな
0974名前は開発中のものです。
2009/03/31(火) 19:30:48ID:e23bhJED設計する為に継承したり、インターフェース用意したりしてるんじゃねーの?
手元に1行も自分が書いたソースねーだろw
まさに>>888
0975名前は開発中のものです。
2009/03/31(火) 20:01:42ID:eRxRYNY8dblData = 0.0f;
intTime1 = GetTickCount();
for ( i = 0; i < 100000; i++)
{
dblData = sin ( 0.5f);
}
intTime2 = GetTickCount();
intKekka1 = intTime2 - intTime1;
// グローバルメモリ参照
dblData = 0.0f;
intTime1 = GetTickCount();
for ( i = 0; i < 100000; i++)
{
dblData = dblSin[i];
}
intTime2 = GetTickCount();
intKekka2 = intTime2 - intTime1;
これで、intKekka1が16、intKekka2が0
コンパイラ VS C++ 2008
Dual core 1.6GHz メモリの速度は忘れた。
C++のsinが多項式でいってるのかとか、どこまで精度だしてるかは不明。
0976名前は開発中のものです。
2009/03/31(火) 20:04:29ID:eRxRYNY8intKekka1が188、intKekka2が15
VS C++のsinだとメモリ参照したほうが早い
他のコンパイラは、ここになかったんで不明
0977名前は開発中のものです。
2009/03/31(火) 20:07:14ID:C8QskIEz0978名前は開発中のものです。
2009/03/31(火) 20:07:31ID:AlfaWHG9キャッシュを一言も挟まない辺り狙ってるなw
0979978
2009/03/31(火) 20:11:04ID:AlfaWHG9>Dual core 1.6GHz メモリの速度は忘れた。
Dualとか関係無いのはさすがに判るよね?
そこに書かなきゃいけないのは、CPUの2次キャッシュの大きさと、dblSin配列の大きさ
0980名前は開発中のものです。
2009/03/31(火) 20:12:13ID:EVrWm6RK文句ばっか言ってないでお前の環境での結果を見せればいんじゃね?
0981名前は開発中のものです。
2009/03/31(火) 20:12:53ID:C8QskIEzいや、sin[i]じゃないだろjk。
public double sinex(double rad)
{
for(int i=1;i<tbl.size();i++)
{
if(rad>tbl[i-1] && rad<tbl[i])return tbl[i];
}
return 0;
}
とかこんな感じじゃね?
0982名前は開発中のものです。
2009/03/31(火) 20:14:58ID:C8QskIEz0983名前は開発中のものです。
2009/03/31(火) 20:22:33ID:ZKYAtsRNテーブルを頭から走査したら駄目だろw
それでベンチマークになってると思ってるのかね。
それと、そのコードって最適化かかるとまずいんじゃない?
変数をvolatileで宣言してれば平気かもしれんが。
0984名前は開発中のものです。
2009/03/31(火) 20:23:51ID:C8QskIEz整数実装にすれば(0が0度、64が180度(1PI),96が270度(1.5PI)みたいな設計にしてるなら配列のサイズ関係ないっぽいぜ。
もちろん、それの前処理としてのiが渡ってくる過程が重要になるけど。
)
それにしたって*1000くらいしたあとに %128とかで片付ければいいだけなのでそんなにコストがかかってるとは思わないけどな。
0985名前は開発中のものです。
2009/03/31(火) 20:33:35ID:eRxRYNY82次キャッシュが1024Kbyte
dblSinの大きさは、8000000byte
>>983
for ( i = 0; i < 1000000; i++)
{
intNo[i] = ((float)rand() / (float)RAND_MAX)* 1000000.0f;
}
dblData = 0.0f;
intTime1 = GetTickCount();
for ( i = 0; i < 1000000; i++)
{
dblData = dblSin[ intNo[i]];
}
intTime2 = GetTickCount();
intKekka2 = intTime2 - intTime1;
ランダムいれてみて、intKekka2が31。
今のやり方だとまだテーブルのほうが速い。
0986名前は開発中のものです。
2009/03/31(火) 20:38:11ID:eRxRYNY8volatileはつけてる。
0987名前は開発中のものです。
2009/03/31(火) 20:40:53ID:eRxRYNY8ライブラリ組み込みのsinの求めかたってコンパイラが違っても
計算のやり方同じなん?
gccでもVCでも同じ?
0988名前は開発中のものです。
2009/03/31(火) 20:47:49ID:DdunG5bw速度繋がりでついでに別個の問題として聞いたわけだが
0989名前は開発中のものです。
2009/03/31(火) 20:49:04ID:C8QskIEz0990名前は開発中のものです。
2009/03/31(火) 21:14:20ID:+ipl15Vv今時三角関数省いたくらいで喜ぶなよ。
0991名前は開発中のものです。
2009/03/31(火) 21:35:55ID:WEsXEB630992名前は開発中のものです。
2009/03/31(火) 22:05:59ID:yOP/w+uJ「サンプルプログラム示して実行させれば誰もが納得するだろ」って話になってるのに
「環境で変わるから〜」とか
「三角関数省いたくらいで喜ぶな」とか意味わからん。
0993名前は開発中のものです。
2009/03/31(火) 22:16:26ID:AlfaWHG9734msのダミーコードを追加した
intKekka1 750 実質 16ms
intKekka2 766 実質 32ms
for ( i = 0; i < 100000; i++)
{
for ( j = 0; j < 100000; j++)
tt = otherMemory[j]; //ダミーコード
}
intTime2 = GetTickCount();
dummyOnly = intTime2 - intTime1;
for ( i = 0; i < 100000; i++)
{
dblData = sin ( 0.5f);
for ( j = 0; j < 100000; j++)
tt = otherMemory[j];
}
intTime2 = GetTickCount();
intKekka1 = intTime2 - intTime1;
// グローバルメモリ参照(←ヒープでいいよね?)
dblData = 0.0f;
intTime1 = GetTickCount();
for ( i = 0; i < 100000; i++)
{
dblData = dblSin[ intNo[i]];
for ( j = 0; j < 100000; j++)
tt = otherMemory[j];
0994名前は開発中のものです。
2009/03/31(火) 23:04:17ID:0FYQSp1Gそこまで明らかにミスキャッシュを誘発させるベンチはどうなんだろうね。
あと、dblSin[ intNo[i]]; だとテーブル二段階アクセスになるから
ちょっと不利な計測の仕方でしょ。
0995名前は開発中のものです。
2009/03/31(火) 23:15:34ID:WEsXEB630996名前は開発中のものです。
2009/03/31(火) 23:35:56ID:AlfaWHG9doubleData[i] = (double)rand() / (double)RAND_MAX;
なる配列を加えて、
dblData = sin ( doubleData[i]);
にした
kekka1 734
kekka2 781
確かに、画像の回転ぐらいやらせんと説得力ないな
0997名前は開発中のものです。
2009/03/31(火) 23:57:28ID:oMQsq3DX0998名前は開発中のものです。
2009/04/01(水) 00:02:19ID:NFPupAwb0999名前は開発中のものです。
2009/04/01(水) 00:10:27ID:LuCgRd4k1000名前は開発中のものです。
2009/04/01(水) 00:12:11ID:HvCh7B+t10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。