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

鬱だ氏のう DirectX (Part 3)

■ このスレッドは過去ログ倉庫に格納されています
0001 ◆WMpzjIm. 01/11/07 16:56ID:???
DirectXについてマターリと技術情報交換&雑談するためのスレッド。
初心者用相談室では扱わないような少し高度な話題も受け持つ。

■旧スレ(プログラム板)
http://piza.2ch.net/tech/kako/966/966655286.html  (Part 1)
http://pc.2ch.net/test/read.cgi/tech/997101556/   (Part 2)
006001/11/26 08:46ID:???
>>58
ありがとうございます。
調べてみます。
006101/11/26 08:48ID:???
>>59
それです。関数で使おうとして。
ポインタの勉強し直します・・・
00625301/11/26 09:59ID:hxuvWaP4
>>54
なるほど…、つまり
・頂点キャッシュ自体がDirectXではっきりと定められたナニがあるわけではない。
・DirectX自体のOptimizedMeshも厳密ではない。(確かにincrease the cache hit rate…
と書いてあって optimized ...とは書いてない。)
ということですか?
ビデオアダプタ毎に頂点キャッシュを考慮したインデックスのストリップを生成する、
という野望はここに潰えました。(w 多謝。
0063名前は開発中のものです。01/11/27 14:14ID:1vtcUAvO
Xfileで読みこんだ複数キャラの管理ってどうやるもんなんですか?
メッシュやらなんやらのオブジェクト(構造体?)を複数作って、
そのアドレスを格納する配列変数を用意しようと
思ってるんですけど、どうなんでしょう・・・。
00646301/11/28 19:28ID:???
できました・・・。何回かモデルがぐにゃぐにゃっとしたんで
Windows氏に大ダメージを与えてるかも・・・。
0065名前は開発中のものです。01/11/29 17:43ID:???
>>22-23
パッチ当てればインストールできるけどね
0066名前は開発中のものです。01/12/01 19:23ID:VdJIOFPJ
スレageエージェント
その名もAGEnt(アーゲント)
0067名前は開発中のものです。01/12/01 19:25ID:???
>>66
人型エージェント兵器?!
なんてこった・・・


というより元気0ですね。このスレ。
0068名前は開発中のものです。01/12/02 06:35ID:iC96WwYm
というわけで、こちらをあげます
0069名前は開発中のものです。01/12/02 19:37ID:???
やっとキャラが動いたよ。でももうイヤだ。
0070名前は開発中のものです。01/12/03 14:33ID:???
さて・・・
DirectXの勉強勉強・・・
0071名前は開発中のものです。01/12/04 01:48ID:???
エラーでまくると鬱で氏にたくなります・・・
まぁ一つずつなおしていくのも快感なんだけど
0072初心者(A)01/12/04 17:42ID:RhHCipx6
ここは初心者の状況報告スレ??
・・だとうれしいな。
とりあえず、マップオブジェクトの当たり判定設定法で
詰まってます。どうしょっかなぁ。詰まってるけど楽しい。。。
0073名前は開発中のものです。01/12/04 18:00ID:dLjsBJIC
8.1SDKインストールできない・・・
1608: Unable to create InstallDriver instance
って出てインストールシールド終わっちゃいます。
Win2000ですが。8.0aは入るのに・・・鬱だ
0074名前は開発中のものです。 01/12/04 18:59ID:???
ここって「初心者はここで聞け!」スレ無いの?
まあ、この程度の利用者数なら分離しなくていいだろうけど。
0075名前は開発中のものです。01/12/05 04:47ID:s6xIWrxU
>>61
C++でやってるでしょ?
ならダブルポインター(**)で関数に渡さず、参照(&)で渡しなさい。悩まなくてすむから。
DirectXの関数がダブルポインターを使ってるのは、Cでも使えるように、という配慮。
C++使ってるならそんなところを真似ることはないよ。
007675追記01/12/05 04:50ID:???
こんな感じ
Create(LPDIRECT3DDEVICE8 **pd8) {

Create(LPDIRECT3DDEVICE8* &pd8) {
0077名前は開発中のものです。01/12/06 00:11ID:lsy8aQar
元気ないなぁ、DirectXとは別の次元で苦労してるから
DirectXで苦労し始めたらお世話になります。
0078名前は開発中のものです。01/12/06 00:30ID:???
うむ。吾輩もWinXP環境構築中で動けん。
8.1が最初から入っておるのかこれは。
0079名前は開発中のものです。01/12/08 11:50ID:8/HBzjJB
Direct Drawの質問をしたいのですが、このスレで質問させてもらってもいいんでしょうか?
0080名前は開発中のものです。01/12/08 14:54ID:???
>>79
いいと思うよ。おれはあんまりわかんないけれどね
0081名前は開発中のものです。01/12/08 21:45ID:???
Direct Drawの質問をしてもいいのかという質問をしたいのですが、
このスレで質問させてもらってもいいんでしょうか?
0082名前は開発中のものです。01/12/09 23:30ID:3yOdEVMh
DX8で、ようやく弾やら建物やら敵が出てくるようになったのですが
2000ポリゴンで60fps〔50台〕切ります。これは不味いんでしょうか?
平行光源を使っただけのかなり単純な表示で、です・・・
どれくらいがゲームとして普通か教えて下さい。
0083aa01/12/09 23:40ID:9FnPiTzc
>>82
俺も知りたい。最適化の方法、、誰か挙げて。
自分で思う所は、

DrawPrimによるGPU待ちとLockによるCPU処理の平均化。
Prim種類の分類等、バッチ処理
テクスチャ切り替えを頻繁にやらない。
’’サイズ大き過ぎないようにする。

ぐらいか、、。
0084名無しサソ01/12/09 23:43ID:???
>82
 表示の方法によると思う。Xファイルを読み込んで表示して
いることを前提にすると、D3DXMESHをサンプルのやり方の
まま使うと、オブジェクトの階層が深いとポリゴン数の割に
どんどんFPSが落ちていくよ。

 当方もサンプルで6000ポリゴン程度の物を出しただけで
40fpsとかになったし。ちなみに、PentiumIII728MHz、G400・32MB。
OptimizedMeshサンプルを走らせると、最高で3MPolygon/sec弱出る。
速度に関する質問をするなら、自身の環境を書いて置いた方が
良いと思うよ。
00858201/12/10 00:15ID:???
>>84
すいません・・。環境はこんなかんじです。

CPU:PentiumV 700Mhz
ビデオカード:NVIDIA GeForce2 MX/MX400 VRAM 64MB
メモリ:180MB

呼び出しが重なると遅くなる、ってことでいいでしょうか?
出来るだけ浅くしてみます。ありがとうございました。
0086名無しサソ01/12/10 13:13ID:???
>85
 プログラムで最適化するのが面倒な場合は、そもそも
階層の深いモデルを使わない、という手もある・・・かもしれない。
手抜きです。ゴメソ。
00878201/12/10 14:27ID:7ZQwqnD1
>>86
そうですか・・
なんかLOCKをして頂点データを読むと、
ちゃんとUNLOCKしたのに(メインループの前の前処理内で)
またfpsが20ほど下がっちゃいました・・・。
これも階層に関係してるのでしょうか?
0088名前は開発中のものです。01/12/10 14:31ID:???
>>87
SDKのヘルプとかMSのFAQとかちゃんと読んだ?
0089名無しサソ01/12/10 16:47ID:???
>87
 ここのD3Dスレでも同じ話題が出てたんだけど・・・Unlockしても
スピードが下がるという表現が意味不明。Unlockしたからといって
スピードが保てるわけでも無し。というか付けないとエラーが起こる。
0090名前は開発中のものです。01/12/10 18:04ID:???
時々Unlockしてなかったりする87タン萌え。
0091_01/12/11 01:23ID:ZXve+/Jb
誰か、indexバッファの使い方、教えて。
ドキュメント読んでも、よく解らない(引数の説明等が)
DrawIndexedPrimitiveなんか特に。
なんとなくは、判るというか、動いてるけど、気持ち悪いので。
お願いしまっす。
0092名前は開発中のものです。01/12/11 01:26ID:???
>>91
何がわからないのかわからないんだが(w
とりあえず、インデックスは頂点の番号を指しているのはOK?
0093_01/12/11 03:04ID:ZXve+/Jb
>>92
>インデックスは頂点の番号を指しているのはOK?
と言う事は、頂点バッファと1対1で対応(要素数が同じ)て事ですか?
番号は、Uint16頂点以下が、D3DFMT_INDEX16、以上が、32って事ですよね?多分。

で、
lpD3DDEV->SetIndices( pIB, 0 );
でストリーム番号を指定(合ってます?)

で、
DrawIndexedPrimitiveの2、4番目の引数が良くわかりません。
DrawPrimを複数に分けてコールする際のindexだと思うんですが、
1つのプリミティブで4頂点使ってたら、
(頂点数*FVFタイプ)のバイト数指定、、て事ですか?
0094_01/12/11 03:09ID:ZXve+/Jb
後、もう1つだけ、、(すんません)

ストリームを複数作って、片方は静的なバッファ、頂点座標(D3DFVF_XYZ)、
もう1つは、動的なバッファ(D3DUSAGE_DYNAMIC)、
同じく(D3DFVF_XYZ)こちらはポジション用、、とすると、
これらはラスタ化の時に、自動的に合成(加算?)されるのでしょうか?
0095名前は開発中のものです。01/12/11 04:22ID:???
>>93
2番目は頂点バッファの何番目の頂点から使うか。指定した頂点がIntexの0番になる。
これは主に1つの頂点バッファに複数のモデルデータを入れておくときに使う。
頂点バッファはオーバーヘッドがかなりあるから(2048バイトだっけ?)、小さい
バッファを沢山作るのは無駄が多いので、頂点フォーマットごとにまとめるようにする。

4番目はIndexの範囲指定だけど、Indexの一部を描画するってことはあまりないから
0入れとけば良し。

>>94
言ってる事が意味不明。ポジション用って何?
0096名前は開発中のものです。01/12/11 23:07ID:???
>>82
GeForceのドライバーを換えてみたら?
http://www.nvidia.com/view.asp?PAGE=drivers
うちは似たようなマシン構成で1フレで3万ポリは固い。
もちろんストリップぐらいやってるが。
0097名前は開発中のものです。01/12/12 00:15ID:???
円とバウンディングボックスの当たり判定ができました。
もうイヤだ!!
0098名前は開発中のものです。01/12/12 00:53ID:???
それぐらいで嫌がってたらプログラマーは出来んぜ。
仕事でやってると将来が無さそうなのでイヤだが。
0099_01/12/12 01:21ID:u1VHByE9
>>95
サンクスです。大体w理解出来ました。4番目の引数使うと、どのような
効果があるんでしょうね。取り敢えず、0いれときます。

>言ってる事が意味不明。
すんません。聞かなかった事にして下さい。w
0100_01/12/12 03:04ID:u1VHByE9
取り敢えず、1秒300万個ぐらい、スプライトが表示出来るようになりました。
GF3でw
MESHのサンプルでは、1秒に1500万triぐらい出てるけど。w(vキャッシュなしで)
でも、1スプライト2triだし、tri-listだし(strip無理ですよね?)、
毎ループ、全頂点Lockしてるし、こんなもんかな?
多分、ほんとはもっといくとは思う、、。
0101名前は開発中のものです。01/12/12 06:44ID:???
>>100
やっぱりXファイルは一つにまとめてインデックス読み
するのが基本ですか?
0102_01/12/12 08:48ID:u1VHByE9
>>101
今回は、担当じゃないから、あれだけど、1つのSTRIPでやるのが、
良いみたいよ。重複する頂点があっても、その方がいいとか、、。
でも、複数のTEXTURE貼ってたりすると、難しいかも。

Meshのサンプル見たら、Vキャッシュにヒットした場合、一機に+500万
いってたんで(1秒2200万ぐらい)どうなんだ?て感じだが。
暇があったら調べてみるよ。
0103名前は開発中のものです。01/12/12 19:44ID:???
>>102
解答ありがとうございます。
2200万て僕には考えられませんけども(汗
ゲーム速くするため、色々やってみます。
0104名前は開発中のものです。01/12/13 16:52ID:7ycqn6lq
ShadeでXファイルをつくりたいのですが
何かいいお知恵を拝借できないでしょうか?

shdからshadeでDXFにしてから、Xへ変換したのですが
どうしてもD3Dビューで表示されません・・

ShadeでMesh作ってる方、お願いします
0105名前は開発中のものです。01/12/13 18:32ID:???
>>104
Shadeで作るな、と言われそうだね。

Shadeはポリ数が多くなってリアルタイムレンダリングには向かないんじゃないかなあ。
DXFを介している時点でアニメ情報やUV情報なんか消えていそうだし。
とりあえず、単純なモデルをテキストXに変換させてみて、
データを読んで何がおかしいか調べてみるといいかもよ。
メッシュが裏返ってたり、スケールがものすごく違ってたりするのかも。
0106名前は開発中のものです。01/12/13 21:51ID:d41h5h24
>>105さん
ありがとうございます。
やはり鬼門ですか・・・・

難しいなぁ・・・ ナムナム
0107名前は開発中のものです。01/12/14 13:20ID:EZLqVsis
Shade脱落です・・・

lightwave3Dに乗り換えます・・
0108名無しサソ01/12/15 01:24ID:???
 参考までに。DXFの3DFACEフォーマットは、多角形の
各xyz座標をダラダラと羅列しているだけの素敵な仕様だよ。
当然、UV座標や法線を持ち合わせているわけではないので、
独立頂点で分けて作った筈のエッジも潰れてしまう。

 というわけで、DXFから直接Xファイルを作るのは出来るだけ
避けた方が良いと思う。
0109名前は開発中のものです。01/12/16 05:25ID:8r+MK5UR
Cの基礎本レベルが終わった程度のプログラミング能力の奴がDirectX
を使おうとしたら、どういうのがいいですか?

 1、諦めろ。
 2、むしろゲーム作成支援ソフトを使う。
 3、頑張ってEasyLinkLibraly を導入して間接的に。
 4、DXだけ学び、DXだけでゲームを作る (…できるの?)
 5、DX、WinAPI、VC++、その他一式を全て究めて攻略。

 とりあえず5はやだ。
0110名前は開発中のものです。01/12/16 05:29ID:???
>>109
6.SDKのサンプル弄ってみる。
0111名前は開発中のものです。01/12/16 06:10ID:/+Yh7d/w
>109
110が正解っぽいな。 まあどもみち、5を選ばざるえないんだろうが
最初から気張って、つまづいた拍子にやる気をなくすより
サンプルでも弄ってなさいってこった。
0112名前は開発中のものです。 01/12/16 10:51ID:???
 WinAPIを極める必要はあんまり無いと思うけど。あんなの
そのつど調べて覚えていけばいいんだし。
 やっぱC++でプログラム書きまくって慣れておくことだろ。
0113NAME OVER01/12/16 17:56ID:???
directx8でx、y座標(zは無視)を指定して画面に
ポリゴン&スプライト表示することはできますか?
0114名前は開発中のものです。01/12/16 19:03ID:???
>>113
できる
0115>>10901/12/16 19:25ID:Ar8VngeJ
俺の場合、Cは一通り書ける状態で、
VC、C++、D3D8、をやってた。
2週間もあれば、読み書きぐらいは出来ると思うよ。
どういう設計が1番か?てのは、わからないけど。
0116名前は開発中のものです。01/12/16 22:30ID:???
>>109
絶対イジッタほうがいい。
DX7の頃は使い始めが異様に難しかったけど、
8からは初期化も簡単、すぐに画面に表示できるような
作りになってる。画面になんか出ればイジリがいもあるでしょ。
0117名前は開発中のものです。01/12/16 22:46ID:CihImbig
>>109
とりあえず4、6の組み合わせで十分ではござらぬか。
追々必要なら5にも手を出すと。
0118名前は開発中のものです。01/12/16 23:25ID:iGqGEygK
ここで聞いてしまっていいのかちょっとわからないのですが、
皆さんSSEって何経由で使ってますか?
やっぱしVC++のProcessor Pack?
しかし、これなんか問題が多いと聞いたのですが、、、
0119名前は開発中のものです。01/12/16 23:39ID:???
SSE使うときはnasmw使ってる。
0120あぼーんNGNG
あぼーん
0121名前は開発中のものです。01/12/17 11:15ID:???
>>109
初心者ですが、サンプルとか参考にしながら
動く状態のものをちまちま改良していってます。
一度に色々やろうとすると行き詰まるっぽいです。
あとEasyLinkLibralyは解析しづらいのでイヤンです。
0122名前は開発中のものです。01/12/17 21:29ID:???
プライマリサーフェスより大きいオフスクリーンサーフェスは
作れないっていう制限ってver7でもありましたっけ?
0123名前は開発中のものです。01/12/17 21:43ID:???
>>122
それはビデオカードの制限によるものでは?
0124名前は開発中のものです。01/12/17 22:28ID:???
あそうなんですか。
じゃあなるべく使わない方が良いな・・。
レスどうもです。
0125名前は開発中のものです。01/12/18 00:02ID:???
caps見れば作れるか作れないか分かるよ。
まぁ、作れる場合でも無制限ではないし、解像度によって上限が変わったり
するんだが。
320*240の解像度で横幅が1024のサーフェス作ろうとしたらエラー出たり。
800*600では大丈夫だった。ちなみにGeForceでの話。
0126 01/12/18 00:45ID:???
directx8にはカラーキーがないみたいだけど、それにかわるものって何か在る?
0127名前は開発中のものです。01/12/18 00:56ID:???
>>126
αブレンド
0128_01/12/18 03:22ID:KNjSRTW5
ちゅーか、αチャンネルの方が融通利くね。
0129名前は開発中のものです。01/12/18 12:26ID:???
>>124
システムメモリーを使えば、どうにかならんか?
0130名前は開発中のものです。01/12/23 02:51ID:???
7以来DirectX勉強してないんだが
なんか初期化やら色々な作業がスゲー簡単になったらしい?
0131名前は開発中のものです。01/12/23 09:32ID:???
7のD3DXの方が初期化は簡単。ステンシルバッファ使えないけど。
あと、8はサーフェスがロストしても勝手に内容を復元してくれる機能あるけど、
7のD3DXも同じようなことしてくれたのであまり変わってないかも。
というわけで、7でD3DX使ってたんならあまり便利には感じないかと。
むしろ細かい制御ができなくなったから不便に感じるかも。GDIも使えないし。
GDIに関しては9で少し改善されるようだけど、どうなることやら。
0132名前は開発中のものです。01/12/23 14:00ID:5HaRG1wG
コマンドラインアプリケーション上で、DirectSound で音を出せた人っていますか?
実際にやったところ、ウィンドウハンドルが存在しない為に、強調レベル設定
(SetCooperativeLevel)が使えず、その後のプライマリバッファの作成でも失敗します。
0133名前は開発中のものです。01/12/23 17:11ID:bm9n9GFO
>>132

DOS窓のWindowハンドルとるんぢゃダメ?
013413201/12/23 17:17ID:5HaRG1wG
>>133
それでいいの!? ちょっと調べてみます。
0135名前は開発中のものです。01/12/23 17:28ID:OXvxcNRi
>>132
非表示のWindowつくるとかでもいけるんじゃないかな?
013613201/12/23 18:31ID:5HaRG1wG
>>135
そういうのもありかー。
でもWindow作るときにWinMainの第1引数を使って
RegisterClass で登録しなくちゃいけないような。。。
RegisterClass 呼ばずにいきなり CreateWindow 呼んでもいいのかなぁ。。
これも調べて見ます。
0137名前は開発中のものです。01/12/23 19:03ID:bm9n9GFO
>>136

HINSTANCEでしょ?
GetModuleHandle(NULL);で取れないかねぇ?
DOSアプリだとダメかな?
0138名前は開発中のものです。01/12/23 19:05ID:OXvxcNRi
GetModuleHandle(NULL)
を代わりに使うんじゃなかったっけ?
おぼろげな記憶。
0139名前は開発中のものです。01/12/23 19:06ID:OXvxcNRi
かぶった。すまむ
014013201/12/23 19:28ID:5HaRG1wG
おぉ、助かります。。
014113201/12/23 19:39ID:5HaRG1wG
ただ今、コマンドアプリでもウィンドウアプリと同じ値を、
GetModuleHandle(NULL) で取得出来る事を確認しました!
0142名前は開発中のものです。01/12/23 20:07ID:N4+GBleN
久しぶりにDirect3D使ってみようと思い
8.1SDKを落としてきた
初期化がさくっと終わってるのに感動した!
でも新しい言葉がいっぱい出てきて正直困惑
0143名前は開発中のものです01/12/24 03:46ID:w3zASyI1
つかみんな8.1使うの?
95捨ててるから今迄のVerUPとは同じに考えられないよな。
マジどうすんのか聞きたい。
0144名前は開発中のものです01/12/24 04:34ID:???
全然普通に使ってますが?
むしろ95ユーザの為にステンシル他を使わない方が馬鹿げているような。
それともオレ、異端か?
0145名前は開発中のものです。01/12/24 05:43ID:???
いまどき95を使ってるような奴が良い顧客かどうか考えてみよう。
0146名前は開発中のものです。01/12/24 10:48ID:???
>>145
エロゲとかは95もターゲットにすることはあるかもね。
昔は(DirectX3くらいのころ)オールGDIで作ってあったのもあったしなぁ。
0147名前は開発中のものです。01/12/24 10:59ID:???
正直、DirextX8.1が必要なゲームを遊ぶような人間のどれだけが
いまだにWin95を使っているのか統計を取ってみたい。
ていうかいるのか?
0148名前は開発中のものです。01/12/24 11:35ID:???
>>147
 まあ、そうだろうな。
 俺もボロマシンに95入れて使ってるけど、最新のゲームやら
ビデオ編集やらはできないって割り切って使ってるよ。
 自分で書いたプログラムが他人のマシン借りないとマトモに
動かないってのはかなり鬱だが。
0149名前は開発中のものです。01/12/24 12:16ID:ri5i/9hM
最近のマシンはBitBltでさえ高速だから油断ならない。
動作確認のために、今使っている屑を手放せナイーヨ
0150名前は開発中のものです。01/12/25 13:28ID:FrMhTu1F
DXというかVCの質問になりますが
D3DXVECTOR3 vecがあって
"vec."と打つとメンバがポップアップされて表示される機能
あれが働かないのですが,どうすればいいのですか?

以前D3DVECTORを使用していたときは出ていたのですが...
擦れ違いとか言わないでそこをなんとか
0151名前は開発中のものです。01/12/25 13:41ID:bGbvaKtQ
vcのバグ
0152名前は開発中のものです。01/12/25 14:08ID:???
ヘッダもプロジェクトに入れよう。
0153名前は開発中のものです。01/12/25 14:48ID:???
>>143
未だに5.0対応のコードで書いていますが、何か?
0154名前は開発中のものです。01/12/25 15:42ID:FrMhTu1F
>>151
”外部依存関係”ってとこからヘッダのほうに持っていくと
上手く行きました.
thx!
0155名前は開発中のものです。01/12/25 15:43ID:???
>>152ダッタ
0156名前は開発中のものです。01/12/26 02:13ID:???
95使ってる奴に限って「動きません!」メール出しまくるので
ソフト作者に「95使ってる奴が世の中に大勢いる!」と錯覚与えてる罠。
0157名前は開発中のものです。01/12/26 12:53ID:???
企業や学校のリースの古いマシンは、OS入れ替えなしで使われている場合が多いね。
インストール禁止なんかになると、DirectXすら入ってない。
下手するとI.Eのアップデートすらされてなくて(以下略
0158 01/12/26 14:40ID:???
D3DXCreateTextureFromFileExでBMPからテクスチャつくってるんだけど
サイズの大きいBMPだとうまくいきません、原因分かりますか?
0159名前は開発中のものです。01/12/26 15:02ID:Q2518lPu
MSDN、まだDX8.1のCDを送ってこない。
仕方ないダウンロードするか。

DirectShowのGraphEditで遊んでます。
AudioCompressor に MPEG Layer-3 が出てきます。
これをSoundBlasterのキャプチャーにつなげても何も出力してくれないけど、
これってやっぱりエンコードが"32kBits/s, 22,050 Hz, Mono"までしか対応してないって
ことですかね。そうだろうなー。
MSとFraunhoferのケチ。
■ このスレッドは過去ログ倉庫に格納されています