我想将视图矢量发送到ID3D10Effect变量以计算镜面反射光。如何从正在运行的DirectX程序向HLSL发送矢量甚至标量值?我想做像
这样的事情render() {
//do transformations
D3DXMatrix view = camera->getViewMatrix();
basicEffect.setVariable(viewVector, view);
//render stuff
}
答案 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);