ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

DirectX SDKコミュのトピックを立てるまでも(ry)初心者質問トピック

  • mixiチェック
  • このエントリーをはてなブックマークに追加
当方初心者であります。トピック立てるまでも系のトピックがなかったので僭越ながら作らさせていただきました。。

ってもしかしてここ初心者なんていねえっつう話ですか!?

その場合はスルーしてくださいませ。。

コメント(234)

みなさんに質問します。よろしくお願いします。

DirectSoundで音を鳴らし、終了時にイベントを発生させることができますでしょうか?
ご存知の方教えて頂ければ幸いです。
すみませんが質問させていただきます。
C++でDirectXを使ってゲームを作っているのですが視点(カメラ)でつまっています。
視点をターゲットをロック(ガンダムのVSシリーズみたいな感じ)にしたいのですがやり方がわかりません。
カメラをターゲットと自機を結んだ直線上の自機より少し後ろに置きたいのですが上手くいきません。
ターゲットが移動したらカメラの角度は変わるが、座標は変わっていない状態です。
わかる方がいらっしゃったらご教授願います。
>>らんらんる〜さん
どうもはじめまして!
ターゲットと自機を結んだ直線ベクトルを単位ベクトル化して自機の座標に加算したものを視点の座標にしてみるというのはどうでしょう?
はじめまして.D3Dでの画像保存のことで質問させていただきます.
D3DXSaveSurfaceToFileでHDR保存した画像は
0〜255に量子化する前の反射モデルの計算値が素直に入っていると考えていいのでしょうか?

ちなみに,レンダリングターゲットのバッファのフォーマットを
D3DFMT_A2R10G10B10と D3DFMT_A8R8G8B8で変えてレンダリングしても
HDRの値はかわってないようでした.
また,D3DFMT_A16B16G16R16の場合は初期化ではじかれてしまいます.
設定でまだよくわかってない点が多々あるかとあせあせ(飛び散る汗)

確かめ方が思いつかず質問させていただきました.
よろしくお願いします.
HDRは全く判らない(使ったことがない)ので、申し訳ありませんが、
http://msdn.microsoft.com/ja-jp/library/bb172878%28VS.85%29.aspx
>HDR 形式。赤、緑、青の 8 ビットの仮数と 8 ビットの共有指数を持つ、RGBE 32 ビット カラーとして
>各ピクセルをエンコードします。
と、ありますので、実数ではなく丸めた値になってると思います。
(量子化の計算後の値と輝度値に当たるのでしょうか?)

>D3DFMT_A2R10G10B10と D3DFMT_A8R8G8B8で変えてレンダリングしても
>HDRの値はかわってないようでした.
これは描画時のRGB値の範囲を変えるだけなので関係ないのでは?
※HDRを使用した時のSurfaceの挙動はよく解りませんが、8bitでも10bitでもどちらにしろ、実数には程遠いので違う気がします。

気になったので調べてみました。
DirectXのHDRは
http://lucille.sourceforge.net/blog/archives/000019.html
の「Radiance .hdr」だと思いますので、ファイルフォーマットとしては丸め計算は行われていない (計算通りの実数値に限りなく近い) ようですね。と言うかそう言うフォーマットなのですね。
完全に間違ってました。
ですので、後はMicrosoftと各ボードメーカーのデバイスドライバを信用するしかないと思います。

そして、D3DFMT_A8R8G8B8の方は、
赤 = R * pow(2,E-128)
緑 = G * pow(2,E-128)
青 = B * pow(2,E-128)
の計算を行う時 (ビデオボードから出力される値) が、各成分が何bitなのか?を表しているだけですので、ファイル出力には影響しないと思います。

0〜255に量子化とおっしゃっているのが、D3DFMT_A8R8G8B8に当たると思います。

ゲームではまだまだ未来の技術 (今はいかにそれらしく見せるか) だと思って、全然勉強してませんでしたので、見当外れでしたら申し訳ありませんでした。
>>鬼才さん
ありがとうございました。
その考え方でプログラミングさせていただきます。
度々すみません。
直線ベクトルの求め方と単位ベクトル化の仕方がわかりません…
どなたか教えていただけると有り難いです。
本当にすみません…
>>けいすけ@マロニーさん
ありがとうございます!
ライトとサーフェスの法線のなす角度の値を
単純に反射率とライト強度を1にすれば
求めることができるのかなぁとおもったのですが,
持てる値がバッファのbit数で制限されると困るなぁと思い・・・
安易にHDRが使えるか??と思ったのですが...
うーん・・・

検証用のプログラムを作ればいい話なんですけどねあせあせ(飛び散る汗)
もう少し調べてみようと思います!

ありがとうございました!!!
>>203 さゆりさん
>ライトとサーフェスの法線のなす角度の値を
>単純に反射率とライト強度を1にすれば
どれもHDR・サーフェスのどちらにも入っていない情報な気がしますが・・・

ベクトルの角度を求めるだけなら普通に計算したほうが速くて判りやすいと思いますが・・・


>>202 らんらんる〜さん
>直線ベクトルの求め方
引き算です。
自機vec - ターゲットvec = ターゲットから自機への直線vec
です。

>単位ベクトル化
D3DXVECTOR3 vec;
D3DXVec3Normalize (&vec, &D3DXVECTOR3(x, y, z));
です。

ですが、>>197で書かれているようなこと(GvsG)は、実現できないと思います。
カメラと自機とターゲットが同一の軸上に並んでしまうと、ターゲットが自機で蝕になってしまいます。

T       P >
↑      ↑ ↑
|      | カメラ
|      自機
ターゲット

Pで隠れてTが見えませんよね?
GvsGは、ちゃんと見ていないですが、カメラ位置は自機とターゲットが重ならない位置になっていると思いますよ。
>>けいすけ@マロニーさん
ありがとうございました。
もう少し実現できるように自分でも調べてみます。
また質問させていただくかもしれませんがその時は気が向いたらでいいんでよろしくお願いします。
>>206 しぇとりんさん
自分で作ったことがない上に環境も無いので試せませんが、
http://www.shader.jp/xoops/html/masafumi/directx9/3dtips/d3d15.htm
に、詳しく書かれています。

エラーの内容やソースが無いので、これ以上は判らないですが・・・
※極端な話、ウィンドウハンドルが間違ってる可能性もありますし。
>>208 しぇとりんさん
ご要望には答えられそうにありません。
申し訳ないです。

DirectX5(3かも^^;)の頃、DirectDrawでは作った覚えがあるのですが、今とはCreateDeviceからして全く違いますので判らないです。
中途半端な知識で申し訳ないです。
前回は皆様ありがとうございました。おかげでできました。
で、また質問なんですが…すみませんf^_^;

メッシュ同士の当たり判定を実装したいんですがイマイチわかりません。
OBB同士の当たり判定とも言うんでしょうか?調べてみたんですが…すみません。
四角形のメッシュ同士で判定ができればいいんですが…
ご存知の方どうかよろしくお願いします。
こんにちは。

DirectX9.0cでHLSLを使用しパーティクルをポイントスプライトとして描画して煙を表現しようと試行錯誤しています。

今のところパーティクルを加算合成して描画しているのですが、煙っぽく見えないので、アルファを落としていって徐々に消えていくエフェクトにしようとしています。
しかし、なかなか思った通りに動きません。

そこで何か参考になる書籍やサイトはありませんでしょうか?

自分でも結構いろいろな書籍を見たりやサイトを回ったりしたのですが、ビルボードを使用した方法しか見つけられなかったもので・・・
>>らんらんる〜さん
まず、メッシュ同士での当たり判定は本当に必要なのでしょうか?

前回のプログラムを続きで作られているとしたら、オブジェクトの中心からの球の当たり判定で充分な気がします。
オブジェクトごとに複数の当たり判定があるならば、その分の球の当たり判定を増やせば良いですし。
→例えば頭・体・両腕・両足に球で当たり判定をつける

OBBで人型のロボ全身に当たり判定をつけるのは、余程のシミュレーションで無いと必要にはならないと思います。
→もしもこちらをお作りになっているならば余計なお世話すみません。

まずはご一考くださいませ。



>>しぇとりんさん
出来てよかったです^^
出来たら知識共用の意味でどのように解決なさったのか知りたいです。
今後はしぇとりんさんのような環境のゲームも増えてくると思いますし^^


>>ゆぅなさん
自分も色々探してみたのですが、昔有った有用なページがほとんど無くなってて愕然としました。
必要になったら使おうとブックマークしていたページは全部無くなってました・・・
もちろん自分もプログラマぶるシェーダーの知識はまだまだ(と言うかやる気が無い)ですのでもうしわけありません。
>>けいすけ@マロニーさん
ご意見ありがとうございます。
とりあえずバウンディングボックスでの当たり判定を実装しました。
球の方はバウンディングボックスより処理が重いと思ったのでこっちを一応選びました。ロボットの頭から爪先までの大きさの四角形のメッシュを別に用意して判定しています。それともやはり球で判定した方がいいんでしょうか?
>>らんらんる〜さん
バウンディングボックスは回転しないことが前提ならばいいのですが、例えば45度回転している場合に、見た目と当たり判定に差が出ないでしょうか?(AABB)
当たり判定も回転させて考えられてるなら問題ないですが。(OBB)

球での当たり判定は、距離の計算だけですので計算の重さで比べると、回転計算の必要なバウンディングボックスよりは速いんじゃないかな?と思います。
CPUによるので一概には言えませんが、球、もしくは円柱で当たり判定自体で処理落ちで困ったことは無いです。

ゲームでは見た目よりも当たり判定の方が小さいほうが遊ぶ人は喜ぶ?傾向にあると思いますので、OBBは必要無いと思ってます。
衝突判定は必要に応じて球とか、バウンディングボックス、その他を
使い分けるのがベストですね。今回の場合は球の判定が良いと思いました。

ただ、真面目に平方根つかってしまうと計算が重たくなるので
距離の2乗同士で比較するのが一般的です。
>>けいすけ@マロニーさん
>>テルさん
ご回答ありがとうございます。
マップ上に四角形の障害物を配置する予定なのでそちらをAABBに、自機を球で判定したいと思います。
ありがとうございました。
>上の動画で(特に炎とか)攻撃のエフェクトを使用してる部分なんですが、
>こういったものは光の加減とかもやはり、全て自前で作ったテクスチャ使っ
>てるのでしょうか?
仰っているのはおそらく光ってるように見える効果ですよね?
(違ったらスルーしてください。)

合成には様々な種類があるのですが、加算合成と言う方法で明るいテクスチャを重ねていくと光っているように見えるのです。
ですので、炎などのアニメーションパターンを複数枚ずらして重ねて表示すると、光っているような(魔法や炎ですね)エフェクトが得られます。
アニメーションパターンの作成の問題でしたら、このトピに有ったかもしれませんが、爆発パターンを自動生成するフリーウェアがいくつかありますので、それで代用されてはいかがでしょうか?

ムービーは全て見たわけではないので申し訳ないですが、いわゆる光源を使用したオブジェクトへの照り返しは無いようです。
もしも照り返しが必要ならば、処理は一気に重くなりますが、エフェクトの中心に点光源を一瞬置くという方法になると思います。
(マルチテクスチャの技法もあったように思いますが、実装したことが無いため他の方にお任せします。)
こんにちは、質問させてください。

DirectX9.0でHLSLを利用してパーティクルを描画していますが、どうしてもPointScaleEnableとPointScale_A,PointScale_B,PointScale_Cが有効に機能してくれません。

どう設定しても、PSIZEに指定されたサイズで画面に描画されてしまいます。
他に何か設定しなくてはいけない箇所などありますでしょうか?
アドバイスをお願いします。
>221
たぶんSetRenderStateメソッドの設定のことでしょうか?
HLSLで記述できるのならば、そっちのほうはわからないですが・・・
PSIZEが何を指していて何を目標としているのかもわかりかねますが・・・

公式によると
http://msdn.microsoft.com/ja-jp/library/cc324335.aspx

D3DRS_POINTSCALEENABLE
ポイント プリミティブに対するサイズの計算を制御する BOOL 値。TRUE を設定すると、ポイント サイズをカメラ空間の値として解釈し、距離関数および視錐台によってビューポートの y 軸のスケールに合わせて調整し、最終的なスクリーン空間のポイント サイズを計算する。FALSE を設定すると、ポイントサイズはスクリーン空間の値と解釈されて、そのまま使われる。デフォルト値は FALSE である。

D3DRS_POINTSCALE_A
ポイント プリミティブに対する距離ベースのサイズの減衰を制御する float 値。D3DRS_POINTSCALEENABLE が TRUE の場合にのみ有効である。デフォルト値は 1.0f である。この値の範囲は、0.0f 以上である。IDirect3DDevice9::SetRenderState メソッドは DWORD 値を使うため、次のコードに示すように、アプリケーションでは値を格納した変数をキャストしなければならない。
pDevice9->SetRenderState(D3DRS_POINTSCALE_A, *((DWORD*)&PointScaleA));

D3DRS_POINTSCALE_B
ポイント プリミティブに対する距離ベースのサイズの減衰を制御する float 値。D3DRS_POINTSCALEENABLE が TRUE の場合にのみ有効である。デフォルト値は 0.0f である。この値の範囲は、0.0f 以上である。IDirect3DDevice9::SetRenderState メソッドは DWORD 値を使うため、次のコードに示すように、アプリケーションでは値を格納した変数をキャストしなければならない。
pDevice9->SetRenderState(D3DRS_POINTSCALE_B, *((DWORD*)&PointScaleB));

D3DRS_POINTSCALE_C
ポイント プリミティブに対する距離ベースのサイズの減衰を制御する float 値。D3DRS_POINTSCALEENABLE が TRUE の場合にのみ有効である。デフォルト値は 0.0f である。この値の範囲は、0.0f 以上である。IDirect3DDevice9::SetRenderState メソッドは DWORD 値を使うため、次のコードに示すように、アプリケーションでは値を格納した変数をキャストしなければならない。
pDevice9->SetRenderState(D3DRS_POINTSCALE_C, *((DWORD*)&PointScaleC));

考えられそうなのは・・・
D3DRS_POINTSCALEENABLE
の設定がTRUE,FALSEで計算が違うことPOINTSCALEの設定が
DWORD型(整数型)にキャストしなければならないということでしょうか・・・?
> アブナイお兄ちゃんさん
返信が遅れてしまってすみません。
HLSL側からそれらの設定はできるはずなのですが、どうしても視点からの距離でサイズが変わらないんです。
何かの設定を忘れてるのでしょうかね…。
ありがとうございました。
IDirect3DDevice9::CreateVertexBuffer()関数で確保した、IDirect3DVertexBuffer9**変数において
Lock()関数を使用すると頂点バッファ メモリへのポインタを取得する事ができると思うのですが、
このアドレスに対し書き込みをする際に、下記の様に構造体を丸コピするのはアライメント等の影響があり読込みに支障のでる危険性があるのでしょうか?
ご存知の方いらっしゃればご教授をよろしくお願いいたします。

//------------------------------------------------
struct VERTEX
{
 D3DXVECTOR3 vec3Pos;
 D3DXVECTOR3 vec3Normal;
};

LPDIRECT3DVERTEXBUFFER9 pVB;
m_dev->CreateVertexBuffer( sizeof( VERTEX ) * unSize, 0, ORIGINAL_FVF, D3DPOOL_DEFAULT, &pVB );

pVB->Lock( 0, 0, &pVB , D3DLOCK_DISCARD );

std::vector< VERTEX > vecVer( unSize );
for( int i=0; i < unSize; i++ )
{
 vecVer[i].vec3Pos = vec3Pos;
 vecVer[i].vec3Normal = vec3Normal;
}

std::copy( vecVer.begin(), vecVer.end(), reinterpret_cast<VERTEX *>( pVBData ) );

pVB->Unlock();
//------------------------------------------------
はじめまして。
今画像の短形コピーを作ろうとして困っています。
IDirect3DTexture9* pTexture; このテクスチャーデータが1024*1024
で読み込んだとして、
新しく
IDirect3DTexture9* pNewTexture;
とつくったものに、切り取りした部分を保持させるようなことはできないのでしょうか?
バックバッファにテクスチャーを書いて
そのバックバッファを書き込むという方法を今考えているんですが。
質問です。DirectXランタイムのインストールというのが、ビデオ関係のソフトだったり、DirectX SDKだったり、OS付属のCDに入ってたりするのですが、
どれが一番新しいのかわかりません。こういうのはその都度入れていって大丈夫なのでしょうか?PCは何も考えずに上書きしていくだけでしょうか?
あまり警告を見た記憶もないですが。
よろしくお願いします。
>>[229]
ゲームをプレイするんですかね。
ゲームを制作するんですかね。

前者ならこれをダウンロード
http://www.microsoft.com/ja-jp/download/details.aspx?id=35

後者ならこれをダウンロード
http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=6812

上書きしてもかまいません。
>>[230]
ありがとうございます。
PCに入れるビデオ関係のソフトでDirectXランタイムのインストールを促されるので、
複数のソフトだとどっちが新しいかよくわからず質問しました。多分、DirectX9なら、それの最新ランタイムを入れればいいんでしょうね。

開発のSDKも使いますが、June2010はVisual Studio2005をサポートしないみたいですね・・・。開発SDKはもうちょい古いSDKでないと、バンドルされていないライブラリとかあるので・・・。
質問「シェーダーのglobal変数にうまく値が渡せない?」

DirectX10でシェーダーのglobal変数は、
D3DXMATRIX→matrix
D3DXVECTOR4→float4
D3DXVECTOR3→float3
D3DXVECTOR2→float2
float→float
のように値を渡せると思いうのですが、matrixとfloat4は正常に値を渡せるのですが、それ以外はうまく値を渡せなかったり、エラーが出たりします。

今のところ仕方なく、
float4 g_value;
g_value.xなどとfloat4のxにだけ値を入れて値を渡せばうまくいっています。

でも、どうやれば、float、float2、float3でも正常に値を渡せるでしょうか?
もしかしてDirectX11なら大丈夫とか?

ログインすると、残り205件のコメントが見れるよ

mixiユーザー
ログインしてコメントしよう!

DirectX SDK 更新情報

DirectX SDKのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング