如何在DirectX 10中向HLSL效果发送信息?

时间:2010-05-29 09:33:55

标签: directx hlsl lighting directx-10 specular

我想将视图矢量发送到ID3D10Effect变量以计算镜面反射光。如何从正在运行的DirectX程序向HLSL发送矢量甚至标量值?我想做像

这样的事情
render() {
   //do transformations
   D3DXMatrix view = camera->getViewMatrix();
   basicEffect.setVariable(viewVector, view);
   //render stuff
}

2 个答案:

答案 0 :(得分:2)

使用GetVariableByName获取HLSL中指定变量的接口。在返回的接口上调用AsVector(注意此处的文档是错误的。它返回一个指针!)以获取向量变量接口,然​​后调用SetFloatVector

答案 1 :(得分: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);