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

鬱だ氏のう DirectX (Part 8)

■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。03/03/03 16:25ID:bb2JYtGF
DirectXについてマターリと技術情報交換&雑談するためのスレッド。
初心者用相談室では扱わないような少し高度な話題も受け持つ。
■ 過去スレ
Part 1 http://piza.2ch.net/tech/kako/966/966655286.html (プログラム板)
Part 2 http://pc3.2ch.net/test/read.cgi/tech/997101556/ (プログラム板)
Part 3 http://game.2ch.net/gamedev/kako/1005/10051/1005119775.html
Part 4 http://game.2ch.net/gamedev/kako/1016/10162/1016276254.html
Part 5 http://game.2ch.net/test/read.cgi/gamedev/1027351925/
Part 6 http://game.2ch.net/test/read.cgi/gamedev/1033920036/
Part 7 http://pc2.2ch.net/test/read.cgi/gamedev/1039509250/
0002103/03/03 16:28ID:bb2JYtGF
前スレ>>4のコピペ

MSのDirectX関連ページ

DirectX Home Page
http://www.microsoft.com/japan/windows/directx/default.asp

MSDN>DirectX
http://www.microsoft.com/japan/msdn/directx/default.asp

個人サイトはあんまり知らない・・・

DirectX Info Lib (デバイス情報のデータベース。すばらしい!)
http://www.netsphere.jp/dxinfo/

BBX(掲示板)
http://isweb8.infoseek.co.jp/computer/bbx/

spin
http://spin.s2c.ne.jp/

宇治社中改(3D基礎講座)
http://www.cc.rim.or.jp/~devilman/
0003名前は開発中のものです。03/03/03 16:53ID:aZrofejA
今だ!2ゲットォォォォ!!
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄       (´´
     ∧∧   )      (´⌒(´
  ⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡
        ̄ ̄  (´⌒(´⌒;;
      ズザーーーーーッ
0004名前は開発中のものです。03/03/03 16:56ID:1NsvQPOm
乙彼〜>>1
0005あぼーんNGNG
あぼーん
0006名前は開発中のものです。03/03/03 18:55ID:qbQXxNnT
ddsとかのαチャンネル付き画像を表示する時、
m_lpD3DDev->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA); //加算
m_lpD3DDev->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ONE);
上は、うまく描画出来るんですが、

m_lpD3DDev->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_DESTCOLOR); //減算
m_lpD3DDev->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_SRCALPHA);
とか、
m_lpD3DDev->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA); //乗算
m_lpD3DDev->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_SRCCOLOR);
とか、の場合が画像のα値が無視されて描画されます。
上の2つのレンダリングステートで画像のα値も有効にして描画する方法はないですか?
0007名前は開発中のものです。03/03/03 22:26ID:r4B7DOte
よくしらべないでいうけどなんかまちがってない?
0008あぼーんNGNG
あぼーん
0009あぼーんNGNG
あぼーん
0010603/03/04 00:04ID:j6RF6bWD
>>7
間違いがわからないっす・・・
具体的に αチャンネル付き画像を、
減算合成で描画するコードを書いて下さい。
それとも、うまく逝かないのは 単なるハード環境の問題っすか?
0011名前は開発中のものです。03/03/04 00:08ID:d6l7qWOu
ハードが対応してないんじゃない?
0012あぼーんNGNG
あぼーん
0013名前は開発中のものです。03/03/04 00:35ID:mWLi3Ntv
>>6
D3DBLEND_SRCALPHA?
D3DBLEND_SRCCOLORじゃないの?

D3DBLEND_SRCALPHA
ブレンディング係数は、(As, As, As, As)。

D3DBLEND_SRCCOLOR
ブレンディング係数は、(Rs,Gs,Bs,As)。
0014名前は開発中のものです。03/03/04 02:10ID:xgzJo+TS
>>6
それのどこが減算なのか具体的に説明して欲しい。
加算や乗算もαを掛ける意味が分からんし。
掛けるとしても頂点カラーか頂点αだろ。
0015あぼーんNGNG
あぼーん
0016名前は開発中のものです。03/03/05 00:52ID:5Lz6pLX5
DrawIndexedPrimitiveメソッドの引数の4番目に
描画を開始する頂点の位置をしていってあるけど、これって意味あるんですか?
インデックスの最小値を参照すればわかると思うのですが
0017名前は開発中のものです。03/03/05 01:29ID:MVcdhL32
IDirectSoundBuffer9* pDSBPrimary = NULL;
IDirectSound3DListener9* pDSListener;
...
if(FAILED(hr = g_pDS->CreateSoundBuffer( &dsbd, &pDSBPrimary, NULL )))
return hr;

if(FAILED(hr = pDSBPrimary->QueryInterface(IID_IDirectSound3DListener9,
(LPVOID *)&pDSListener)))
return hr;

pDSListenerは、CreateSoundBufferのような関数がないから、
QueryInterfaceを使わなくてはいけないのでしょうか?
0018603/03/05 03:07ID:E3cAoA2S
>>14
う〜む・・
減算の意味を勘違いしてたみたいです・・
m_lpD3DDev->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_DESTCOLOR);
m_lpD3DDev->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_SRCALPHA);
これは何になるのかな?

まぁ、αチャンネルを有効化(カラーキーみたく)して、
各種ブレンド出来ればよい分けですが・・
やっぱ自分のハードが対応してないだけかな?
0019名前は開発中のものです。03/03/05 04:48ID:DekEFUPO
>>17
うん
0020名前は開発中のものです。03/03/05 05:08ID:AQmYgEjj
>>16
あまりサイズの小さいVertexBufferをたくさん作ると効率が悪いから、
同じ頂点フォーマットは1つにまとめて使うと効率がいい。
そのときVertexBufferの先頭からの位置をそれで指定する。

>>18
何になるかと言われても、乗算にDEST*αを足した物としか言いようがない。
それと、αを使うならSetTextureStageStateも書かないと合ってるのか
間違ってるのかも答えようがないよ。
0021あぼーんNGNG
あぼーん
0022名前は開発中のものです。03/03/05 14:45ID:Dervyizk
Win98SE+DirectDraw7で作っていたゲームが、
Win2000で何故か表示されなくなってしまいました。
Win2000でも他のPCでは映ったり映らなかったり。

フルスクリ−ン、ウインドウモード切り替え式で、
裏描画用サーフェスから、bltでプライマリサーフェスに書き込んでいますが、
全然転送(描画)されません・・・

プライマリ
.dwFlags = DDSD_CAPS
.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE
CreateSurface(...)

描画サーフェス
.dwFlags = DDSD_CAPS Or DDSD_HEIGHT Or DDSD_WIDTH
.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN
.dwWidth = 640
.dwHeight = 480
CreateSurface(...);


何か心当たりがある方は、教えてくださると嬉しいです。
OS以外は全て同じなのですが。
グラフィックボードはGeForce4MX440です。
0023名前は開発中のものです。03/03/05 21:00ID:hdC/bTIn
DirectXのバージョソの取得方法がわかりま1000(ヘルプも見た、検索もした)
教えてください。
0024名前は開発中のものです。03/03/05 23:14ID:TGsKNhuu
GetDXVer
0025名前は開発中のものです。03/03/05 23:19ID:E5a7SxY/
DirectX8.1から、HRESULTのエラーを表示する関数があった気がするのですが、
なんていう関数でしたっけ?

関数名が分からないのでヘルプでも調べられないのですが…
0026名前は開発中のものです。03/03/05 23:22ID:XfqyZmeX
ERRとかで調べれば? なんとなくそんな名前だった気がするけど。
0027603/03/05 23:31ID:kOxycZ9v
>>20
m_lpD3DDev->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE);
m_lpD3DDev->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
m_lpD3DDev->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_DIFFUSE);

m_lpD3DDev->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE);
m_lpD3DDev->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
m_lpD3DDev->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE);

こんな感じですね。
0028名前は開発中のものです。03/03/06 01:19ID:05ZvYttE
DXGetErrorString8
0029あぼーんNGNG
あぼーん
0030名前は開発中のものです。03/03/06 06:27ID:RTTjbCjB
>>27
まず、基本的な確認ですが
SRC〜=転送元=テクスチャの色データ
DEST〜=転送先=フレームバッファ等の描画先の色データ
って事はご存知ですよね?

デフォルトのBLENDOPはD3DBLENDOP_ADD、つまり加算合成で
結果は転送元+転送先なわけです

よってそれぞれの効果を実現するには以下のブレンディング係数を
指定してみて下さい

加算:爆発や発光のエフェクトなど
転送元の色は転送元アルファでスケーリング
SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA)
転送先の色はそのまま残す
SetRenderState(D3DRS_DESTBLEND, D3DBLEND_DESTCOLOR)

乗算:普通のアルファブレンド
転送元の色は転送元アルファでスケーリング
SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA)
転送先の色は転送元アルファを反転させてスケーリング
SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA)

減算合成はBLENDOPを変更しなければなりません
SetRenderState(D3DRS_BLENDOP,D3DBLENDOP_REVSUBTRACT)で変更し
結果が転送先−転送元になるようにして
加算と同じブレンディング係数を指定すれば可能ですが
ハードが減算合成をサポートしていないといけないので注意

では、頑張って下さい
0031名前は開発中のものです。03/03/06 11:29ID:h3GlfAzL
ちなみに減算合成は半透明でも出来ます
人物の影などは真っ黒いテクスチャを半透明で描画したほうが
RenderState変更に伴うオーバーヘッドが少なかったりする場合もあります
0032名前は開発中のものです。03/03/06 12:00ID:BJivuhpj
> RenderState変更に伴うオーバーヘッド

これって良く聞くけど、実際のところはどんなもんなんでしょ。
0033名前は開発中のものです。03/03/06 13:16ID:lM/JL7UP
>>32
引数にもよるんじゃないかな?
0034あぼーんNGNG
あぼーん
0035名前は開発中のものです。03/03/07 01:15ID:wFwfmvGJ
DX8.1で困ってます。
D3DXCreateSkinMeshFromMeshで生成されるスキンメッシュから
GenerateSkinnedMeshでメッシュを生成すると頂点座標がメチャクチャな
メッシュが出来てしまいます。D3DXMESH_DYNAMIC でGenerateSkinnedMeshしています。
これ以外でも同じ結果となりました。
スキンメッシュ自体やオリジナルポーズのメッシュにはちゃんと頂点座標が書かれている
のですがGenerateSkinnedMeshで出来るメッシュだけがおかしくなっています。
このおかしなメッシュですがちゃんと頂点バッファは確保されていて頂点数を取得すると
正しい数を持っています。
メチャクチャな数値=-1.#NOD00で全ての頂点のXYZがこの数値です。(デバッグモード)
ボーンも設定してあるのですが全く反映されません。UpdateSkinnedMeshしても
変化無しです。ちゃんと生成できてるよ、という方がいたら生成方法等教えて下さい。
お願いします。ちなみにスキンメッシュの生成元のメッシュは別のスキンメッシュの
オリジナルポーズのものです。エラーはどこにも出ていません。
00363503/03/07 09:20ID:wFwfmvGJ
す、すいません!
手違いでボーンを設定するのを忘れていただけでした。
ボーンを設定するとちゃんと正常にスキニングされたメッシュが生成されました。m(_ _)m
0037603/03/07 15:07ID:8XxoUWtE
>>30
>デフォルトのBLENDOPはD3DBLENDOP_ADD
ver7にはBLENDOPなる物は無いので、良く確かめてみたら、
間違った事を書いてました・・ すいません・・
自分が書いたコードは、ver8以降ぽっくなってますが、
実際はver7のつもりで書いてました・・
人のコードをコピペしてたので、間違ってました。
0038あぼーんNGNG
あぼーん
0039名前は開発中のものです。03/03/07 23:12ID:aNy7TxdK
HLSL について少しご教授願います。

fx ファイル内で頂点シェーダの入力データのセマンティクスに
DIFFUSE や AMBIENT を設定してもシェーダのコンパイル時に
エラーが出てしまうんですが
設定されている拡散反射率や環境光反射率を使用して
シェーダ内で陰影付けするにはどうしたらよいのでしょうか。

コンパイルする際の頂点シェーダのバージョンは 1.1 を指定しています。
バージョンをあげてもコンパイル時にエラーが出てました。
0040あぼーんNGNG
あぼーん
0041名前は開発中のものです。03/03/08 13:34ID:24L/tAoJ
>>39
コンパイラのエラーメッセージ見ても分からない?
0042名前は開発中のものです。03/03/08 14:10ID:9j4cZmX0
IUnknownとか
IDirectDraw7とかの
プリフィックスIの意味って何ですか?
■ このスレッドは過去ログ倉庫に格納されています