我想将我的视图向量发送到 ID3D10Effect 变量以计算镜面反射光照。如何从正在运行的 DirectX 程序向 HLSL 发送向量甚至标量值?我想做类似的事情
render() {
//do transformations
D3DXMatrix view = camera->getViewMatrix();
basicEffect.setVariable(viewVector, view);
//render stuff
}
我想将我的视图向量发送到 ID3D10Effect 变量以计算镜面反射光照。如何从正在运行的 DirectX 程序向 HLSL 发送向量甚至标量值?我想做类似的事情
render() {
//do transformations
D3DXMatrix view = camera->getViewMatrix();
basicEffect.setVariable(viewVector, view);
//render stuff
}
使用GetVariableByName获取 HLSL 中命名变量的接口。在返回的接口上调用AsVector(注意这里的文档是错误的。它返回一个指针!)以获取向量变量接口,然后调用SetFloatVector。
在你的效果中,你应该有类似的东西:
cbuffer {
float4x4 viewMatrix;
}
然后在你的渲染函数中,在绑定效果之前:
D3DXMatrix view = camera->getViewMatrix();
basicEffect->GetVariableByName("viewMatrix")->AsMatrix()->SetMatrix((float*) &view);
与大多数效果属性句柄一样,我建议“缓存”指向变量的指针。将矩阵变量存储在渲染循环之外的另一个指针中,例如:
ID3D10EffectMatrixVariable* vmViewMatrix = basicEffect->GetVariableByName("viewMatrix")->AsMatrix();
然后设置变量变成:
vmViewMatrix->SetMatrix((float*) &view);