[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 08/06 20:32 / Filesize : 251 KB / Number-of Response : 956
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【C++】 DirectX初心者質問スレ Part24 【C】



1 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 22:06:29 ]
※回答する人も、質問する人も必ず読んでください

これらに当てはまる人のための質問スレです。
1.C/C++は多少理解している。
2.最近DirectXを始めたばかり
3.SDKを見ても、Googleで検索しても、いまいち理解できない人
4.余計な雑談は不要ですよ

【 回答してくださる方 】
・ できるだけ優しく質問に答えてあげてください。
・ 優しく教えるのが嫌でしたら、解決するためのヒントだけでも結構です。
 「ググれ」「SDK見れ」以外の回答でおながいします。
・ 神ですら理解不能な質問は無視して下さい。

【 質問する方 】
・ どんな事で躓いているのか明確にしよう。
・ 長くならないなら躓いている部分のコードを晒してみれ。
・ 解決した場合、お礼を言うのは当然だが、何をどうしたら解決したかを明確に書こう。
・ 回答して貰ったら、出来るだけお礼もしよう。

【C++】 DirectX初心者質問スレ Part23 【C】
pc12.2ch.net/test/read.cgi/tech/1242977486/

201 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 16:50:02 ]
D3DRS_COLORWRITEENABLE
ですね。
ただこれは、マスクを0にしてもピクセルシェーダ自体は呼び出されてしまうようです。
ピクセルシェーダ自体を呼び出さずに済ませてしまう方法があったような気がするのですが・・・
曖昧な記憶で申し訳ないです

202 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 17:48:55 ]
9でも連打ーターゲットNULLでいけなかったっけ

203 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 18:12:17 ]
>>201
DirectX9にはない。
0.0を出力しとけ。

普通は色の出力を全部マスクしていればドライバー側で
PixelShaderの処理はスキップしてくれるはず。

>>202
インデックス0に対してはNULL無理。

204 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 20:31:43 ]
ピクセルシェーダから深度値を変更できるんだから、
カラー出力しなくてもスキップされるわけないだろう。

205 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 20:35:20 ]
深度値を出力した時だけ早期Zカリングがスキップされたりするんだから
カラーマスクと深度出力をみて不要ならスキップもしてるだろ。

206 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 20:56:12 ]
スキンメッシュのプログラムはマテリアルを設定してないの?

207 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 21:28:10 ]
それは自分次第だろ。

208 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 21:44:46 ]
HELP ME
Xファイルを表示するためにマテリアルの数を変数に格納したはずなのになぜか格納されていません。
推測で原因を教えてください

209 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 21:57:48 ]
推測だがお前が悪い



210 名前:デフォルトの名無しさん [2009/07/06(月) 22:54:50 ]
directsoundでIDirectSoundBuffer8::SetVolumeをセットしても音量に変化がありません。なぜだすか?

211 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 22:57:08 ]
>>210
っ 初期化

212 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 23:49:24 ]
>>211
IDirectSound8::CreateSoundBufferが内部で初期化してるけど、音量変更前にもう一回初期化するってこと?
そもそもループ内でそれやるの難しくない?

213 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 23:56:55 ]
最初にやれよ

214 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 00:01:05 ]
CreateのときにDSBCAPS_CTRLVOLUMEフラグを立ててないからって落ちじゃ?

215 名前:デフォルトの名無しさん [2009/07/07(火) 00:51:34 ]
a


216 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 01:02:16 ]
DI8で pDI8->EnumDevices でデバイスを列挙するのはわかるんだが
pJoyDevice->EnumObjectsでプロパティを列挙したときに何が取得できるかよくわからない

たぶんボタンがいくつあるとか軸の範囲とかの取得・設定ができるんだと思うんだけど
EnumObjectsCallback内でpJoyDevice->SetPropertyとかやっているサンプルが多く、
これだとpJoyDeviceが1つのときは問題ないんだろうけど
複数のpJoyDeviceを扱いたいときとかどうすればいいのだろう?
とか考えるとさらによくわからなくなりまつ

BOOL CALLBACK EnumObjectsCallback( const DIDEVICEOBJECTINSTANCE* pdidoi,VOID* pContext )
のpContextに、プロパティ設定したいデバイスのpJoyDeviceでも渡して
pContext->SetPropertyとでもしておけばいいんでしょうか?




217 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 01:12:08 ]
PCでパッド2個つけて2人用プレイって需要あるんかな
格闘ゲームでも1P vs COM か COM vs COMしか利用されないだろ

218 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 02:16:04 ]
家庭用ゲーム機のエミュとか?

219 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 09:15:32 ]
abnormal.sakura.ne.jp/upfiles/2008/06/29/keiou.jpg

            l   i    i        i    i    l
   / ̄ヽ   昼l   ゝ  ノ        ゝ  ノゝ  ノ
   , o   ', 食ご l  i´   `i  _   i´ 講  `i   `l
   レ、ヮ __/  べはl  l     /  \ l  義  l   l
     / ヽ  よん.l       {@  @ i   が  l   l
   _/   l ヽ うを l       } し_  /   お
   しl   i i    l        > ⊃ <    わ
     l   ート   lヽ、    / l    ヽ     っ
 ̄ ̄¨¨'~~ ‐‐‐--─|  ヽ 、 / /l   丶 .l`\ た
____   __   |     (_/ |   } l`\|
    ||  |WC|  |  へ へ   ヽ、  l ! \||
    ||   ̄ ̄  |/   \ `ヽ、 ヽし! /|| ガタッ
    ||       |    / /     ヽ、||
  ◎||       |   / /        ヽ、
 ̄ ̄ ¨¨¨ー─‐‐--- ,,, __ ____
       ,, _    |        ̄¨¨` ー──---
モパ  /     `、   |    モパ   |:::::::::::::::
グク /       ヽ |    グク  /  ̄ ヽ:::::モパ
モパ./  ●    ●l |    モパ  l @  @ l:::グク
グク l  U  し  U l |   グク  } し_  /::::モパ
   l u  ___ u  l |     _  /=テ⊃ <_グク
    >u、 _` --' _Uィ l   ◎ー)/キ' ~    \ヽ
  /  0   ̄  uヽ |    |  | | i二二二i-'  ) ',
. /   u     0  ヽ|    ~~~ ~ l ヽ--┬ ' ./
 テ==tニト      |      / ̄/ ̄ ̄` ノ /
/ ̄) ̄ | ̄ ̄ ̄ ̄ ̄|      |  |  |二二二)





220 名前:sage [2009/07/07(火) 18:55:08 ]
>>216
pJoyDevice->EnumObjects は 第3引数で指定したフラグの情報が取得できる
例えば軸情報なら DIDFT_AXIS を指定すればいい。
ttp://msdn.microsoft.com/ja-jp/library/cc351884.aspx

>BOOL CALLBACK EnumObjectsCallback( const DIDEVICEOBJECTINSTANCE* pdidoi,VOID* pContext )
引数には DIDEVICEOBJECTINSTANCE オブジェクト と EnumObject で渡した第2引数 pContext がある。
コールバック関数で指定したフラグの情報を含む DIDEVICEOBJECTINSTANCE オブジェクトから pContext に情報を
引っ張ってくればいい。

ex)
Joystick* pJoy = (Joystick*)pContext;
if (pdidoi->guidType == GUID_XAxis) /* 処理 */


221 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 21:13:24 ]
トイレでプログラミングはしても良くて助かった

222 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 21:32:50 ]
監視カメラ設置かよ

223 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 23:14:53 ]
あれあれ?
俺ライブラリをVistaに対応する前にWindows7とかでちゃったw

224 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 23:30:55 ]
これはどんな仕組みなの?
ttp://www.teatime.ne.jp/infor/tech48/page_02_01.htm

225 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 23:42:55 ]
DirectXと関係ない宣伝行為乙

226 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 23:47:07 ]
どう見てもDirectXだが

推奨環境
Vista 日本語版WindowsXP / Vista
Intel(R)Core(TM)2 Duo プロセッサ 2.40GHz 以上

メモリ 以上 2.0GB 以上


DirectX9.0cに完全対応し
ビデオメモリ256MB以上で
ピクセルシェーダー2搭載の
GeForceまたはRADEONシリーズ
(メーカーから最新のグラフィック
ドライバサポート必須)
画面解像度1280X960ピクセル
フルカラー推奨

メインメモリと共有と表記のあるビデオシステムは動作保証外となります
サウンド DirectSoundに完全対応したサウンドカード
DVD-ROM 4倍速以上のドライブ
HDD 5.0GB以上の空き容量


227 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 23:54:16 ]
224の仕組みとDirectXは関係ない。
OpenCVのスレにでも行けばいいかと。

228 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 01:44:18 ]
てs

229 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 09:02:37 ]
>>223
よう俺



230 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 09:16:19 ]
         宇  宙  の  大  規  模  構  造
                 (太陽の∞倍)
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄∧ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
              帝ハ神ナリ!帝ハ神ナリ!




         グ  レ  ー  ト  ウ  ォ  ー  ル
 ̄ ̄ `――(長さ:太陽の3500兆倍、幅:太陽の2100兆倍) __ , -――
               ∧
           守るも攻めるも黒鉄の〜♪



         _,,,,,,,,_
        /`  `'i、
超銀河団  |      l    <ゴミクズども氏ねよwwwww
       ゙l、    /
        `'ー---'"
(太陽の約680兆倍〜)

銀河系     o  <太陽?誰だよそれwwww
(太陽の6800万倍)

IRS5       。  <太陽?俺の国民だよ
(太陽の10000倍)

太陽        .  <たいようたいよう〜!
(直径140万km)



231 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 11:44:25 ]
カメラの使用はDirectShowの範疇でありDirectXではない。

232 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 14:56:39 ]
DirectX9のフックについて、初心者向けの詳しいHPはありませんか?
当方、VC(++は少し苦手)、VB、Delphi分かります。dllのコンパイルも出来ます。

目標は、フルスクリーンの別アプリ画面に自前のグラフィックを描画することです。
レベルが低い質問かもしれませんが、よろしくお願いします。

233 名前:232 mailto:sage [2009/07/08(水) 15:02:38 ]
別アプリのhWnd取得と画像データの取得までは出来たのですが、描画の方が上手くいきません。

234 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 15:08:48 ]
またおまえか

235 名前:デフォルトの名無しさん [2009/07/08(水) 15:12:14 ]
16と16の平たいを毎回敷き詰めて描くと
テクスチャに写植して描くはどちらが速いか?

236 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 15:19:37 ]
実測しろ

237 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 15:20:59 ]
日本語がおかしいが
敷き詰めて書くのが1回の命令で出来るならそっちの方がいいんじゃね?
ただのループならWARP指定汁

238 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 16:18:32 ]
>>234
やはり直接フックがベストですか!
有り難う御座いました。

239 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 17:23:37 ]
質問です。
カメラから見た時の、あるメッシュの「厚み」を調べる方法を考えています。

サイコロのような凸型物体ならば、
・裏面を描画し、テクスチャAに深度値として書き込む。
・表面を描画し、テクスチャBに深度値として書き込む。
とし、A-Bで厚みが出ると思います。
(深度バッファシャドウの時のように、深度値をz/wで0〜1にしてしまうと、歪んでしまうので単純にzを記録する必要がありますが)

ただ、「コ」の字を上から見た時のような場合の厚み合計の出し方が思いつきません。
「コ」を真上から見た際、上辺の厚みと、下辺の厚みの合計が知りたいのです。
何か良い手はありますでしょうか?



240 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 17:34:02 ]
>>239
表面/裏面と分けるのではなく、カリングを無効にした状態でZFUNCを
LESSEQUAL、GREATEREQUALにして描画する。

241 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 17:39:32 ]
>>239
加算合成すればいいのではない?
裏面のZ値の合計から表面のZ値の合計を引く
0〜1の範囲をはみ出ないようにしないといけないけれど

242 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 17:49:10 ]
>>240
すいません、その結果何が解決するかがちょっと分からないのですが…。
一番奥であるポリゴンまでの距離が記録されるだけかと。

>>241
素晴らしいです!
まさにその通りですね!
(Af - An) + (Bf - Bn) == ((Af + Bf) - (An + Bn))
ということですね。

ありがとうございました。

243 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 18:31:47 ]
3Dゲームのプログラミングを始めようと思うのですが
オススメの書籍はありますか?

244 名前:240 mailto:sage [2009/07/08(水) 18:59:59 ]
>>242
上辺の厚みと下辺の厚みの合計ってとこ見てなかった。
コが1枚ずつの面ってことじゃなくて、厚みのある凹ってことね。

245 名前:216 mailto:sage [2009/07/08(水) 19:25:37 ]
>>220
EnumObjectsCallbackで何をやってるのかようやく理解できますた
VOID* pContext に LPDIRECTINPUTDEVICE8 を渡して
コントローラーごとに個別にプロパティが設定できるようになりました
ありがとうござますた


246 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 19:27:41 ]
>>243
DirectX逆引き大全500が鉄板だと思うが
Googleのオンライン書籍立ち読みで見れるので見るといい


247 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 21:33:09 ]
いまググって調べた。 東京12.960.883人の内、支那人149.113人だな。
堂々コリア人を抜いてる。  (09年5月調べ)

約、100人に1.15人いるんだな。

248 名前:デフォルトの名無しさん [2009/07/08(水) 22:49:17 ]
初心者ですが質問させてください。

現在DirectSoundを使った音声キャプチャプログラムを作成しています。
マイクやライン、サウンドミキサなどの入力先を指定してキャプチャを行いたいので
次の手順でキャプチャデバイスオブジェクトの作成を行っています。

手順1.DirectSoundCaptureEnumerate関数を使用して利用可能なデバイスを列挙
手順2.手順1で列挙したGUIDから任意の入力先のGUIDを選択し
   DirectSoundCaptureCreate8関数の第1引数に設定しキャプチャデバイスオブジェクトの作成

Vista環境では手順1のDirectSoundCaptureEnumerate関数で
マイクやラインなど録音デバイスの項目に表示されている
入力先の数だけデバイスの情報が取得できて
入力先を選択してのキャプチャが実施できるのですが、
XP環境では1つのデバイスしか列挙できず入力先の指定が行えません。
(録音コントロールにはマイク、ライン入力など複数の入力先が表示されています。
 録音コントロールで選択されている入力先の音しかキャプチャ出来ません。)

XPでは入力先を指定してのキャプチャデバイスオブジェクトの作成は行えないものなのでしょうか?
不可能な場合は何か入力先を指定してキャプチャするよい方法はないでしょうか?
よろしくお願いします。


249 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 23:44:16 ]
Ring 3 Circus のDirect3D9 Hookingを改造して
Direct3D9を使ったゲームの画像を取得するプログラムを作ったんですが
デバイス作成時にバックバッファをロック可能にするフラグを指定していないと
バックバッファの内容が取得できないようです。

それでIDirect3DSwapChain9::GetPresentParametersを呼んで、
得られたD3DPRESENT_PARAMETERSのFlagsを
flags |= D3DPRESENTFLAG_LOCKABLE_BACKBUFFER
のように変更し、Resetを読んだら、HRESULTがD3DERR_INVALIDCALLに・・。
Resetはだめみたいです。

ランチャとか用意して、バックバッファをロック可能でデバイスを作成させるのは使うとき面倒です。
ほかにバックバッファの内容を取得する方法は無いんでしょうか



250 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 00:36:26 ]
取得しないといけない状況がまったく思いつかないので分からない。

251 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 00:45:51 ]
IDirect3DDevice9::StretchRectでコピーすりゃいいんでないの

252 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 10:30:42 ]
質問です

パーティクル(たくさんのビルボード)を表現するのに
DrawPrimitiveUP + D3DPT_TRIANGLELIST
を使っています。

1つのビルボードを表現するのに6頂点。
100個なら600頂点のデータをDrawPrimitiveUPに渡す必要があるのですが、これが思いのほか遅い気がします。
パーティクルを表現するのに、DrawPrimitiveUPを使うのは常道なのでしょうか?

DrawPrimitiveUPによって、メインメモリーからVRAMに転送するコストが大きいのが遅い原因かな?と思います。
ただ、パーティクルは移動なども毎フレーム行われるため、DrawPrimitive(UPではない)のほうでは実現が難しい気がします。
(結局は毎フレームStreamに流す作業が必要。これではVRAMへの転送コストは変わらない)

253 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 10:47:49 ]
AGPメモリ

254 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 11:05:55 ]
どんなパーティクルを想定してるのかわからないけど
6頂点のポリじゃなくて1頂点のポイントスプライトにしてみるとか
そうすると制御が楽になるので簡単な飛び散りくらいなら
頂点シェーダで動かせるようにもなるし

255 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 11:16:33 ]
>>252
ホントにDrawPrimitiveUPの呼び出しだけを計測してる?
頂点演算って毎フレームCPUにやらせると結構負荷かかるよ。
パーティクルの移動計算が幾何学的なものならシェーダーにやらせたほうがいい。

256 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 11:31:06 ]
レスありがとうございます

>>254
ポイントスプライトも考えたのですが(ポイントスプライトで実装しているパーティクルもあるので)、
今回は頂点毎に違う方向を向いた法線が必要だった(疑似ボリュームパーティクル)ため、ビルボードにすることにしました

目指しているのは疑似ボリュームパーティクルによる煙表現です

>>252
実験としてDrawPrimitiveUPに流し込む(FVFで定義した頂点フォーマットの)構造体を編集せず、描画し続けさせてみました。
ほぼ同等の速度のようです。
おそらくCPUパワーはほとんど足を引っ張っていないかと思われます。

257 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 11:43:31 ]
>>256
TriangleStripなら4頂点で済むよ。

DirectXのバージョンが分からんが、たぶんヘルプに「動的な〜」頂点バッファ処理云々の項があって
そこにDrawPrimitiveで、頂点位置が毎フレーム変わるようなものの処理の仕方が書いてあるはず。

簡単に言えば、頂点バッファを確保して、後は毎フレームに
バッファをロック>書き込み>一杯になったらアンロックしてDrawPrimitive>再度バッファを…

更にインデックスバッファを使ってTriangleStripにすれば、転送コストはかなり違ってくるわよ。

258 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 11:49:37 ]
Stripじゃ縮退ポリゴンで2頂点増えるから、減らないだろう。

259 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 11:57:46 ]
バッファをロックするんじゃ、結局遅いと思うが



260 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 12:10:23 ]
インデックスは毎回転送する必要がないから、流すデータ量は減るんじゃないか

261 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 12:17:30 ]
微妙な即レスが続いて、なんか答えるのが馬鹿馬鹿しくなってきたが

>>258
2通りにとれるな。もう少し理由を言ってみ。縮退ポリなんか使わんよ。

>>259
今時そんな…ではDrawPrimitiveUPはどうやってVRAMに送ってるんだ?
ロックとDrawは極力まとめるんだ。まぁ、UP系もそれなりに上手くやってくれるけど。

確かLunaの作者が昔実験結果を掲載してくれてたけど、今はなくなっちゃったみたいだな。

262 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 12:45:15 ]
スプライトって全部板なんだから頂点情報ひとつで十分だろ

263 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 12:49:55 ]
>>261
縮退ポリゴンを使わずに、複数のビルボードをStripで描画するってどうやるの?

264 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 12:55:40 ]
>>261
いまどきそんな。とか言ったって、DrawPrimitiveUPより早くならなきゃ質問に答えたことにはならないんだぜ?
しかも今回は、毎フレーム1回しかUPを呼び出さだないわけだし、どうやってUP以上に「ロックとDrawをまとめる」んだよ?

265 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 13:01:22 ]
>>263-264
ごめんなさい
俺こそが質問者の質問をよく読んでない、ただの馬鹿馬鹿しい男でした

266 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 13:07:44 ]
ちゃんと自分の間違いを謝れる奴は、伸びる奴

267 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 13:10:27 ]
>>256
そこまで試したならついでに、静的なVertexBufferに頂点データ入れてみて
本当に転送が問題なのかも確かめた方がいいかと。

268 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 13:15:57 ]
            /j^i
           ./  ;!
          /  /__,,..
         /  `(_t_,__〕
         /    '(_t_,__〕
        /    {_i_,__〕
       /    ノ  {_i__〉
     /      _,..-'"
   /      /
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜




269 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 13:23:51 ]
だから動的更新ならAGPメモリ使えよ。



270 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 13:40:13 ]
>>263
インデックスバッファ

>>264
まず>>259でロックが遅いなんて書くから、UPでもロックのコストは変わらないと書いた。
「動的な〜」の項読んでみろと。>>253氏のも乗ってたはず。

で更にUP系でIB使うと、毎回IBの転送が起こるよな?
ところが非UP系ならば初期(或いはVBサイズ変更時のみ)コストだけで済む。

で、更に頂点数の転送量は2/3に抑えられる。

もう少しいうと、DrawPrimitiveUP系の場合、計算用のアクセスしやすいバッファの他に、
描画用の配列をメインメモリに取って、更にVRAMにも同じのが出来るわけだ。無駄だと思うがねぇ。

まぁ、好きに実装したらいいじゃないの。なんでそんな必死よ>>265-266

271 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 13:43:23 ]
>>252がDrawPrimitiveUPを連投してるなら
それをまずやめるべき。
>>257方式で、まとめるのが一番良い方法だろうな。

余力と環境があるなら、ジオメトリインスタンシングも
試して欲しいところだが。

272 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 14:06:50 ]
結局「縮退ポリゴンを使わずに、複数のビルボードをStripで描画する」方法の説明がないわけだが

273 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 14:11:03 ]
インデックスで縮退用のを適当に一枚かますってことか
それでなくてもDrawPrimitiveUPにこだわる人は、
描画数増えたときどうするんだろ?

274 名前:デフォルトの名無しさん [2009/07/09(木) 14:24:44 ]
「DirectSoundで鳴らしている音」を録音したいのですが、
どうすればよいでしょうか?

例えば、自作ゲームの「BGM」と「プレイ中に適宜鳴る効果音」の両方を
1つのWAVファイルに録音したいと思っています。
よろしくお願いします。


275 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 14:27:40 ]
縮退ポリは使わないと言ってるだろ

276 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 14:39:01 ]
なんか大人と子供だな

277 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 14:40:13 ]
そもそも2000〜3000ポリゴン以下ならDrawPrimitive系もDrawPrimitiveUP系も
速度にほとんど差がないんだが、みんな計測した上で話をしてるんだろうか?

278 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 14:43:08 ]
誰もそこの速度差は問題にしていないけどな

279 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 14:46:15 ]
259です。
>>270
>UPでもロックのコストは変わらないと書いた
259で書いてるのは「結局(UPと同じくらい)遅いと思うが」という意味です。



280 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 14:54:53 ]
>>277 >>278
むしろ本当に3000ポリゴン程度で差が出るなら問題じゃね?
速いほう使った方がいいだろ

281 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 15:07:02 ]
たくさんのご意見ありがとうございます。

まず、UPをやめる+INDEX化で転送量が2/3になるのは良さそうです。
やってみます。
さらにINDEXバッファは1回だけ書けば書き換え無用ですから、純粋に2/3になりそうで良いですね。

TriangleStripで〜という方法は、いまいちわかりません。
離れた位置の四角ポリゴン(実際は三角ポリ×2)を描画する必要がある以上、TriangleStripは使えないのではないでしょうか?
縮退ポリゴン(描画されない細い三角ポリゴン)を使うことによる手法も聞いたことはありますが。

AGPメモリというのが最初よくわかりませんでしたが、D3DUSAGE_DYNAMICを指定することなんですね。
こちらも試してみます。

このほかに、下記のような手法も考えたのですが、一般的ではないのでしょうか?
説明を楽にするために、INDEXではない方法での説明とします。
・「四角形を1つ描画するのに必要な情報」を作る。つまり6頂点分。
 頂点データの中にD3DFVF_SPECULARを加え、その領域に「何個目の四角形か」を入れておく。

・上記の6頂点×描画しうる四角形分の”静的”頂点バッファを作り、情報を書き込む。
 その際D3DFVF_SPECULARの領域に入れている「何個目の四角形か」をきちんと適切な値にしておく。

・パーティクルを表現するには、四角形毎の座標情報を更新する必要がある
 そこでID3DXEffect::SetVectorArray()で座標情報を渡す

・エフェクト側ではD3DCOLORtoUBYTE4を使って、対応するVectorArrayの座標情報を引き出し、頂点座標に加算する

問題点として、ビルボードをカメラに正面向けにするためのMATRIX変換を頂点シェーダ内でやる必要があります。
(今までは、頂点データ内のxyzを正面向くように調整済みだった)

282 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 15:16:38 ]
>>281
長々書いてあるが、テストすれば分かることだから自分でやってくれ。

Index関係の思い出といえば、
Indexバッファを途中から使うための引数の与え方が全然資料が無いことだった。
正しく動作させるまでかなり試行錯誤したな。
一度動けばなんてことないんだが。

283 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 15:24:58 ]
>>282
詳しく
前にIndexバッファを途中から使おうとしたんだけど
GeForceとIntel系チップセットでは想定通りの動きをしたんだけど
ATI系のビデオカードではうまく動いてくれなかったんだよね

284 名前:282 mailto:sage [2009/07/09(木) 15:28:43 ]
>>283
逆に、マジかと言いたい。
オレはGeForceで開発した上でIntel系とATI系でも動いてることを確認する形を取ったが、
Direct3DのAPIレベルで互換性が無いような違いが
IndexedBufferレベルであるんだろうか?

285 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 15:44:09 ]
>>281
全然わからんが、要はこれがしたいのか?
FVFが通るか、不安があるけど。

uniform float4x4 g_world_transform[n] = { ... };
static const float4 g_local_position[4] = { ... }; // for box vertices

struct vertex_in_t
{
uint24 transform_index; // 0~n
uint8 position_index; // 0~3
};

struct vertex_out_t
{
float4 positon;
float4 color;
};

void vp_main( in vertex_in_t iv, out vertex_out_t ov )
{
float4x4 world_transform = g_world_transform[iv.transform_index];
float4 local_positon = g_local_position[iv.position_index];

ov.position = mul( local_positon, world_transform );
pv.color = float4(1,1,1,1);
}

286 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 17:34:48 ]
縮退ポリゴンとはなんぞや?

287 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 17:43:39 ]
>>286
面積が0のポリゴン
ストリップは数珠繋ぎしか出来ないけど
途中面積が0のポリゴンを繋げれば
バラバラに見えるでしょ

288 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 17:52:37 ]
報告です。

281で提唱した方法だとでかかる時間を1とすると、
AGPメモリに置く方法は2
DrawPrimitiveUPでやる方法は3
となりました。

何の因果か、きれいに1:2:3になりました。

281で提唱した方法だと、実質VRAMへ転送している量はvector4 * particleNumでかなり節約できます。
その他ですと、
float x, y, z;
float nx, ny, nz;
DWORD color;
float u, v;
でfloat * 9 * particleNumほど転送しているので、二倍超転送していることになります。
やはりボトルネックはこのあたりなのでしょう。

次は、ストリームを分けることで、AGPメモリに置く方法をとりつつxyzの値しか転送しないようにしてみます。


289 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 17:59:13 ]
1*1のポリゴン用意して
トランス演算とDraてPrimitive繰り返せばよくね?



290 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 18:21:59 ]
>>281を見てると「それってInstancingじゃね?」と言いたくなる
ttp://msdn.microsoft.com/ja-jp/library/bb174602(VS.85).aspx

291 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 18:48:59 ]
小沢の西松建設問題の時
09/01/21 西松建設社長を逮捕
09/01/21 元西松建設専務 死亡
09/02/24 長野知事の元秘書(西松建設事件での参考人) 死亡
      (電柱にロープを巻きつけ首吊り自殺)
09/03/01 「小沢一郎氏と秘書と、ダム工事のただならぬ関係」を追及してきた記者(吉岡元議員) ソウルで取材中に死亡
09/03/03 民主党岩手支部家宅捜索
09/03/04 民主党事務所のある相模原卸売市場全焼
助かった人
小沢氏の第一秘書・大久保容疑者も自殺の恐れが出てきたため、検察が緊急逮捕

鳩山の献金問題



292 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 23:14:37 ]
288です。
288の報告は、いわゆるオンボでの実験で、頂点シェーダがソフトウェアで行われていました。

グラボつき(GF9600)の環境で試したところ、
UP系 5
AGP  8
281法 1

の割合で時間がかかりました。
AGP法のほうが、UPよりも遅くなっているのが印象的です。

>>290
面白い記事ありがとうございます。
まさしくこれですね。

293 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 23:42:09 ]
なんかやり方が下手な気がする
ソースあげてみ

294 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 23:49:07 ]
つかindexbufferも使えない素人のコードによる測定になんの価値があるんだ
いつまでやる気だろ

295 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 23:57:00 ]
>面白い記事ありがとうございます。
節子…それ、公式サンプルや

一般的な方法がわかって良かったんじゃね

296 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 23:59:00 ]
まともなグラボならUP使ったほうが早いのは常識だろ
293とか294は典型的な2ch馬鹿だな

297 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 00:04:24 ]
>>293
一番あやしいのは、逆に遅くなってるAGPのやつですよね。

pDev->CreateVertexBuffer(
sizeof(D3DVERTEX) * 4 * MAX_SMOKE,
D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY ,
MYFVF,
D3DPOOL_DEFAULT,
&m_buffer,
NULL
);

pDev->CreateIndexBuffer(
sizeof(WORD) * 6 * MAX_SMOKE,
D3DUSAGE_WRITEONLY ,
D3DFMT_INDEX16,
D3DPOOL_DEFAULT,
&m_index,
NULL
);

で生成し、毎フレーム下記のようになっています。
>>294 IndexBufferは使ってますよ

m_buffer->Lock(0, sizeof(D3DVERTEX) * 4 * m_smokes.size(), (void**)&vertex, D3DLOCK_DISCARD);
m_buffer->Unlock();
pDev->SetStreamSource(0, m_buffer, 0, sizeof(D3DVERTEX));
pDev->SetIndices(m_index);

pDev->SetFVF(MYFVF);
pDev->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 4 * m_smokes.size(), 0, 2 * m_smokes.size());

298 名前:294 mailto:sage [2009/07/10(金) 00:04:34 ]
>>296
は?UP云々なんて一言も言ってないんだがw

299 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 00:05:10 ]
>>296
その根拠は?

>>292
動的バッファLock時のオプションは
どうしてる?



300 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 00:14:21 ]
>>297
む、こりゃちょっとひどい気がする
スレちゃんと読んでないけど、xyzは毎フレーム変化してるんだよな?
どのタイミングで更新してるんだい?






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<251KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef