0

鏡面照明を計算するために、ビュー ベクトルを ID3D10Effect 変数に送信したいと考えています。実行中の DirectX プログラムから HLSL にベクトルまたはスカラー値を送信するにはどうすればよいですか? 私は何かをしたい

render() {
   //do transformations
   D3DXMatrix view = camera->getViewMatrix();
   basicEffect.setVariable(viewVector, view);
   //render stuff
}
4

2 に答える 2

2

GetVariableByNameを使用して、HLSL 内の名前付き変数へのインターフェイスを取得します。返されたインターフェイスでAsVectorを呼び出し(この時点でのドキュメントは間違っていることに注意してください。ポインターを返します!)、ベクトル変数インターフェイスを取得してから、SetFloatVectorを呼び出します。

于 2010-06-01T21:44:16.533 に答える
1

効果には、次のようなものが必要です。

cbuffer {
    float4x4 viewMatrix;
}

次に、レンダー関数で、エフェクトをバインドする前に:

D3DXMatrix view = camera->getViewMatrix();
basicEffect->GetVariableByName("viewMatrix")->AsMatrix()->SetMatrix((float*) &view);

ほとんどのエフェクト アトリビュート ハンドルと同様に、変数へのポインタを「キャッシュ」することをお勧めします。次のように、レンダリング ループの外側にある別のポインターに行列変数を格納します。

ID3D10EffectMatrixVariable* vmViewMatrix = basicEffect->GetVariableByName("viewMatrix")->AsMatrix();

そして、変数を設定すると、次のようになります。

vmViewMatrix->SetMatrix((float*) &view);
于 2010-06-02T15:47:09.060 に答える