トップページgamedev
1001コメント310KB

鬱だ氏のう DirectX (Part 6)

■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものでス02/10/07 01:00ID:???
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)

コピペスマソ
0370名前は開発中のものです。02/11/03 18:30ID:???
取りあえずウインドウモードで作成してるんですが、
ウインドウのサイズが変わったときにどんな処理をしたらいいのでしょうか?
そのままだと、元画像がただ引き伸ばされるだけなので。
サンプル見たんですが、どうもデバイスごと作り直しているような…
実際どうなんでしょうか?
0371名前は開発中のものです。02/11/03 18:36ID:???
引き伸ばされるように描画しているからそうなるだけ
0372名前は開発中のものです。02/11/03 18:40ID:???
>>369
最近のビデオカードでやってると仮定するよ。
ビットマップ一枚貼るだけなら、内部処理はほとんどがメモリコピー
になる。フィルレート値そのままの速度になるはず。

同じ640x480を塗りつぶすなら、メモリコピーにかかる時間はどういう
方法をとっても同じになるから、違いといえばGPUに送る頂点の個数の
違いでしかない。

ただし、DrawPrimitiveを20x15回呼んでるとするなら、それのオーバー
ヘッドのほうが大きいと思う。工夫してVertexBuffer/IndexBufferを
つかったほうがよい。

> 何と比べているかというと、
> 1. 32x32のテクスチャを20x15個貼り付ける速さ
> が、どうにかして、
> 2. 32x32のテクスチャを1個貼り付ける速さ
> にならないかということです。

書いたように、メモリコピーの時間より短くなることはありえない。
あとはいかにこれに近づけるかにかかってる。API呼び出し回数を抑えるとか、
テクスチャを一枚にまとめて切り替え回数を減らすとか、
そういう工夫が必要。
0373名前は開発中のものです。02/11/03 18:44ID:POPax65V
空きVRAMの取得関数ってあったっけ?
ウインドウリサイズでサーフェイス作成で失敗しない最大サイズって計算できる?
037436402/11/03 19:04ID:???
>>372
どうもありがとうございました。
それでこんなにも極端に遅くなるものなんですね。
いろいろ試してやってみます。
037537002/11/03 19:12ID:???
>>371
PROJECTIONとVIEWは一応更新してるんですが、それとは関係ないですよねぇ。
0376名前は開発中のものです。02/11/03 20:10ID:???
>365 :名前は開発中のものです。 :02/11/03 17:51 ID:???
> >>364
> >早い
> 塗る面積が同じなら、送る頂点の個数の差でしょうね。

嘘を付くんじゃない。
おまえ、自分で検証してみたか?
0377名前は開発中のものです。02/11/03 20:17ID:???
>372 :名前は開発中のものです。 :02/11/03 18:40 ID:???

> 同じ640x480を塗りつぶすなら、メモリコピーにかかる時間はどういう
> 方法をとっても同じになるから、違いといえばGPUに送る頂点の個数の
> 違いでしかない。
 
ソースデータ(テクスチャデータ)の大きさについては言及しないのか。
D3DTADDRESS_WRAPを使って32x32のテクスチャパターンを描いた場合には
どうなるのか、全く触れていないのは知らないからなのか。
0378名前は開発中のものです。02/11/03 20:27ID:???
小さなデータを連続して参照するケースではどういったメリットがあるのか
について説明を欠いているのは極めて不適切ではないのか。という指摘だぞ。
0379名前は開発中のものです。02/11/03 20:50ID:???
>>376-378
それって最終的にGPU依存の話になっちゃわない?

OpenGLスレで、テクスチャ画像を正面から見るのと90度回転させるのとでは
塗られるピクセル数も参照されるピクセル数も同じなのに速度が明らかに違った、
なんて話があったな。ビデオチップは確かRadeProだったかな。
0380376-37802/11/03 21:22ID:???
>>379
その通りだね。
まぁ、372が「最近のビデオカード」ちう前提で話してたので
ここの部分の説明を端折ったら364が気の毒だろと。そうおもた。
0381名前は開発中のものです。02/11/03 22:51ID:???
スプライトはフィルタをかけてくれないんdeathか??
0382名前は開発中のものです。02/11/03 22:59ID:l1yRCGs2
DX8SDK+VB.NETでDirectDrawを一通り勉強し終わった漏れにアドバイスをください。
1.このままD3Dの勉強→後バージョンのDXに移行
2.DirectDrawなんか無くなるから今すぐやめて新バージョンDX
3. etc...
0383名前は開発中のものです。02/11/03 23:03ID:???
D3Dの勉強だな。
DX9が出たら.NETから叩けるようになる。
知識はほぼそのまま引き継げるから安心して行け。
038438202/11/03 23:38ID:l1yRCGs2
>>383
THX 漏れがんばるよ。
0385名前は開発中のものです。02/11/03 23:51ID:???
なんか陰湿なカンジのスレになってきたな。


知識を示せ。共有しろ。育め。


以上、大統領からのお願いダス。
0386名前は開発中のものです。02/11/04 07:04ID:???
>>385
まずはお前からだ。さあ知識を示せ。
0387名前は開発中のものです。02/11/04 09:26ID:???
>>385
>なんか陰湿なカンジ
 
具体的にどれだ。後学のためにご教授願いたい。
0388名前は開発中のものです。02/11/04 09:46ID:???
いらんレスにいらんツッコミがはいりますた。
0389名前は開発中のものです。02/11/04 10:07ID:???
>>370
IDirect3DDevice8::Reset( )
つまりコイツで
ビデオメモリの内容をクリア&フレームバッファの設定を更新
 
デバイスの再作成に限りなく近い内部処理だがこれでヨロシコ。
DirectX7以前とは勝手が違うのかもな。(よく覚えていない)
0390名前は開発中のものです。02/11/04 10:11ID:???
>ビデオメモリの内容をクリア&フレームバッファの設定を更新
ゴメンこの説明は変。正解はヘルプを見て知って。
0391名前は開発中のものです。02/11/04 10:44ID:???
>>389
DX8で、リソースがdiscardされるかどうか、されたかどうかが明確に
なったとよね。DX7ではサーフェスはロストすることは分かったけど
頂点バッファは明示してなかったと思った。
0392名前は開発中のものです。02/11/04 13:47ID:zHhCma6Y
dx8.1b のSDKってインストールディレクトリ選べない?
ざけんなゴラァ
0393名前は開発中のものです。02/11/04 13:58ID:???
自分で好きな場所に置けば良いだけだろ
知能低すぎ
0394名前は開発中のものです。02/11/04 14:27ID:zHhCma6Y
>>393
はぁ、ただDisk上に置いてあるだけだと思ってんの?
レジストリにディレクトリ情報、数十箇所書いてあって買い換えなんて面倒なんだよ

なんか未インストールの項目実行すると、勝手にインストーラーが立ち上がる仕様になってるのね
サンプルのショートカットって*.exeに直接リンクされてないし
ディレクトリ選べなかったのは、win上書きインストールの汚れ環境のせいみたい



0395名前は開発中のものです。02/11/04 14:45ID:???
ランタイムを除けばSDK部分は置いてあるだけだが、
サンプルがスタートメニューのショートカットが入るだけがそんなに重要なのか?
知能低すぎ
0396名前は開発中のものです。02/11/04 14:59ID:???
使用するデーターって一箇所にまとめてあって、それをレジストリに書いてあるじゃん
ディレクトリ移動すると、サンプル実行できませんが何か?

キミは全部の実行ファイルと同じディレクトリにデーターコピーして実行するのか?
0397名前は開発中のものです。02/11/04 15:27ID:???
それで実用上何の問題が?
知能低すぎ
0398名前は開発中のものです。02/11/04 15:32ID:???
哀れなやつがいるな…
039937002/11/04 15:35ID:???
>>389-391
遅くなりましたが、レスどうもです。
やっぱりウインドウサイズ変更だけでも、
デバイス再作成に近いことはやらなきゃいけないんですねぇ。
デバイスに関連するものも作り直しとなると結構面倒・・・。
0400名前は開発中のものです。02/11/04 15:38ID:???
2chでこんなどうでもいい話してる暇があるなら
レジストリ書き換えてればいいのに。
0401名前は開発中のものです。02/11/04 15:39ID:???
>>399
作り直さなくても、あらかじめ大きめのサイズのデバイスを
作っておけば良いだけだと思うが
0402名前は開発中のものです。02/11/04 15:39ID:???
>ディレクトリ選べなかったのは、win上書きインストールの汚れ環境のせいみたい
自分の環境の悪さを棚に上げて批判するなんて愚の骨頂だね
0403名前は開発中のものです。02/11/04 15:58ID:???
はぁ。おまえら暇だなぁ。
ストレス溜めた状態で2ch見るのは止そうぜ。な。
040437002/11/04 16:14ID:???
>>401
それって常に大きめのサイズでレンダリングしてしまうわけですよねー。
ウインドウが小さい時はそのサイズにあった速度にしたいし、うーむ。
0405名前は開発中のものです。02/11/04 16:37ID:???
>>404
SetViewportとPresentで調整すれば良いだけ
040637002/11/04 17:02ID:???
>>405
当分はその方向で逝こうと思います。
でもディスプレイモードが変更された時ならまだしも
CTRL+ALT+DELELE押された時もデバイスが死んじゃうんじゃ、
どっちにしろデバイス作り直す処理は必要かな。
OpenGL見たいに勝手にやってくれると有難いんだが、
DirectX9もここらへんは変わらないのかなぁ。
0407名前は開発中のものです。02/11/04 17:04ID:???
8なら作り直す必要は無いが?
0408名前は開発中のものです。02/11/04 18:03ID:???
>>407
ほら、もうちょっと言葉を足して書こうぜ。
誤解されて変なツッコミが入っちゃうぞ。
0409名前は開発中のものです。02/11/04 18:03ID:???
関係ないけど、DX9SDKではスタートメニューにサンプルが登録されねぇぞ。
0410名前は開発中のものです。02/11/04 21:02ID:???
>>370
 サンプルプログラムの、d3dapp.cppの中にある、メッセージプロシージャは見た?
その中にあるサイズ変更関連のメッセージ(特にWM_SIZING)あたりを読むことを
オススメする。
 デバイスの作り直しは、よほど特殊な要求(HAL→REFの切り替えとか)が無い限り
必要ないと思う。ヘルプのResetメソッドについても読もう。
0411DirectX9!!02/11/04 21:07ID:???
DirectX9!!
0412名前は開発中のものです。02/11/04 21:12ID:???
↑デマ
041341002/11/04 21:52ID:???
すまん。WM_SIZINGじゃなく、WM_EXITSIZEMOVEね
041437002/11/05 00:00ID:???
>>407,>>410
デバイスそのものを作り直さないまでも、
RenderState、VertexBuffer、テクスチャ、メッシュ全て設定し直さなきゃいけないなら、
デバイス作り直すのとほとんど変わらないなぁというお話でして。
041538902/11/05 00:29ID:???
>>414
>RenderState、VertexBuffer、テクスチャ、メッシュ全て設定し直さなきゃいけないなら
んなこたないよーヘルプ嫁ヘルプ。D3DPOOL要参照。
041637002/11/05 01:15ID:???
>>415
RenderState以外はMANAGEDにしておけば手間が省けるってことですね。
メッシュは物によって調べる必要があるみたいですが。

話はそれますがヘルプに
CreateVertexBufferのUsageに"次の 1 つ以上のフラグの組み合わせ"
って書いてあるのにサンプル見ると0指定してあるんだけど
どういう意味でしゅおうか??
0417名前は開発中のものです。02/11/05 01:22ID:???
どれかのフラグの値が0とか?
041838902/11/05 01:32ID:???
>>416
漏れも分かんない。
その部分は真似せんほうがええと思うよ。
>>417
んなこたーない
041937002/11/05 01:34ID:???
>>417
どれも0でないみたいです。
"0以上"の間違いだろうと思い込んで寝ます。
042038902/11/05 01:36ID:???
>漏れも分かんない。
>その部分は真似せんほうがええと思うよ。
嘘ですゴメン。
042137002/11/05 01:38ID:???
>>418,420
D3DUSAGE_DYNAMICに
"D3DUSAGE_DYNAMIC を指定しないと、頂点バッファは静的に作成される。"
って書いてあるんでこれが0なのかなと都合のいい解釈をしつつ寝ます。
042238902/11/05 01:44ID:???
>次の 1 つ以上のフラグの組み合わせ。
↑これ日本語ヘルプの誤訳。
「これらのフラグは組み合わせて使えるよ」というのが正解。
何も指定しなければ静的に確保される。
俺の知ってる範囲では、ハードウェアT&Lを搭載してるカードでは
ビデオメモリ上に確保される。ロック&書き込みが重いので静的な
データ以外には使わないほうがええ。 
0423名前は開発中のものです。02/11/05 05:14ID:???
>>422
原文は「A combination of one or more of the following flags」だから、
「次の 1 つ以上のフラグの組み合わせ」という翻訳は間違いではない。
日本語ヘルプに誤訳が非常に多いのは紛れもない事実だけど、
原文の説明自体が不適切・不十分であることも少なくないのだよ。
042441002/11/05 08:07ID:???
>>370
>メッシュはものによって調べる必要があるみたいですが
 既にヘルプを呼んでいるかもしれんが、メッシュを作る時にオプションに
D3DXMESH_MANAGEDを設定すればいいだけ。
>>415
 フォロー、サンクス。っていうか肝心なことを書き忘れてたんだな、俺(笑)。
042538902/11/05 10:10ID:???
>>423
>「次の 1 つ以上のフラグの組み合わせ」という翻訳は間違いではない。
そうだね。漏れ寝ぼけ過ぎ。
0426名前は開発中のものです。02/11/05 20:23ID:???
うちのグラカだと、どう調べても、スプライトで書くよりポリゴン作って
テクスチャはった方が描画が速いんだけど、そういうグラカって結構あるもんですか?

他のマシンがないので調べられません。
0427名前は開発中のものです。02/11/06 01:21ID:NGPM1Ygr
DirectInputで、なぜかZキーを押しながら、左と下を押すと、左か下の片方しか
キー入力が取れません。
自分のプログラムが悪いのかと思ったのですが、そこらへんに転がってる
DirectX8を使用したプログラム5個ほどでも同様の現象がありました。

これって、自分の環境が駄目なんですか?
それとも、Microsoftのバグ?
0428名前は開発中のものです。02/11/06 01:27ID:???
>>427
ハードウェアの仕様
0429名前は開発中のものです。02/11/06 05:59ID:???
洋ゲーが同時押しを必須としない設計をしてたりする理由だね。
CTRLやALTキーをデフォルトにするのも、
ほかのキーよりはこれの確率が低いから。
0430名前は開発中のものです。02/11/06 06:08ID:???
>>426
D3DXSpriteは内部でポリゴンにテクスチャ張って描画してます。
使うメリットがないなら、自前のスプライト描画クラスとか
作ったほうが良いものができるかもしれない。
0431名前は開発中のものです。02/11/06 09:03ID:???
>>427
キーボードが悪い。安物はそうなる。
USBキーボードはなりにくいのでお勧め。
0432名前は開発中のものです。02/11/06 10:11ID:???
安物云々は関係ない、知ったかするな
PS2の伝達経路の数が足りず、安物だろうが高級品だろうが、
バッティングする位置が変わるだけ
インタフェイスの問題
USBはなりにくいのではなくならない
0433名前は開発中のものです。02/11/06 11:24ID:???
>>432 Nキーロールオーバーって知ってる?
0434名前は開発中のものです。02/11/06 11:53ID:F7G6Kvvh
>>432
キーボードのようなキー数の多いデバイスはキーマトリクスを
作ってスキャンしている(大昔から変わらない)ので、
なんともトンチンカンだよ。
0435名前は開発中のものです。02/11/06 12:07ID:???
>>432
うちのUSBキーボードは同時押しできない組み合わせがある。
うちのはクソということでよいか?
0436名前は開発中のものです。02/11/06 12:44ID:???
432こそ知ったか野郎でFA?

ところで427ってノートPCでも使ってる?
そこまで同時押しできないキーボードは、俺が今まで使ってきたマシン
ではThinkPadしかなかったけど。
0437名前は開発中のものです。02/11/06 14:24ID:???
結論としてはキーボードのせい。
ひっそりと大人気のこのキーボードも何個同時押ししても受け付けるYO!

東プレ Realforce 106 キーボード Part1
http://pc3.2ch.net/test/read.cgi/hard/1033925111/

いや、買っちゃったもんで嬉しくて。
0438名前は開発中のものです。02/11/06 14:40ID:???
           ドッカン
         ,、、  ドッカン
  ━━━━━) )=          ☆ゴガギーン
      ∧_∧ | |          /         / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
     (   )| |_____     ∧_∧   <  おらっ!>>432出てこいゴルァ!
     r ⌒ ̄ ノ  __.  |    (´Д` )    \
     |   イ   |__|   |    /     \       ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
     |    | |          .|    | |   /\\
     |    | |          .|  へ//|  |   | |
     |    | |       (\/,へ \|  |  | |
     | ∧ | |      ◎\/  \  / ( )
      | | | |.|          .|     | |
      / / / / |          .|     | |
    / / / /.| |三三三| |      |. |
    / / / /...|       |    ||


0439名前は開発中のものです。02/11/06 14:52ID:???
俺のノートPCはCtrlとCapsを入れ替えた時に、Ctrl+Shift+Zが押せずRedoできなくて泣けるんだよ、ボケが
0440名前は開発中のものです。02/11/06 15:05ID:???
問題はそこじゃなくて、ユーザがそれ買わなきゃ意味ないとこだろ( ´∀`)
0441DirectX9!!02/11/06 16:40ID:???
DirectX9!!
0442名前は開発中のものです。02/11/06 18:17ID:HmH3fN4E
http://www.theinquirer.net/?article=5168
ハヨコイ
0443名前は開発中のものです。02/11/06 20:06ID:???
DirectPlay“8.2”だってさ。
http://www.microsoft.com/downloads/release.asp?ReleaseID=43347&area=search&ordinal=4
正式版のリリースは年明けとの電波をキャッチ。
0444名前は開発中のものです。02/11/06 20:07ID:???
(DirectX9のね)
0445名前は開発中のものです。02/11/06 20:14ID:F7G6Kvvh
でもそのページにはそんなことないよね?
0446名前は開発中のものです。02/11/06 20:28ID:???
98のキーボードはよかった…
0447名前は開発中のものです。02/11/07 00:51ID:???
>>436
427ですが、ノートVAIO使っております。
家で使うときはUSB使おうかなぁ。
ということで、プログラム自体は変更することないんだね。ありがとう。
0448名前は開発中のものです。02/11/07 10:15ID:???
>>447
変更する点があるとするならば、キーコンフィグをつける点。
0449名前は開発中のものです。02/11/07 17:05ID:2yv67rKD
LPDIRECT3DDEVICE8 dev;

↑このdevを別のファイルで扱おうと思ったらどうすればいい?
別のファイルで

LPDIRECT3DDVICE8 dev2;
dev2=dev;

てやったら2重定義でゴラされた。
0450名前は開発中のものです。02/11/07 17:11ID:???
>449
Cの勉強をしなおせ
0451名前は開発中のものです。02/11/07 17:12ID:???
extern LPDIRECT3DDEVICE8 dev;
045244902/11/07 17:35ID:2yv67rKD
俺、Cは6年やってるけどな。そうかexternだな!ありがとう。
もう一つ、聞きたいのだがいいかい?

LPDIRECT3D8 d3d=NULL,d3d2=NULL;

2個用意してd3dの方でDirect3dCreate8をする。
その後、

d3d2=d3d;

とする。こうしたら以後の処理はd3dでもd3d2でもどちらを使っても
良いのかだよな?中身をコピーする、すなわちIDirect3Dインタフェースへの
ポインタがd3d2へコピーされるんだからなw
その後、オブジェクトを開放する時はどちらか一方だけリリースを呼び出せばいいんだよな?
ん?
045344902/11/07 17:40ID:2yv67rKD
>>452
よいのかだよな? ×
よいのだな?   ○

鬱だ・・・逝こう
0454まっつん02/11/07 17:48ID:???
うぜ・・・
0455名前は開発中のものです。02/11/07 17:51ID:???
449みたいなのと組まされたくは無い罠
0456名前は開発中のものです。02/11/07 17:51ID:???
>>452
はいはい、正解、あってるからさっさと仕事に戻れよ!
休憩時間はおわったんだからさ・・・・・・・・
0457名前は開発中のものです。02/11/07 17:52ID:???
>449
ム版に逝けよ。DirectX以前の問題だ。
0458名前は開発中のものです。02/11/07 17:54ID:???
どうやったら、そんなソースの書き方になるんだか不思議だ
045944902/11/07 17:54ID:2yv67rKD
うるせー馬鹿!
0460名前は開発中のものです。02/11/07 17:58ID:???
それが人にものをお願いする態度?
人生おしまいだね
0461名前は開発中のものです。02/11/07 19:17ID:???
今朝、最後のβっぽいのが出たよ>DX9
次はRelease Candidateみたい。
うまく行けば年内に来るかな?
0462名前は開発中のものです。02/11/07 20:59ID:???
449やべーよ。6年とは信じられん
d3d2=d3dはまあいいとして、どちらか一方だけReleaseとか頭いたい。

d3d2->AddRef();
d3d2->Release();
だろう
0463名前は開発中のものです。02/11/07 21:08ID:???
AddRef?
0464名前は開発中のものです。02/11/07 21:26ID:???
ときどき dialect を堂々と使う田舎者と中学生の合いの子のようなあんぽんたんがいるよね。
0465名前は開発中のものです。02/11/07 21:59ID:???
>>462
年数なんてかんけーねーよ。
馬鹿はいつまでたっても馬鹿だ。
0466名前は開発中のものです。02/11/07 22:07ID:???
むしろ年季の入った馬鹿の方が
矯正が利かない分タチが悪い。
0467名前は開発中のものです。02/11/07 23:07ID:???
インターフェイスを2つ用意する意味が全然わかんないんですが…

0468名前は開発中のものです。02/11/07 23:13ID:oHLaAcmh
教えてください。
四角形ポリゴンで描画した後に、スプライトで画像を表示させようとしても、
表示できません。

ポリゴンの後ろにスプライトが隠れているようなのですが、これをどうやったら
前に出せますか?

座標変換は行っていません。
0469名前は開発中のものです。02/11/07 23:38ID:???
>>468
スプライトのZ位置を前にすれ
■ このスレッドは過去ログ倉庫に格納されています