Direct 3D
■ このスレッドは過去ログ倉庫に格納されています
0001.
01/11/09 17:06ID:wrfy6OtCとりあえずDX8以降は初期化が簡単になったり関数が変わったり
結構大幅に変わりましたがその辺も踏まえてお願いします。
0304名前は開発中のものです。
03/12/17 21:23ID:kecn54jU3Dっつーのもそろそろ限界に来てるな。
技術じゃなくて需要が。
0305名前は開発中のものです。
03/12/21 22:32ID:n1iQDmEmそういうときだけは表側は描かないで、代わりにステンシルバッファ全部を
インクリメントしちゃって、そのあといつもどおり裏側で抜く。
で、うまくいきそうな気がするけど
0306名前は開発中のものです。
03/12/21 22:45ID:oSm5qie6前クリッピング平面にクリッピングされたとこが視界に入るような状況だと(動きが早いと数フレームぐらいしか生じないけど)
そこで見た目がへんになるんだよな…
まぁクレタクは305のほうほうだろうけど
0307名前は開発中のものです。
03/12/22 02:44ID:o8QuJx9zそうそう、反転した面はZ無視でね。
厳密にはこれでも結構問題でるんだけど、取り合えず動きが早いものなら誤魔化せます。
0308名前は開発中のものです。
03/12/22 17:52ID:VTzd2bKsでも最近は、光源から見て描画したZ値と、視点から見たZ値を比較して影を
描くのが流行みたいね
0309名前は開発中のものです。
03/12/22 17:57ID:Q6Mm9LXSって訳ではないのだが。
シャドウボリュームを端折って、ステンシルで丸影を使う場合もある。
0310名前は開発中のものです。
03/12/22 18:13ID:VTzd2bKs丸影のテクスチャを描画する代りに、ステンシルの値のみ変えるよう描画し、
画面の描画が全部終わったところで、ステンシルの値が変わっている
ピクセルを影っぽい色をブレンドして塗るってこと?
0311名前は開発中のものです。
03/12/22 18:30ID:Q6Mm9LXSまともに作ると重いから。
0312名前は開発中のものです。
03/12/22 21:00ID:VTzd2bKs0313名前は開発中のものです。
03/12/22 22:54ID:yj69sFk75時間考えたけどどーしてもその方法ワカラン・・・
前投影面の少し前でクリッピングするほうほうじゃだめかねぇ、
まぁこの方法自体難しい気がするけど
0314名前は開発中のものです。
03/12/23 01:45ID:1vDrzUD81パス目…普通に描画
2パス目・・・Z*-1してZは無視で描画。
すると、2パス目でニアでクリップされた部分が描画されるしょ?これでニアクリップ面は塞がれるって寸法。
でも、解説の為に簡略したけどホントは2パス目はニア平面で反転させないとダメよ。
まー、描画コスト高いけどコレが一番楽。というか、305のやり方の方がよく解らん。無理がある気がする。
0315名前は開発中のものです。
03/12/23 01:47ID:1vDrzUD80316名前は開発中のものです。
03/12/23 02:21ID:VyQpIX7zサンクス!
よーやくわかたよ。なるほどね、うまいこと考えるね。プロ?
オレの考えた方法に比べれば
実質ステンシル描画負荷2倍なんて軽いもんだ。
0317名前は開発中のものです。
03/12/23 02:54ID:58Qv7PQZそういう技術つかった日本のPCゲームないじゃん。
0318名前は開発中のものです。
03/12/23 03:08ID:EO+0r1r50319名前は開発中のものです。
03/12/23 07:23ID:z5pCXM0M他にはどこで使われてんの?
0320名前は開発中のものです。
03/12/23 13:44ID:3A9yt2E/コンシューマーはどの辺がつまんないの?
つーかやったことあるの?
0321名前は開発中のものです。
03/12/24 02:14ID:fo2vArQTいや、それフツーに使われてるテクだと思うよ。少なくとも自分のいるコンシューマ屋じゃ常識ぽいかも。
SONY製の安物ハードだとニアクリップも自前でやらにゃあかんのでそのついでにニアでふさぐけどね。
なんつー前時代的な・・・
コンシューマ屋は昔から失敗作みたいなハードが主流を握る傾向があるので技術があっても表に出しにくい
ってのがあるな。なんだったらサイレントヒル3とかカーマックも舌打ちしそうな出来だから見とくといいよ。
ま、PC版もあるわけだけど。
0322ステンシル大好きな人
03/12/30 08:05ID:2wi9wpGvしなくても、ZFAILでステンシルを更新する方法を使えば解決するよ。
ただ、逆にファークリップにひっかかる場合に問題になるけど。
あとフィルが、普通の方法よりも厳しい。
車ゲーみたいにある程度視点と光源の位置関係が固定されているなら、
ファークリップの問題はほとんど関係ないかも。
リプレイなんかで上から見下ろすときは、逆にニアの問題が有り得ないから
状況に応じて使い分ければいいかと。
0323名前は開発中のものです。
03/12/31 07:55ID:dYmJ5kjK裏面は、D3DRS_STENCILZFAILをD3DSTENCILOP_INCRSATにして描画
表面は、D3DRS_STENCILZFAILをD3DSTENCILOP_DECRSATにして描画
これだけで影に視点が入ってもうまく表示できたよー!
自機に背景の影が落ちるの見てなんか感動した
さて次は、視点からの距離で影にもフォグがかかるようなんとかしたい…
0324名前は開発中のものです。
04/01/04 09:26ID:uFzLO2ik飽和減算で裏面を書けば防げるってことかな?
0325名前は開発中のものです。
04/01/04 09:27ID:uFzLO2ik0326名前は開発中のものです。
04/01/04 14:06ID:kQ7jSRJZ地面を境界にシャドウボリュームを2つに分断して、その断面を暗くすれば
影になるわけだけど、普通の方法は分断されたシャドウボリュームの地面より
上の方を使っている。ZFAILの方法は、地面より下のボリュームを使っている。
どちらを使っても断面の形状は全く一所だから、同じ影ができる。
ただ、ZFAILの方法をセルフシャドウに使おうとすると、ちょっと注意が必要。
0327名前は開発中のものです。
04/01/29 12:03ID:aRkiSiXSttp://developer.nvidia.com/object/nv_texture_tools.html
これの使い方がさっぱりわまかそりん。どこのボタン選択して
も真っ青(法線ベクトルのまま)の画像しか生成されません・・・教えてシェーダー使いの人
0328327
04/01/29 12:50ID:aRkiSiXSナンチャンの顔から作ったノーマルマップを使ってバンプ表現にチャレンジ・・・
0329名前は開発中のものです。
04/01/29 16:20ID:JOflTWGEちんぽりごん
0330名前は開発中のものです。
04/01/30 13:37ID:ISbdpqEk3Dゲームにおいて爆発などのエフェクトはどういったポリゴンで
表現されているのでしょうか?
0331名前は開発中のものです。
04/01/30 15:02ID:+aDGr/Yc0332名前は開発中のものです。
04/01/30 15:14ID:vd2N2Ux70333名前は開発中のものです。
04/01/31 08:19ID:IQTlYJOfひょっとして >>330 は ビルボード行列の作り方を聞きたかったのか?
0334330
04/01/31 15:14ID:PYmxYIqC爆発でどこからみても爆発して見えるのはてっきり爆発用に
頂点データ的なものがあるのかな〜と思いまして、しかしそれだとすごく
疲れる作業だな〜と思い聞かせていただいた所存でございます。
キャラの位置に合わせてポリゴンをビルボードしてるんですかね。
ありがとうございました。
もしよろしければビルボード行列の作り方を教えて戴けませんでしょうか。
0335名前は開発中のものです。
04/01/31 16:56ID:WSdg894Qsprite.Begin(SpriteFlags.Billboard | SpriteFlags.SortDepthFrontToBack);
とか。
DX9 Summer 2003 Update 用ね
0336名前は開発中のものです。
04/01/31 17:24ID:IQTlYJOfmatView ビュー行列(あらかじめ作っとく)
matBillboard ビルボード行列
D3DXMatrixInverse( &matInv, NULL, &matView );//行列の逆元
matBillboard = matInv;
matBillboard._41 = 0.0f;//X移動を0
matBillboard._42 = 0.0f;//Y移動を0
matBillboard._43 = 0.0f;//Z移動を0
たしかこれでビルボード行列ですはいー。
0337名前は開発中のものです。
04/02/01 13:19ID:u/zDYgLU0338330
04/02/01 14:16ID:372QHYP7実はもう1つ問題がありまして、もしよろしければ助けて戴けないでしょうか。
334でも述べた通り3Dゲームを作っておりましてアクションゲームなのですが
X,Y,Z 10,6,30 のMAPでブロック(x,y,z=1,1,1)を表示していきたいのですが、
現在頂点データを6個で立法体(1,1,1)でMAPを表示しておりますがそれでは
ポリゴン数が多すぎてFPSがでないので、ブロックの大きさを2,1,1や4,2,3
などの頂点データを打っているのですが数を上げていくと頂点データを
1000以上打たなければいけない計算になります。
この問題に大して打開策がありましたら教えて戴けませんでしょうか。
0339名前は開発中のものです。
04/02/01 14:22ID:qGvNFBm3or
MAPの仕様を変える
0340名前は開発中のものです。
04/02/01 14:30ID:w7gnma4r0341名前は開発中のものです。
04/02/01 15:44ID:Xi+ahqRK0342名前は開発中のものです。
04/02/01 16:21ID:OUnuJC++それやってたとしてもそんなに遅くはならないはずだけど。
0343名前は開発中のものです。
04/02/01 16:32ID:MUD5wauh0344名前は開発中のものです。
04/02/01 16:47ID:u/zDYgLUIDがC++
0345名前は開発中のものです。
04/02/01 20:19ID:zmw0Mii3安い店ないかな?
0346名前は開発中のものです。
04/02/01 20:40ID:u/zDYgLU0347330
04/02/02 03:04ID:RyS6mA+Oこれやってますね。何か他の方法があるのですか。
0348名前は開発中のものです。
04/02/02 05:27ID:Jm+cIG2+プログラマならはっきりいってこんなんで十分だぞ。
http://www.amazon.co.jp/exec/obidos/ASIN/B00006JMXI/249-6804501-1889152
>>347
誰のレスに何を聞きたいのか非常にわかりづらいので
もっとわかりやすくなるようにしてくれないですかね?
0349名前は開発中のものです。
04/02/02 05:52ID:Jm+cIG2+いくつか疑問が・・・。
>X,Y,Z 10,6,30 のMAPでブロック(x,y,z=1,1,1)を表示していきたいのですが、
>現在頂点データを6個で立法体(1,1,1)でMAPを表示しておりますがそれでは
>ポリゴン数が多すぎてFPSがでないので、ブロックの大きさを2,1,1や4,2,3
>などの頂点データを打っているのですが
とありますけど、そもそも謎の多い文章なんですよこの文章は。
まず、X,Y,Z(10,6,30)のマップっていうけど1ブロック辺り12ポリ使ったとしても
10*6*30*12で21600ポリ程度じゃポリ数が原因で速度が落ちることはあんまり無いと思うけど?
しかもこれって全部画面に出した場合であって普通はマップのある部分だけなんでしょ?
はっきりいってポリ数が速度の落ちる原因とは考えにくい。
で、ここでいくつか質問だけど
・クリッピング処理(画面からはみ出た部分を描画しないようにする処理)はちゃんとやってる?
・みえない部分は描画しないようにしてる?(Zバッファを利用して前から描画とかでもいいや)
・実際のゲームの画面で一回の描画で何ブロック描画する必要があるのよ?(マップ全部じゃないでしょ?)
・カリングの設定はしっかりできてる?
・本当に速度の落ちる原因はポリ数だったか調べた?
(実はこれを調べるのは結構困難。単に描画面積がでかかっただけかもしれないし、
クリッピング処理が上手く働いていなかったとか・・・。)
あたりは全部やってるの?
0350名前は開発中のものです。
04/02/02 06:32ID:HsES/+LZPhotoshop Elementsはアルファチャンネル削られてるからゲープロ的にはだめぽだと思う。
DirectDraw世代なら別にかまわないけど。
0351名前は開発中のものです。
04/02/02 06:43ID:Rie53uXk環境にもよるがDrawPrimitiveをめっさいっぱい呼ぶともっさりするので注意な。
>>336
誰も突っ込まないので(というか突っ込まなくてもいいか?)一応。
matView ビュー行列(あらかじめ作っとく)
matBillboard ビルボード行列
D3DXMatrixTranspose(&matBillboard, &matView);//転置
matBillboard._14 = matBillboard._24 = matBillboard._34 = 0.0f;
この方が早い。逆行列使うのは避けた方がいいでそ?
0352名前は開発中のものです。
04/02/02 06:49ID:Rie53uXkそこでMS謹製のTextureToolですよ。
('A`)マンドクセ
0353名前は開発中のものです。
04/02/02 07:25ID:Jm+cIG2+pngで保存すると背景の部分がアルファチャンネル扱いになるけど?
それで十分じゃないの?
0354名前は開発中のものです。
04/02/02 07:31ID:Jm+cIG2+ビルボードなんてカメラと平行っぽくなってりゃいいんじゃないの?
なんで逆行列や転置が必要なのかわからない。
そのままでいいだろ。
D3DXMATRIX bill = view;
んで、
bill._41 = bill_x;
bill._42 = bill_y;
bill._43 = bill_z;
で完成じゃボケ。
0355名前は開発中のものです。
04/02/02 13:50ID:f+P8GJRa0356名前は開発中のものです。
04/02/02 20:52ID:qCykuM3X言語ではないと聞いたんで…。
DirectX覚えただけではゲーム作れないんですか?
0357名前は開発中のものです。
04/02/02 21:31ID:ruvzNpBE0359名前は開発中のものです。
04/02/02 23:37ID:qCykuM3XDirectXだけ勉強してゲームは作れるんでしょうか?
0360オレー
04/02/03 00:26ID:lqBJLK7tわかりやすく言うと、DirectXはゲームとかにつかう命令のセットだ!
コントローラーのボタンを読め!とか、ポリゴンを描け!とか命令するとやってくれる。
C++とか他の言語で、その命令を呼んでやるわけだが、そーいうもんだから呼ぶために言語も勉強しろ!!
0361289
04/02/03 01:28ID:pyweXtofそれとも、C++でもできることを簡単にするように使うのがDirectXですか?
とりあえず言語は覚えてみます。
0362オレー
04/02/03 01:38ID:aqfOOcxzとりあえず、基本的なとこでいいから、てきとーに言語覚えてからすぐSDKについてるサンプルをビルドしろ!
そんで改造していくと覚えるの速いぞ。マジお勧めなこれ
0363X
04/02/03 01:40ID:low7AtO4X,Y,Z 10,6,30 のMAPにおいてfor文で回してMAP情報を書き込んだ3次元配列から
データを読み取ってブロック表示しているのですが。
ここで今まで書き込ませて戴きましたが、皆さんとても豊富な知識をお持ちのようで。
そこで大変ご迷惑だとは思いますがE-mailに乗せてあるアドレスで私はメッセンジャーを
使っておりましてもしよろしければ私のプログラムを見てもらいましてアドバイスをいただきたいのですが。
大変ご迷惑な事、ずうずうしい事とは承知しつつもし見て戴ける方が居られましたらお願いいたします。
0364名前は開発中のものです。
04/02/03 02:16ID:6qjzgiJc0365名前は開発中のものです。
04/02/03 02:42ID:V33o00bN0366名前は開発中のものです。
04/02/03 10:02ID:nvDFyoS5わざわざメールでやりとりなんて疲れるから
http://cgi.f6.aaacafe.ne.jp/~pyuav/php/upload.php
うpしる!
0367X
04/02/03 11:14ID:q1OWKOSR// DrawMain - 描画メイン
// この関数は1フレームごとに呼び出されます
void DrawMain(){
// バックバッファと Z バッファをクリア
lpD3DDEV->Clear(0,NULL,D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,D3DCOLOR_XRGB(0,0,0),1.0f,0);
// 描画開始
lpD3DDEV->BeginScene();
D3DXMATRIX matWorld,matRotateX,matTrans,matView;
0368X
04/02/03 11:14ID:q1OWKOSRstatic float BectolX=3,BectolY=0,BectolZ=8;
// 視点は (0,0,0) にあり、(0,0,5) の方向を向く
D3DXMatrixLookAtLH(&matView,&D3DXVECTOR3(PlayX,PlayY,PlayZ),&D3DXVECTOR3(BectolX,BectolY,BectolZ),&D3DXVECTOR3(0,1,0));
// プロジェクション行列を設定
D3DXMATRIX matProj;
// 視界 60 度、近くの限界 0.1、遠くの限界 100.0
D3DXMatrixPerspectiveFovLH(&matProj,60.0f * PI / 180.0f,1.0f,0.1f,100.0f);
// 各行列を設定
lpD3DDEV->SetTransform(D3DTS_VIEW,&matView);
lpD3DDEV->SetTransform(D3DTS_PROJECTION,&matProj);
0369名前は開発中のものです。
04/02/03 22:31ID:Dj4DkP/N0370名前は開発中のものです。
04/02/03 23:32ID:/6vJImFbBectol → Vector
0371オレー
04/02/03 23:34ID:VYXMEMW70372名前は開発中のものです。
04/02/03 23:53ID:pACG0/A5英語力の問題でもないような。
途中までだけどなんか根本的に
わかってないような気がする。
0373名前は開発中のものです。
04/02/04 00:08ID:8XXIUaLnそう?とりあえずここまでのソースは問題なさそうな感じだけど。
細かくはみてないけど。
0374名前は開発中のものです。
04/02/04 00:25ID:yUu1C7Gnだってベクトルって言葉は知ってるのに
D3DXVECTOR3をベクトルって気付かないまま使ってるのはどうかと思う。
float x 3 使っちゃってるし。
サンプルか何かを見ながら
よくわからないままコーディングしてる気がする。
0375名前は開発中のものです。
04/02/04 00:40ID:8XXIUaLnいや、さすがにそれだけじゃ判断できないって。
0376名前は開発中のものです。
04/02/04 01:22ID:S4gpfpmIどんな力を利用してでも自分の周りから遠ざけるけどな。
0377名前は開発中のものです。
04/02/04 02:01ID:yUu1C7Gn問題ないと思うならメッセンジャーでアドバイスしてあげてよ。
0378名前は開発中のものです。
04/02/04 07:36ID:r/i/wFB80379X
04/02/04 08:32ID:TUjDrKublpD3DDEV->Clear(0,NULL,D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,D3DCOLOR_XRGB(0,0,0),1.0f,0);
lpD3DDEV->BeginScene();
D3DXMATRIX matWorld,matRotateX,matTrans,matView;
static float PlayX=12,PlayY=10,PlayZ=-8;
static float BectolX=3,BectolY=0,BectolZ=8;
D3DXMatrixLookAtLH(&matView,&D3DXVECTOR3(PlayX,PlayY,PlayZ),&D3DXVECTOR3(BectolX,BectolY,BectolZ),&D3DXVECTOR3(0,1,0));
D3DXMATRIX matProj;
D3DXMatrixPerspectiveFovLH(&matProj,60.0f * PI / 180.0f,1.0f,0.1f,100.0f);
lpD3DDEV->SetTransform(D3DTS_VIEW,&matView);
lpD3DDEV->SetTransform(D3DTS_PROJECTION,&matProj);
// MAP表示
int X,Y,Z;//各座標ループ用
lpD3DDEV->SetTexture(0,BLOCK01texture);
for(Z=0;Z<2;Z++){
for(Y=0;Y<6;Y++){
for(X=0;X<10;X++){
switch(MAP[Z][Y][X][1]){
case 111:PrintBLOCK(&matTrans,&matWorld,Z,Y,X,0,6);break;
case 211:PrintBLOCK(&matTrans,&matWorld,Z,Y,X,6,12);break;
case 311:PrintBLOCK(&matTrans,&matWorld,Z,Y,X,12,18);break;
case 411:PrintBLOCK(&matTrans,&matWorld,Z,Y,X,18,24);break;
case 511:PrintBLOCK(&matTrans,&matWorld,Z,Y,X,24,30);break;
case 611:PrintBLOCK(&matTrans,&matWorld,Z,Y,X,30,36);break;
}}}
po=1;
FrameCnt();
lpD3DDEV->EndScene();
if (FAILED(lpD3DDEV->Present(NULL,NULL,NULL,NULL))){lpD3DDEV->Reset(¶m);}
}
0380X
04/02/04 08:35ID:TUjDrKub改行が多くて乗せれないみたいなことがでてしまい時間がかかりました。
皆さんアドバイスお願いいたします。
MAP表示のSelect文のcaseはあともっとあります。
0381名前は開発中のものです。
04/02/04 09:12ID:S4gpfpmID3Dより先にC言語を勉強するべき
0382名前は開発中のものです。
04/02/04 09:43ID:+5PC35hU#define BLOCK_SIZE_Y (1.0f)
#define BLOCK_SIZE_Z (1.0f)
CUSTOMVERTEX *pcv = (CUSTOMVERTEX *)locked_ptr; // 頂点バッファが望ましい
for(Z=0;Z<2;Z++){
for(Y=0;Y<6;Y++){
for(X=0;X<10;X++){
if( MAP[Z][Y][X] != 0 ) { // 描画するか否か
float x = X*BLOCK_SIZE_X;
float y = Y*BLOCK_SIZE_Y;
float z = Z*BLOCK_SIZE_Z;
D3DCOLOR c;
float tu,tv;
// 立方体を構成 (カラー、UVは適当に設定)
(*pcv++) = CUSTOMVERTEX( x, y, z, c, tu,tv );
(*pcv++) = CUSTOMVERTEX( x, y+BLOCK_SIZE_Y, z, c, tu, tv );
(*pcv++) = CUSTOMVERTEX( x+BLOCK_SIZE_X, y+BLOCK_SIZE_Y, z, c, tu, tv );
(*pcv++) = CUSTOMVERTEX( x+BLOCK_SIZE_X, y, z, c, tu, tv );
:
:
poly_counter += 1ブロックあたりのポリゴン数;
}
}}}
DrawPrimitive( QUADLIST, poly_counter );
もしくは1ブロックごとにD3DTS_WORLDを更新してDrawPrimitive系()を複数回呼ぶ。
・・・俺はなにか勘違いしてるんだろうか
0383名前は開発中のものです。
04/02/04 14:21ID:fWwu0COO0384名前は開発中のものです。
04/02/04 22:39ID:uFnV7/G9漏れダメかもしんない。
0385X
04/02/05 14:10ID:6C1zUxy0どこか教えて戴けないでしょうか。
0386名前は開発中のものです。
04/02/05 14:15ID:8EbK+SUSswitchの事だと思うけど。
あと、PrintBLOCK()の中身の一部を晒しつつ
トリップつけてみてよ
0387X
04/02/05 14:40ID:6C1zUxy0int HF,W,WF,O;
HF=H+2;W=H+2;WF=H+4;O=H+4;
if(MAP[MapZ][MapY][MapX][0]==1){H++;}
・
for( ;H<HF;H++){
D3DXMatrixTranslation(matTrans,MoveX[MapZ][MapY][MapX],MoveY[MapZ][MapY][MapX],MoveZ[MapZ][MapY][MapX]);
*matWorld = *matTrans;
lpD3DDEV->SetTransform(D3DTS_WORLD,matWorld);
lpD3DDEV->SetStreamSource(0,vb[H],0,sizeof(LVERTEX));
lpD3DDEV->DrawPrimitive(D3DPT_TRIANGLEFAN,0,2);
}
for( ;W<WF;W++){
D3DXMatrixTranslation(matTrans,MoveX[MapZ][MapY][MapX],MoveY[MapZ][MapY][MapX],MoveZ[MapZ][MapY][MapX]);
*matWorld = *matTrans;
lpD3DDEV->SetTransform(D3DTS_WORLD,matWorld);
lpD3DDEV->SetStreamSource(0,vb[W],0,sizeof(LVERTEX));
lpD3DDEV->DrawPrimitive(D3DPT_TRIANGLEFAN,0,2);
}
for( ;O<OF;O++){
D3DXMatrixTranslation(matTrans,MoveX[MapZ][MapY][MapX],MoveY[MapZ][MapY][MapX],MoveZ[MapZ][MapY][MapX]);
*matWorld = *matTrans;
lpD3DDEV->SetTransform(D3DTS_WORLD,matWorld);
lpD3DDEV->SetStreamSource(0,vb[O],0,sizeof(LVERTEX));
lpD3DDEV->DrawPrimitive(D3DPT_TRIANGLEFAN,0,2);
}
}
こんな感じです。LPDIRECT3DVERTEXBUFFER9 vb[]がグローバルでvb[1800]確保していてその変数の中に頂点データを格納してます。
379のfor文のZが少しおかしかったです。終了条件は30でした。
if文の・はその数値によって立方体のどの面を表示しないかを設定してます。
0388名前は開発中のものです。
04/02/05 15:01ID:8EbK+SUS1つじゃだめなの?
0389名前は開発中のものです。
04/02/05 15:14ID:/vLOTadAもうネタとしか思えない。
0390名前は開発中のものです。
04/02/05 15:18ID:yFFdfEYaあと、もし毎フレームごとに頂点バッファ作っているようなら、
背景みたいに変形しないモデルなら、最初に全てのポリゴンを含んだ頂点バッファを
1つ作っておいて、それをDrawPrimitiveで描画したほうが手間がかからないよ。
0391名前は開発中のものです。
04/02/05 15:53ID:8EbK+SUSブロック[0,0,0]の 常に描画する6ポリゴン
ブロック[0,0,0]の flag!=1の時だけ描画する6ポリゴン
ブロック[1,0,0]の 常に描画する6ポリゴン
ブロック[1,0,0]の flag!=1の時だけ描画する6ポリゴン
ブロック[2,0,0]の 常に描画する6ポリゴン
ブロック[2,0,0]の flag!=1の時だけ描画する6ポリゴン
:
void DrawMain() {
lpD3DDEV->SetStreamSource(0,vb,0,sizeof(LVERTEX));
for(Z=0;Z<2;Z++){
for(Y=0;Y<6;Y++){
for(X=0;X<10;X++){
PrintBLOCK(Z,Y,X);
}}}
}
void PrintBLOCK( int MapZ, int MapY, int MapX ) {
D3DXMATRIX matWorld;
D3DXMatrixTranslation(&matWorld, MoveX[MapZ][MapY][MapX], MoveY[MapZ][MapY][MapX], MoveZ[MapZ][MapY][MapX]);
lpD3DDEV->SetTransform(D3DTS_WORLD, &matWorld);
int StartVertex = (((CAP_X * CAP_Y) * MapZ) + (CAP_X + MapY) + MapX) * 12;
int PrimitiveCount = (MAP[MapZ][MapY][MapX][0]==1)? 6 : 12;
lpD3DDEV->DrawPrimitive(D3DPT_TRIANGLEFAN, StartVertex, PrimitiveCount);
}
0392名前は開発中のものです。
04/02/05 16:14ID:8EbK+SUS× :
int StartVertex = (((CAP_X * CAP_Y) * MapZ) + (CAP_X + MapY) + MapX) * 12;
lpD3DDEV->DrawPrimitive(D3DPT_TRIANGLEFAN, StartVertex, PrimitiveCount);
○ :
#define TRIANGLE_NUM (12) // 1ブロックを構成するポリゴン数
#define VERTEX_NUM (3) // 1トライアングルを構成する頂点数
int StartVertex = (((CAP_X * CAP_Y) * MapZ) + (CAP_X * MapY) + MapX) * TRIANGLE_NUM * VERTEX_NUM;
lpD3DDEV->DrawPrimitive(D3DPT_TRIANGLELIST, StartVertex, PrimitiveCount);
0393X
04/02/06 09:41ID:0X7fE0LVMAP情報(ブロックの大きさ、表示面FLG)をtxtから読み込んで表示させています。
1ブロック分の頂点データでMAP表示をしたところポリゴン数が多かったので
違う大きさのブロックを用意してポリゴン数を減らそうとしました。
0394X
04/02/07 12:19ID:HQxh50cdポリゴン数は500強まで抑えれたのですが全然FPSがでません。
原因として考えられるものを見たのですがわかりません。
たとえばどんなことをすればFPSがでないのでしょうか。
どなたか教えていただけませんでしょうか。
0395名前は開発中のものです。
04/02/07 12:23ID:CLQE2Fb+だから500ぽっちのポリ数で処理オチなんてするわけないでしょ。
なんでわからんのかねチミ。
原因は別のところにあるのだよ。
0396名前は開発中のものです。
04/02/07 12:31ID:cF8RWyca0397名前は開発中のものです。
04/02/07 12:36ID:o6RXyTttその上で、
PCやグラボがショボイってことは無い?MSのサンプルはきちんと動く?HELで動かしてない?
初期化の段階で一度、定義取得すればいいような処理を、毎回やってない?
無駄にループ処理が多くない?ループの外に出せる処理をループ内でやってない?
0398名前は開発中のものです。
04/02/07 16:09ID:VKCT6fFPどうにも解決できない希ガス
0399X
04/02/08 03:00ID:VlGbZ8etそういった事をしたことがなくて少しびびってます。
0400名前は開発中のものです。
04/02/08 03:17ID:FsAxusDH0401名前は開発中のものです。
04/02/08 03:18ID:X73WE+nW0402名前は開発中のものです。
04/02/08 03:45ID:jR1jDgu/0403名前は開発中のものです。
04/02/08 04:30ID:UH78BtVm■ このスレッドは過去ログ倉庫に格納されています