トップページ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)

コピペスマソ
0046名前は開発中のものです。02/10/09 16:48ID:???
なんかカチンときた。
0047名前は開発中のものです。02/10/09 17:27ID:???
なんかチカンがきた。
0048名前は開発中のものです。02/10/09 17:45ID:???
>>41
http://game.2ch.net/test/read.cgi/gamedev/1027351925/702-707
0049名前は開発中のものです。02/10/09 19:05ID:???
>>45
君なんか激しく勘違いしてないか?
0050名前は開発中のものです。02/10/09 19:42ID:???
>>45
Direct 3D9∈Direct X9∋Direct X8∋Direct X7....
0051名前は開発中のものです。02/10/09 21:06ID:DaJCh7ix
>>48
ありがとうございます。もうひとつ質問させてください。UINT_PTRは解決できたの
ですが、
d3dx8math.h undefind symbol '_11'
d3dx8math.h undefind symbol '_13'
d3dx8math.h undefind symbol '_14'
と出ていまだに、コンパイルできてません。
これらについても教えてください。
0052 02/10/09 21:25ID:???
>>45
グラフィックカードの構造が大幅に変わったからといってAPI仕様も大幅に変わるとは限らないです。
DirectX9ではシェーダー部分の機能拡張は大きいですが
基本的な部分の使い方はほとんど変わらないです。
DirectX9はまだ正式リリースもしてないし、使用方法の情報についても少ないので
「今」始めるならDirectX8がいいと思います。
DirectX9をインストールしたマシンでも当然DirecX8のプログラムは動きますし、
後からDirectX9特有の機能を使いたくなった時に移行しても手間はあまりないと思います。

とか言ってしまいましたが、オレもDirectX9βに実際触ったわけではないので
なんかまちがってたら識者の方修正キボン
0053名前は開発中のものです。02/10/09 21:33ID:???
>>52
まあそうあせらずに・・・
こないだβを触ったので漏らしてあげよう。

インターフェースの見た目はあんまりDirectX8とかわらん。
8用のコード(directx部分だけで数千行)を9用に書き直したが、
4時間もかからなかったよ。
7→8もそうだったけど、コンパチ度は意外に高いと思う。

9の機能(シェーダー2.0だけじゃないぞ)を生かそうと思ったら
いろいろ実験が必要だろうねえ。やる時間がほしい・・・
0054名前は開発中のものです。02/10/09 21:37ID:???
それよりもユーザーにはやっとDirectX8が普及してきた状況なので
DirectX9で作っても誰も遊んでくれない罠

まぁ3年越しのプロジェクトとかならわからんけど
0055名前は開発中のものです。02/10/09 23:37ID:/K9cQ5sf
DirectXGraphicsでもHDCを取得できる関数があるんでしょうか?
あったら教えてもらえたらうれしいです
初心者まるだしの質問ですいません
00565102/10/09 23:42ID:???
>>51
問題点がわかりました。
VC++じゃないとコンパイルできないのですね。bccでがんばってましたよ。
答えてくださったかた、ありがとうございました。
0057名前は開発中のものです。02/10/09 23:43ID:???
>>55
X8にはない。X9にはある。
0058名前は開発中のものです。02/10/09 23:44ID:???
>>57
あるの?!
0059名前は開発中のものです。02/10/09 23:45ID:???
>>32
俺もずっとまえから同じ。
dx9待つのがよかろ
0060名前は開発中のものです。02/10/09 23:46ID:???
X9にはあるというはなしだよ>>58
0061名前は開発中のものです。02/10/09 23:54ID:???
>>60
さんきゅ。
今の DirectDraw を使ったライブラリの保守は止めて
DirectX9 SDK の配布まで待とう。

しかし大きな仕様変更があったら嫌だな。
またあのヘルプやら妙なサンプルやらを読む日々が続くのか…。
0062名前は開発中のものです。02/10/09 23:58ID:???
>>58
この辺のpptに関連情報があったような気がする。
http://www.microsoft.com/japan/msdn/directx/techarts.asp
http://www.microsoft.com/corpevents/gdc2002/
0063名前は開発中のものです。02/10/10 01:14ID:8ADA7E3+
DX9はC#に対応しているから何よりそこに期待。
0064名前は開発中のものです。02/10/10 01:53ID:???
C#でDirect3Dか〜。うーん夢のようだなハァハァ
0065名前は開発中のものです。02/10/10 02:41ID:???
これでDirectDrawが綺麗サッパリ、消えてくれるわけだな
0066名前は開発中のものです。02/10/10 02:42ID:???
>>65
はやく寝ろよ
0067名前は開発中のものです。02/10/10 07:47ID:???
>>53
参考になりますた。9がまちどおしいです。
0068名前は開発中のものです。02/10/10 20:24ID:pMa8asNt
32bitカラーに対応していないビデオカードを使用している場合のことですが
CreateDeviceの引数のBackBufferFormatに
D3DFMT_R5G6B5を設定して初期化した場合
D3DFMT_X8R8G8B8やD3DFMT_A8R8G8B8フォーマットのテクスチャを正常に扱うことが出来ますか?
0069名前は開発中のものです。02/10/10 20:53ID:???
全てはビデオカードに依存する
あらゆることに何の保証も無い
0070名前は開発中のものです。02/10/10 21:11ID:???
DirectX8を使って、DirectDrawがどれだけクソだったのかを知った。
0071名前は開発中のものです。02/10/10 21:54ID:LV4wwsC0
>>68
例えば、俺が確認した範囲では
nVidia Geforce4Tiでは使えた。しかしMatrox G400では駄目だった。
 
結局、DirectXを使うなら何をするにも必ずDeviceCapsをチェック。
環境毎に使えるものを選択していく以外に方法はないのさー。
0072名前は開発中のものです。02/10/10 23:15ID:???
>>70
>DirectX8を使って、DirectDrawがどれだけクソだったのかを知った
何の機能を見てクソだといっているのかはよくわからないが、
GDIオブジェクトを取得できないDirect X8もけっこうクソだとおもうよ
将来君は「DirectX9を使って、DirectX8がどれだけクソだったのかを知った」
とか言うんだろうね。まあいいけどさ。
時代にあわせたAPIだったんだよ。うん。
0073名前は開発中のものです。02/10/11 00:24ID:???
GDIが直接使えなくても回避方法はいくらでもある
大した手間でもないしその程度で糞呼ばわりでは底が知れる
0074名前は開発中のものです。02/10/11 01:09ID:???
>>回避方法はいくらでもある

どんな方法?

0075名前は開発中のものです。02/10/11 01:38ID:???
GDI使えるとUIがつまらなくなる
0076名前は開発中のものです。02/10/11 02:34ID:???
初心者な漏れ的発想
DX5-7
Drawしか使えねーよ、3Dわけわかんねーよ、初期化ってなんだよ意味わかんねーよ。
つかWIN32APIだけで画像転送できるじゃねーか、それでいいや。
DX8
半透明と加算、拡大縮小回転が楽に出来る関数あるじゃねーか、頑張ってみるか(このときネットに繋がったのでネット漁りで何とかDX8導入できた)
便利じゃん、楽じゃん、簡単に派手になるじゃん。げっ、文字の描画おせー。WIN32APIのTEXTOUTつかえねーのかな?
3D案外らくじゃん、物体出すだけで戸惑ってたのに一応フィールドを360歩くジャンプ攻撃、の簡易アクションゲーまでできるようになった。

漏れはDX8が無ければc++使う気になりませんでした。
ていうか、クラス継承とNEWDELETEくらいしか使ってねーけど。
糞って言う前にもっと使って楽しみたいね。漏れは。糞って言ったら過去否定みたいでションボリ
0077名前は開発中のものです。02/10/11 03:15ID:8aFpC2Gc
DirectX8で質問です。
ビルボードを複数描画する場合にテクスチャフィルタを使うとエッジの部分が
ぼやけてしまい、奥から描画しないとエッジの部分がきちんと描画できません。
エッジをぼかさないようにテクスチャにだけフィルタをかける方法はないのでしょうか?
0078名前は開発中のものです。02/10/11 03:56ID:???
>>77
1 でかい値のAlphaRefで(0xf8とか)AlphaTest。微妙なフィルタを使わない
2 奥から描画する。
3 放置。

どれも、市販ゲームで使われてる選択支。

0079名前は開発中のものです。02/10/11 10:33ID:???
DirectPlay8Create関数を使うと関数が定義されていない旨のエラーが出て困った。
includeのパスが通っているか。など、調べまくったが原因が不明。
なんとなく、"DirectPlay8Create"で検索してみたら以下の文が・・・

>This function is no longer supported. It is recommended that CoCreateInstance be used to create
>DirectPlay8 objects.
>
>extern HRESULT WINAPI DirectPlay8Create( const GUID * pcIID, void **ppvInterface, IUnknown *pUnknown);
だったらわかりやすいところに書いてくれよぉ!
俺の六時間を返せ!鬱だ氏のう・・・
0080名前は開発中のものです。02/10/11 11:02ID:???
ルビーの開発者も言っていたよ。

日本は開発者とユーザーを繋ぐ存在が皆無だと
00817702/10/11 11:24ID:???
>>78
ありがとうございました。1でテクスチャ内部にだけフィルタ処理できました。
奥から描画はなるべく行いますが、モデルで組んだときにできないので。
0082名前は開発中のものです。02/10/11 17:56ID:???
Dx8って文字列描画遅いの?なんで?
0083名前は開発中のものです。02/10/11 18:53ID:a1gnR+r6
D3DTEXTが遅いから
0084名前は開発中のものです。02/10/11 18:56ID:???
>D3DTEXT
そんなものは無い
知ったか馬鹿は引っ込んでろ
0085名前は開発中のものです。02/10/11 18:57ID:???
D3DXFONTでしょう。なにか特殊な処理でもやってるのかしら?
0086名前は開発中のものです。02/10/11 19:02ID:???
D3DXFONTなんて使ってるから文字列描画が遅いなんて思い込むんだろう
何でそんな不必要なものに頼るんだ?
0087名前は開発中のものです。02/10/11 19:40ID:???
ttp://giggle.cside6.com/hotate/hints/chara_display/index.htm
文字遅いので取った手段。
つか全部画像で呼び出せば良いんだけどね。

数文字程度ならいいんだけどサウンドノベルみたいに表示するとやたら重い。
チュートリアル作ってたときに表示されてる解説文字増えるほどスローになってびびった。
0088名前は開発中のものです。02/10/11 20:07ID:???
>>87
サンクス。なるほど・・・なんかメッセージ表示したとたん重くなるとおもったらこういうわけだたのか。
0089名前は開発中のものです。02/10/11 20:39ID:???
>>87
最初からDIB経由でTextureに転送してやれば
DIB -> Texture -> D3DDevice
だけですむところをD3DXFontでテクスチャにレンダリングなんかしたら
DIB -> Texture -> D3DDevice -> Texture -> D3DDevice
なんて無駄が発生する
何も知らない初心者を騙すページを作るのはやめとけ
0090名前は開発中のものです。02/10/11 22:58ID:???
CD3DFontってあるやん。これは遅くないんじゃない?知らんけど。
まあ、>>87はだますつもりなんてないんだろうし。
せっかく善意でTips公開してるんだからあたたかく見守ってやろうじゃぁないか。
しかしその他の内容が( ´д`)
0091名前は開発中のものです。02/10/12 03:23ID:C17IsShu
DirectX8で質問です。
半透明で丸状の影を落としたいのですが、最初アルファ付きテクスチャでやったのですが、
ボードによってはできませんでした。
丸影の中心は半透明レートが高く端に行くにつれ薄くなる感じです。
丸の中心を白にして端に行くに従って黒になるテクスチャを作り
フレームバッファからの減算になるのを期待して
SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_SUBTRACT );
この設定で表示してみたのですがうまく表示できません。
なにか設定がたりないのでしょうか?
それ以外の方法でもなにか良い方法あれば教えてください。
0092名前は開発中のものです。02/10/12 09:17ID:???
>>91
D3DRS_BLENDOP
ただし、GeForce3やRideOn8500より古いと使えないことが多いのに注意。
0093名前は開発中のものです。02/10/12 19:04ID:???
世の中、DirectX講座をしている香具師の中にも
オオバカがいるんだな・・・気をつけないと馬鹿が写される!!!
0094名前は開発中のものです。02/10/12 21:22ID:???
そのために2chのような辛口サイトがある。
0095名前は開発中のものです。02/10/12 21:30ID:???
×辛口サイト
○厨房サイト
0096名前は開発中のものです。02/10/12 21:32ID:???
>>95
正解
0097名前は開発中のものです。02/10/12 22:49ID:???
正直、あまりにも漏れが初心者なのでどの辺りが馬鹿で、何をしてはいけないのかが分からない。
ようするに表示する文字は先にBMPにしておけってことですか?
結構あの講座は判りやすかったんで良かったのですが。
00989102/10/12 22:52ID:???
>>92
D3DRS_BLENDOP
試しましたが出来ませんでした。うちのマシンはラデ7200なので無理っぽいです。

結局この設定で出来ました。中心が黒で外に行くに従って白になるテクスチャを使用してます。
SetRenderState(D3DRS_SRCBLEND,D3DBLEND_ZERO);
SetRenderState(D3DRS_DESTBLEND,D3DBLEND_SRCCOLOR);
0099名前は開発中のものです。02/10/13 08:44ID:???
>>97
BMPではなくDIBにDC経由で描いてテクスチャに転送
回りくどくD3DXFontを使って速度を落とす必要がないだけ
それからCD3DFontの方は9x系で日本語が使えない
01009702/10/13 12:20ID:???
>99
ttp://macosx2.ncs.gr.jp/~masa/jpn/program/dx8_font.html
こういうことですね、ありがとうございます。
早速試行してきます。
0101_02/10/13 20:00ID:???
>>99
その方法で描画すると、ビデオカードによっては文字がぼやけてしまいます。
TNT2、G450等では文字がくっきりしているのですが、
Geforce2、RADEON等は、文字がぼやけた感じになってしまいます。
表現しにくいですが、アンチエイリアスがかかったかんじです。

これはどのようにすれば改善されるでしょうか…?
0102名前は開発中のものです。02/10/14 01:10ID:???
画面のプロパティなんかで、フォントのアンチエイリアスをONにしていると
そうなるのは仕方ないような。

GetGlyphOutlineは駄目?
010310102/10/14 02:20ID:???
間違えました。アンチエイリアスというより、
SetTextureStageState(0,D3DTSS_MINFILTER,D3DTEXF_LINEAR);
SetTextureStageState(0,D3DTSS_MAGFILTER,D3DTEXF_LINEAR);
が、かかっているような状態になります。
0104名前は開発中のものです。02/10/14 02:33ID:???
>>103
俺は99ではないが同様の方法を取っている。
社内の複数のマシンで動かしているが特に>>101のような
問題はでていない。

座標-0.5の話が過去ログにあるが、それではない?
0105名前は開発中のものです。02/10/14 09:55ID:???
ビデオカードのプロパティで強制アンチエリアシングONというオチもあり得る
010610102/10/14 19:39ID:???
>>104
ということは、私のコードが悪いということですね。
過去ログ読んだりして、もう少しいろいろいじってみます。

>>102>>104>>105
レスありがとうございました。
0107名前は開発中のものです。02/10/15 00:01ID:394UiHGE
誰か教えてください。

光の残像ってどうやって表現しますか?
例えば、蛍が暗闇を飛び回る姿を想像してください。
蛍が光っているのを描くのは簡単ですが、その残像がうっすらと残るように
したいのです。

思いつくのは、光の球を、αブレンドで何度も直線状に描画することくらいですが…

みなさんはどうやっていますか?
0108名前は開発中のものです。02/10/15 00:09ID:???
グラディウスのオプションをたくさん・・・
0109名前は開発中のものです。02/10/15 00:28ID:???
ホタルだったら、
蛇状の半透明ポリゴンを軌跡にそって動かす。
011010902/10/15 00:30ID:???
あと、視線との角度に応じてα値を調整するとよりリアル。
0111 02/10/15 02:01ID:???
>>107
光の部分を別サーフェースに書いて加算合成。
次のフレームにはそのサーフェースは暗くして(クリアはしないで)重ねて光を描画。
そーすりゃスーーッて光が伸びると思う

...まあオレもやってみてはいないんだけどね。イロイロやってみてくだせい...
0112名前は開発中のものです。02/10/15 02:44ID:???
D3DRS_ZBIAS機能が使えないビデオボードって結構あるのでしょうか?
Geforce2GTSで使えないのです。
これ以外のビデオボードでは今の所使えています。
0113名前は開発中のものです。02/10/15 04:02ID:???
>>112
2GTSでの IDirect3DDevice8::GetDeviceCaps() の結果のほうはどうなってる。
D3DPRASTERCAPS_ZBIAS のフラグは立ってるのに動作がおかしいという状態か。
0114名前は開発中のものです。02/10/15 05:43ID:???
>>D3DRS_ZBIAS機能が使えないビデオボードって結構あるのでしょうか?
GeForce2GTSのみならず
GeForce2 or 3 も正しく機能しません。
したがってZBIASは「使えない」ものと認識してしまったほうがいいと思われます。
0115名前は開発中のものです。02/10/15 09:50ID:???
ZBIASの正しい動作とはどういうもの?
0116名前は開発中のものです。02/10/15 13:36ID:???
フライトシムみたいな視点移動を実現したいのですが、
どうすればよいですか?
0117名前は開発中のものです。02/10/15 14:11ID:???
>>116
あー前に作ったことあるな
ちょっと待ってろ
0118名前は開発中のものです。02/10/15 14:35ID:???
http://jp.y42.briefcase.yahoo.co.jp/bc/nas6_2001/lst?&.dir=/Projects&.src=bc&.view=l&.last=1
ほいよ
詳しくは、使い方.txtを見てくれ
011911602/10/15 14:36ID:???
ありがとうございます
早速落としにいきます
012011802/10/15 14:50ID:???
http://jp.y42.briefcase.yahoo.co.jp/bc/nas6_2001/lst?.dir=/Projects&.view=l&.src=bc&.done=http%3a//jp.y42.briefcase.yahoo.co.jp/bc/nas6_2001/lst%3f.dir=/Projects%26.src=bc%26.view=l
ごめんまちがえた
こっち
012111802/10/15 14:50ID:???
http://jp.y42.briefcase.yahoo.co.jp/bc/nas6_2001/lst?.dir=/Projects&.view=l&.src=bc&.done=http%3a//jp.y42.briefcase.yahoo.co.jp/bc/nas6_2001/lst%3f.dir=/Projects%26.src=bc%26.view=l
ごめんまちがえた
こっち
0122名前は開発中のものです。02/10/15 21:14ID:394UiHGE
windowモードで、ガンマコントロールを使用したら、
ゲームとは関係のない画面まで色が変わってしまいました。

これって直すことはできますか?
0123名前は開発中のものです。02/10/15 21:18ID:???
ガンマ制御はディスプレイの設定を丸ごと弄ってるので、無理。>>122
0124名前は開発中のものです。02/10/15 21:21ID:394UiHGE
へぇ、そうなんだ。ありがとう。
全体をだんだん暗くさせたいときとかは、真っ黒なテクスチャをαブレンドさせるのかな。
0125名前は開発中のものです。02/10/15 21:21ID:???
ああ、しまった。
sageれなかった。ごめん。
0126名前は開発中のものです。02/10/16 00:16ID:???
>>124
レンダリング済みサーフェイスをテクスチャーにして
頂点色をいじるとおもしろいフェードアウトができるよ
012711202/10/17 01:23ID:???
>>113
すいません。出先のマシンなので調べられないです。

>>114
ZBIASが使えない場合なにか変わりになる機能とかあるのでしょうか?
地面を描いてその上に影を落としているのですが、z値が同じになってしまうので、
影が出たり消えたりします。影をzバッファ非使用で描くことも考えたのですが、
地形に隠れる場合もあるので、zバッファを使用したいと思います。
0128名前は開発中のものです。02/10/17 01:53ID:???
>>127
影ポリゴンの頂点が、影を落としたい地形の頂点と
完全に同じなら消えないよ。
だから地形の一部を切り出してきて、テクスチャを投影するという手もある。
D3DTADDRESS_CLAMPでuvの範囲を0〜1に限定するのがポイント。
0129名前は開発中のものです。02/10/18 05:29ID:Nk5vOGxB
俺が今作ってるプログラムでは、
D3DXMATRIXA16で境界合わない元凶が
d3dx8math.inlのD3DXMATRIX::operator *の中の一時オブジェクトだった。
__declspec(align(16)) D3DXMATRIX matT;
にするだけで改善するのに。
しかたない。自前の構造体作るか。
0130名前は開発中のものです。02/10/18 09:10ID:???
良スレと思ったらage進行で
0131名前は開発中のものです。02/10/20 04:45ID:h2ye+Wzc
すいません。directx8でガンマコントロールを使わずにフェードインとか、
全体を青っぽく見せたりとかって、どうやりますか?
0132名前は開発中のものです。02/10/20 05:02ID:???
画面全体を覆うような半透明ポリゴンを作成してはいかがか。
0133名前は開発中のものです。02/10/20 08:43ID:???
半透明というより指定した頂点カラーのアルファーを増減
0134名前は開発中のものです。02/10/20 14:54ID:???
ちょっと意味がわからないのですが、つまり
「描画した後に、画面全体を覆う四角形ポリゴンを作成して、その上から
αブレンドで重ねる」
ということですか?
0135名前は開発中のものです。02/10/20 15:18ID:???
>134
Yes Yes Yes!
0136名前は開発中のものです。02/10/21 01:18ID:3IKbfs80
SetVertexShader()を毎回のループで呼び出すと、その後に描画したはずの
テクスチャが見えなくなるのですが、気のせいですか?
0137名前は開発中のものです。02/10/21 01:25ID:3IKbfs80
えっとですね…
Clear
BeginScene
sprite->Begin
SetVertexShader
DrawPrimitiveUP
sprite->End
EndScene
Present
の順に呼び出したら、描画されませんでした。何がおかしいのですか?
0138名前は開発中のものです。02/10/21 03:10ID:???
多分気のせいです
そんなときはたいてい頂点数指定ミスとか頂点バッファがおかしいとか
私はそういうことが多かったです。根気よくデバグせよ
0139名前は開発中のものです。02/10/21 03:11ID:???
あ、テクスチャだけ見えないのか。なんだろ。
0140名前は開発中のものです。02/10/21 08:34ID:???
>>133
その場合、FSAAどうするの?
0141名前は開発中のものです。02/10/21 10:14ID:DC+a3Xms
HardwereT&Lに関する質問です

いまいち不透明なんですが、一般にDirect3DをHardwereT&Lで処理するという事は
CreateDeviceでD3DDEVTYPE_HALとD3DCREATE_HARDWARE_VERTEXPROCESSINGを
指定するという事なんでしょうか?

D3DCapsにはD3DDEVCAPS_HWTRANSFORMANDLIGHTという
HWT&Lそのものズバリを指すフラグがあるのですが
肝心の初期化や各処理の引数を見てもHWT&Lという単語が出てこないので混乱しています
0142名前は開発中のものです。02/10/21 10:24ID:???
>>141
DirectX8ならデバイス作成時に指定すれば
UP系以外なら勝手に動作するので気にする必要は無い
0143名前は開発中のものです。02/10/21 10:42ID:DC+a3Xms
>DirectX8ならデバイス作成時に指定すれば
それが具体的に>>141であってるのか?という質問なのですが・・・

例えば市販のFPSなどで描画方式の選択肢が
DirectX・DirectX H/W T&L・OpenGL などとなっていますよね?
で、H/W T&Lが選ばれた場合、内部では具体的にどうしているんだろうという質問です
0144名前は開発中のものです。02/10/21 10:48ID:???
>>134
デバイス作りなおしているんでないの?
0145名前は開発中のものです。02/10/21 10:48ID:???

>>143
×>>134
■ このスレッドは過去ログ倉庫に格納されています