トップページgamedev
987コメント315KB

鬱だ氏のう DirectX (Part 5)

■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものですた。02/07/23 00:32ID:DsnWt/i.
DirectXについてマターリと技術情報交換&雑談するためのスレッド。
初心者用相談室では扱わないような少し高度な話題も受け持つ。

■旧スレ(プログラム板)
http://piza.2ch.net/tech/kako/966/966655286.html  (Part 1)
http://pc.2ch.net/test/read.cgi/tech/997101556/   (Part 2)
http://game.2ch.net/test/read.cgi/gamedev/1005119775/ (Part 3)
http://game.2ch.net/test/read.cgi/gamedev/1016276254/ (Part 4)

コピペスマソ
0206名前は開発中のものです。02/08/06 03:24ID:???
while(1){
 OutputDebugString("最適化ばかりしててコミケ落とさないでください!\r\n");
 GameMain();
 Test_205();
}
0207名前は開発中のものです。02/08/06 03:55ID:???
>>205
マジでそこが原因なの?
コメントアウトしてみた?

ついでに蛇足だけど、SAFE_RELEASE(dxutil.h)や
if( texture != NULL )
{
    texture->Release();
    texture = NULL;
}
したほうがよさげ。
020820502/08/06 04:44ID:A065mayA
>>207
問題のところをコメントアウトにして実行させるとメモリが増えるようなことは起きませんでした。

ためしに、別に小さいプログラムを作って同じ事をさせても同じ現象が起きなかったので
なにか、別のところが間接的に影響を与えているのかな、もう少し調べてみます。
020920502/08/06 05:09ID:???
解決しました。
↓こいつが原因でした、何であーなのかわからんが、やっと寝れる。

/*
* デバッグ ヒープのフラグを設定して、ヒープのリンク リストに解放
* したブロックを保持します。これにより、解放したメモリの不注意な
* 使用を検出できます。
*/
int tmpDbgFlag;
tmpDbgFlag = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG);
tmpDbgFlag |= _CRTDBG_DELAY_FREE_MEM_DF;
tmpDbgFlag |= _CRTDBG_LEAK_CHECK_DF;
_CrtSetDbgFlag(tmpDbgFlag);
0210名前は開発中のものです。02/08/06 05:25ID:???
>メインループで
メインループで確保と解放を繰り返してんのか!?Σ( ̄▽ ̄;)
021120202/08/06 06:26ID:???
おはようございます。

>>203-204
そう思ってドライバ更新したにもかかわらず>>202の状況なわけですよ。
ウィンドウモードなら何の問題もないので当面フルスクリーンナシでいくかぁ…

#フルスクリーンで遊ぶユーザーが多いと聞いたが…
0212名前は開発中のものです。02/08/06 06:29ID:gQhH5TM6
http://js-web.cside.com/
0213名前は開発中のものです。02/08/06 08:21ID:mY.DofG6
http://www.7swords.com/~czar/
DirectXには直接関係ないけど、ここお気に入り〜
0214名前は開発中のものです。02/08/06 09:47ID:???
>>209
_CRTDBG_DELAY_FREE_MEM_DFのフラグがあると、メモリ領域は解放フラグをつける
だけで、実際には解放しません。この場合、解放するのはプログラム終了時。
メモリ不足の状態を再現するのに使えるらしいです。
MSDNにもちゃんと書いてあるので読もうね。

ちなみに、_CRTDBG_LEAK_CHECK_DFはプログラム終了時にリークがないかチェックします。
0215◆KeJ3pYYQ02/08/06 09:51ID:HhMbK2lE
メタセコイアで、半球を二つ組み合わせた、くす玉みたいなオブジェクトを作って、
それをxfile書き出しして表示させてるんですが、ぴったり二つくっつけてもまん丸
に見えません(少し縦に細く見えて、つなぎ目が目立ちます)。
最初から球状のオブジェクトなら、ちゃんと丸く見えます。
半球状の物を二つくっつけて、ちゃんと球状のオブジェクトとして見せるにはどうすれば
ヨイのですか
021612702/08/06 09:54ID:???
>>201
ぐぁ。という事は、Dx8でフルスクリーンで画面更新しつつ
GDIを使うのは不可能ってことですか。
どうしても必要なら、DX7でやるかDX9を待つしかないのね…(;_;)
またはそれぞれ自前で実装するってのもあるか。
0217名前は開発中のものです。02/08/06 11:52ID:???
>215
境界の法線をなんとかしる
メタセコにその機能がなければどうしようもないんじゃない?
もしくは法泉のつじつまが合うように工夫しる<だめかも
0218名前は開発中のものです。02/08/06 11:54ID:???
うちのIMEは何度もコメントで「法線」つかってるのに「法泉」かぁぁぁ
0219◆KeJ3pYYQ02/08/06 14:16ID:HhMbK2lE
>>218
>メタセコにその機能がなければどうしようもないんじゃない?

なんて事を言うんですか!じゃあどうしろと言うのですか!!!

ところで、xfileをロードした後にプログラムで球を二つに割るというのはどうでしょう
0220名前は開発中のものです。02/08/06 15:15ID:???
まあそれも手だわな
022120502/08/06 15:47ID:???
>>214
なるほど、原因の理由がわかりました
ありがとうございます。
0222名前は開発中のものです。02/08/06 18:52ID:???
>>219
割れてない状態のXファイルと割れた状態のXファイルを2つ用意するとか。
0223名前は開発中のものです。02/08/06 19:00ID:???
半球ぐらいなら最初からプログラムで生成してもいいんじゃないかの
0224ひよこ名無しさん02/08/06 20:04ID:???
>>219
>なんて事を言うんですか!じゃあどうしろと言うのですか!!!
激しく厨房臭い
0225◆KeJ3pYYQ02/08/06 20:44ID:w4Cz3L1Q
>>224
すんません、そこは失笑するところなんです

あとポリゴンを細かーくするとかっすかね・・・
0226名前は開発中のものです。02/08/07 02:58ID:???
テキスト形式で吐き出して、自分で頂点一つ一つ修正しろ。
0227名前は開発中のものです。02/08/07 04:32ID:???
なんで三角関数使って動的に生成しないのん?
0228◆KeJ3pYYQ02/08/07 09:59ID:???
>>227
そういう例外的なことが出来るほどプログラムが抽象化されてないんです
0229名前は開発中のものです。02/08/07 11:39ID:???
ステンシルバッファで切るとか・・・
まあどっちにしても変則的になるが
0230名無しサソ02/08/07 13:00ID:???
 Xfileはそのまま二つ読み込んで、中心点を使って法線を張り直せばいいのでは・・・?
中心点と円の表面の点を通るベクトルを法線にすれば、継ぎ目は見えないのでは?多分。
0231名前は開発中のものです。02/08/07 13:38ID:???
俺はアマちゃんだが、法線ベクトルがよく分からない。
法線はポリゴンの三頂点の内積とは限らんの?
法線をxfileに持たせるとか持たせないとか。その辺がよくわかんないズラ
0232名前は開発中のものです。02/08/07 13:49ID:???
ここでの法線は頂点法線
DirectXのヘルプにも載っていること
尼ちゃんも風呂も関係ない
0233名前は開発中のものです。02/08/07 14:19ID:???
なんのことはない、「英語を読めないと2流以下になる」という
当たり前の結論が当たり前に出ただけに留まりましたな。
0234名前は開発中のものです。02/08/07 14:42ID:???
頂点法線て何スか
0235名前は開発中のものです。02/08/07 15:13ID:???
つうか内積はスカラだろ・・・外積と書きたかったんだろうが、、
取りあえず高校から勉強しなおせ。話はそれからだ。
0236名前は開発中のものです。02/08/07 15:19ID:???
つまり、知らないと
0237名前は開発中のものです。02/08/07 15:44ID:???
だらだら質問してんじゃねえ。少しは自分で調べろ
0238名前は開発中のものです。02/08/07 15:50ID:???
サクッと教えてよ
0239名前は開発中のものです。02/08/07 15:57ID:???
死んでも嫌
0240名前は開発中のものです。02/08/07 16:09ID:???
ヽ(`д´)ノ
0241あぼーんNGNG
あぼーん
0242名前は開発中のものです。02/08/07 16:46ID:???
高校の幾何レベルの知識がない奴に恵む気にはなれんな。
いい機会だから先生に聞いて見ろ。見直されるぞ(w
0243あぼーんNGNG
あぼーん
0244名前は開発中のものです。02/08/07 16:53ID:???
知ったか厨と終了厨が来た
0245名前は開発中のものです。02/08/07 17:08ID:???
食物連鎖の関係だね。
(食う)>(食われる)で表記すると、

  終了厨 > 知ったか厨 > 教えて厨
0246名前は開発中のものです。02/08/07 17:31ID:???
教えて厨は知ったか厨に食われるのかYO
0247名前は開発中のものです。02/08/07 18:03ID:???
終了厨が連鎖の頂点かYO
0248名前は開発中のものです。02/08/07 20:27ID:???
知ったか厨ってのは高校幾何レベルの説明を御丁寧に説明していい気になる
奴のことかと思った。
0249名前は開発中のものです。02/08/07 20:34ID:???
>>228
自分のプログラムじゃないの?
だったら自分で半球の.x fileを書き出すプログラムを書けば済むかと。
0250名前は開発中のものです。02/08/07 20:39ID:???
つーか、メタセコとかってどういう基準で法線計算してんの?適当?
0251名前は開発中のものです。02/08/07 20:54ID:???
アホか。物体を分けてる時点で頂点が共有されてないんだから
当然法線も違ってくる

切断面に透明ポリゴン置いたら回避できねぇかな?
(DirectXで表示するなら、また別の問題があるけど)
0252名前は開発中のものです。02/08/07 21:06ID:???
>>251
だから、その頂点が共有されてない場合の法線の取りまわしについてだよ
0253名前は開発中のものです。02/08/07 21:32ID:???
意味がわからん。
メタセコの仕様に文句あるなら自前で計算するしか無いじゃん
帰れよ
0254◆KeJ3pYYQ02/08/07 21:32ID:???
>>249
そうなんですが、実際に出したいのはもうちょっと複雑で、モデラーでないと作れそうにないんだよ・・・

つーか、球にそういうテクスチャ貼ってアルファテストで抜きゃいいじゃんという気がしてきた
0255名前は開発中のものです。02/08/07 21:59ID:???
球体のメッシュにマテリアルに貼り付けたいのですができません。
LPD3DXMESH mesh=NULL;
D3DMATERIAL8 mat;を宣言
Init3D関数内で
mat.Diffuse.r = 1.0f; mat.Diffuse.g = 0.0f; mat.Diffuse.b = 0.0f;
mat.Ambient.r = 1.0f; mat.Ambient.g = 0.0f; mat.Ambient.b = 0.0f;
mat.Specular.r = 1.0f; mat.Specular.g = 0.0f; mat.Specular.b = 0.0f; mat.Emissive.r = 1.0f; mat.Emissive.g = 0.0f; mat.Emissive.b = 0.0f;
としてマテリアルを赤く設定したのち
D3DXCreateSphereで球体メッシュを生成。
Render関数内で
lpD3DDEV->SetMaterial(&mat);
mesh->DrawSubset(0);
とやったのですが、表示される球体は真っ白です。
なぜこうなってしまうのでしょうか?
0256名前は開発中のものです。02/08/07 22:39ID:???
>>254
難しく考えるとハマるという良い例になった
0257名前は開発中のものです。02/08/07 22:57ID:???
レンダーステートとテクスチャのステージステートの設定。
わからなけりゃフレームワークつかえ
0258名前は開発中のものです。02/08/07 23:05ID:???
DX8で
IDirect3DDevice8::CreateAdditionalSwapChainの
オモロい使い方てありまへんか
0259名前は開発中のものです。02/08/07 23:28ID:???
>>255
ライトの設定がおかしいとそうなった気がする
0260名前は開発中のものです。02/08/07 23:46ID:???
255です。
テクスチャ貼り付けちゃえば赤くできるのですが、ちゃんとマテリアル使えるようになりたいと思いまして。
ライトはつかっておりませんが、
InitRender関数内で
lpD3DDEV->SetRenderState(D3DRS_LIGHTING, TRUE);
とすると、画面上のポリゴンが真っ赤になってしまうのです。
じゃあ、球体を描画する前にTRUEにして終わったらFALSEに
しようとおもったのですが、そうすると球体が見えなくなってしまいました。
どうやら、テクスチャを貼り付けたポリゴンのみに作用しているようなのです。
0261名前は開発中のものです。02/08/07 23:52ID:???
255です。
アルファブレンディングの設定をFALSEにした後に描画したら
赤く表示することができました。
0262名前は開発中のものです。02/08/08 01:02ID:???
>>261
まさかとは思うが、透明度を0にしてないだろうな?
どんな色をつけてライトを当てても透明度が0なら色はつかないぞ。
0263名前は開発中のものです。02/08/08 02:41ID:???
え、マテリアルもRGBAのようなアルファ値があるんですか?
mat.Power=1.0fとやればいいってことですか?
0264名前は開発中のものです。02/08/08 04:47ID:???
D3DMATERIAL8 の定義をよく読め。

あとこれはどうでもいいことだけど、matと略すと行列と間違えるから、
俺はmtrlを使っている。ま、こりゃどっちでもええことだけど。
0265名前は開発中のものです。02/08/08 04:49ID:???
そうそう、matは使わないよね
俺はmateだけど(ダサッ

mtrlみたいな一文字飛ばし略語もなんかいやん
0266名前は開発中のものです。02/08/08 05:03ID:???
一文字飛ばしじゃなくて母音飛ばしだよ。よく使う手。mjskみたいなもん。
0267名前は開発中のものです。02/08/08 05:09ID:???
mjskってなに?(俺アホ?
0268名前は開発中のものです。02/08/08 06:05ID:???
>>267
Σ( ゚Д゚) mjsk!!
0269名前は開発中のものです。02/08/08 06:13ID:???
http://www.google.co.jp/search?hl=ja&lr=lang_ja&q=%28%81@%81K%84D%81K%29mjsk%21%3F

マジッスカの略かぁ…。初めて知った
0270名前は開発中のものです。02/08/08 12:05ID:/HiLzdeI
投影テクスチャ使ってキャラの影を落としたいんですが
どうすればいいんですか?
0271名前は開発中のものです。02/08/08 13:15ID:???
ん?
0272名前は開発中のものです。02/08/08 13:53ID:???
漠然とした質問は返事しにくい。
要点をバシッと決めてくれ。
0273名前は開発中のものです。02/08/08 16:54ID:???
VCつかってやってるんですが、入力支援機能を使用可能にするにはどうすればいいのですか?
0274名前は開発中のものです。02/08/08 17:31ID:???
統合環境のエディタでソース開いて「::」とか
打ち込むと出てくるうざいアレのこと?
0275名前は開発中のものです。02/08/08 17:35ID:???
例:
ワークスペース - FileViewに、「DirectX」というフォルダを作る
DirectXのincludeファイルをプロジェクトに追加。
そこで追加したファイルは邪魔なので最初に作った「DirectX」フォルダに分けておく

とかすれば、入力支援機能でDirectXの構造体を使えたりも駿河
0276名前は開発中のものです。02/08/08 20:47ID:???
>>275
フォルダわけの意義がイマイチ謎
0277>>27502/08/08 21:11ID:???
もうちっと詳しく教えてくださらないでしょうか?
0278&gt02/08/08 21:52ID:???
>>276
ダブルクリックしてファイルを開きたいときに見つけづらいからでは?
0279名前は開発中のものです。02/08/08 22:15ID:???
>>277
もう十分詳しいと思うぞ。理解力が足りない
0280名前は開発中のものです。02/08/08 22:36ID:???
>>277
これ以上詳しくできないよ…
0281277=27802/08/08 22:36ID:???
どうも、理解できました。
0282名前は開発中のものです。02/08/09 03:23ID:???
DirectX8で2Dアクション(マリオのような)作る時って、
スプライトを使うべきか使わないべきか。
0283名前は開発中のものです。02/08/09 05:17ID:???
面白ければどっちでもいい、が遊ぶ側の本音だが、
いまどき横スク画面は壊滅的にダサくてダウンロードすらされない。
VB厨が垂れ流す駄ゲーと区別つかん。
0284名前は開発中のものです。02/08/09 06:12ID:???
HSP厨もな。
0285名前は開発中のものです。02/08/10 19:58ID:PD7Pi8C6
レンダリングステートの変更のコストを抑えるために、
少しの違いでもステートブロックを作ったら
ステートブロックの数が爆発しました。
ピクセル関連のステートだけですが、それでも64個。
もうひとつの選択肢として、レンダリングステートとテクスチャステージステートの
キャッシュつきラッパー関数を作るのもあります。

みなさんどうしてますか?
0286名前は開発中のものです。02/08/10 20:39ID:???
>>285
ステートブロック作っても切り替えを実行しちゃったら変更コストは
あんまり変わらんのでは?

ステートごとにグループ化する努力のほうが効きそうな気がする
0287名前は開発中のものです。02/08/10 23:57ID:9NCQqQXk
ステートの変更なんてたいして時間かかるものじゃ無いと思うけど。
どうせDirectX内部のどっかにある変数を切り替えてるだけだろ?
実際のレンダリングやら衝突判定やらにかかる時間に比べたら微々たるものだと思う。
0288名前は開発中のものです。02/08/11 00:18ID:???
ステート変更が入るとビデオカードが描画終わるまで待たないと
いけないからその分遅くなるよ。
CPUとGPUは非同期に並列に動いているから、単純に変数を書き換
える程度じゃ済まない。
0289名無しサソ02/08/11 00:44ID:???
 そういえば、レンダーステートの話で思い出したけど、PureDevice指定という
のは、レンダーステートのGetが全て出来ない代わりに、GPUの高いパフォーマンス
を得られると言う認識でいいのかな?

 プログラムを検証していて思うんだけど、SoftwareT&L環境下では当然
ながらパフォーマンスが頭打ち。上手く作ればもうちょっと速くはなるだろうけど、
HT&Lには到底及ばない。GeForce3世代になって、その差が目立ちはじめたけど、
皆さんはどの辺のパフォーマンスに主眼を置いてプログラムを作ってるのかな?
最近はHT&Lを前提にしたゲーム(Unrealエンジンとか)も増えているようだけど。

 というか、この辺は新しくポリゴン数スレみたいなものを作ったほうが良いですか?
自分みたいなヘタレだと、最新のビデオカードのパワーは手に余る・・・。
0290名前は開発中のものです。02/08/11 00:46ID:???
softT&Lなんて無視に決まってんだろ。
差がありすぎて両立は無理
0291名前は開発中のものです。02/08/11 01:14ID:???
SoftT&Lは、市販ソフトでも「遊べるか知らんけど動く」までやれば十分。
今年中だと、Soft頂点シェーダは微妙。
Doom3で底上げ期待。
0292名前は開発中のものです。02/08/11 02:27ID:???
近頃はHWT&Lを省略したチップが増えてきたから微妙だな。
CPUが速くなっているからそれで補うってのがメーカーの言い分だけど、
速いCPU使ってる奴がそういう安物ビデオカードを使うとは思えない。
結局、安物ビデオカードを買う奴はCPUも遅いんじゃないかな。
0293名前は開発中のものです。02/08/11 02:58ID:???
>>287
たとえば
ステートAに切り替え→描画1→ステートBに切り替え→描画2→ステートAに切り替え→描画3→
よりも、
ステートAに切り替え→描画1→描画3→→ステートBに切り替え→描画2→
のほうが高速だよ。
0294名前は開発中のものです。02/08/11 05:14ID:???
>>293
ステートAに切り替え→描画1→ステートBに切り替え→描画2→ステートAに切り替え→描画3→
はリア厨でもやらんだろ〜
確実に遅い例にはもってこいだがちょっとワラタよ
0295名前は開発中のものです。02/08/11 05:21ID:???
メッシュの透明に描画するには、ライトの宣言は必須なんですか?
0296名前は開発中のものです。02/08/11 05:21ID:???
俺はやるよ
つか、時間かけてる間に性能が上がるので最適化いらん(泣

Xファイル使ってるような奴は皆そうでしょ。
細かいコントロール不能だし

そーでなくてもピーク性能ってよくわからんよね
測定方法もなんか難しいつーかコツがあるみたいだし…
0297名前は開発中のものです。02/08/11 05:30ID:???
>>293
半透明オブジェクトや、エフェクトで加算合成じゃないビルボード
のZソートで結構ある
0298名前は開発中のものです。02/08/11 07:01ID:???
フィルレートが一番ネックになるので結構あるよ。
俺のマシンは出来るだけ前から書くのが一番だ。
Xファイルの連打ってステート変更もしちゃうのか???
そら使いにくい罠
0299名前は開発中のものです。02/08/11 07:31ID:q2d3/uDw
Xファイルの質問です。
XファイルのテンプレートにAnimationKeyというのがあって、
そのメンバにキーの種類を示すkeyTypeがあり、ヘルプを見るとこの値の意味するところは
0:回転、1:スケーリング、2:位置、3:行列キー
となっています。
ところが、とあるソフトでXファイルを吐き出すと、これが4というものが
出る場合があります。4は一体何を示しているのか、分かる人がいたら教えて下さい。
0300名前は開発中のものです。02/08/11 07:42ID:???
スキンメッシュのサンプル読む限り 4が行列キーだな
3は登場しない前提で対応するコードが書かれていてない
0301名前は開発中のものです。02/08/11 07:44ID:???
すまん。書いてあった。エラーです(藁
0302名前は開発中のものです。02/08/11 07:58ID:???
とあるソフトが何か気になる…
0303名前は開発中のものです。02/08/11 10:10ID:???
今まで何も考えずにD3DXVec3TransformCoordを使っていましたが、
何気にヘルプを眺めているとD3DXVec3Transformを発見
Coordのほうには「・・・その結果を w=1 に射影する」と書かれているのですが
これは無駄に/wが計算されていたのでしょうか???(普通のトランスフォームだから常にw=1)
まさに鬱だ市悩
0304名前は開発中のものです。02/08/11 10:35ID:???
と思ったらD3DXVec3TransformはVECTOR4用だった・・・
でも「・・・その結果を w=1 に射影する」が気になる
結局よく解らんので自前にしよう。そうしよう。
やっぱり鬱だ市悩
0305名前は開発中のものです。02/08/11 13:09ID:aO/cH.IU
スキンメッシュで質問です.
頂点法線も頂点と同じように回転の重ね合わせで求めるのですかね.
 n' = α0*n*R0 + (1-α1)*n*R1
毎フレーム毎ポリゴン外積,正規化していられませんよね
間接ごとに別れたモデルをワンスキンにしようと思ったのですが,LVERTEXにしたらせっかくのワンスキンが台無しかと思いまして.
skinnedmeshサンプルはちょっと読む気になれませんでした.お願いします.
■ このスレッドは過去ログ倉庫に格納されています