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 回答