【问题标题】:How do I send information to an HLSL effect in DirectX 10?如何将信息发送到 DirectX 10 中的 HLSL 效果?
【发布时间】:2010-06-02 23:47:09
【问题描述】:

我想将我的视图向量发送到一个 ID3D10Effect 变量,以计算镜面光照。如何从正在运行的 DirectX 程序向 HLSL 发送向量甚至标量值?我想做类似的事情

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

【问题讨论】:

    标签: directx hlsl lighting directx-10 specular


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      在你的效果中,你应该有类似的东西:

      cbuffer {
          float4x4 viewMatrix;
      }
      

      然后在你的渲染函数中,在绑定效果之前:

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

      与大多数效果属性句柄一样,我建议“缓存”指向变量的指针。将矩阵变量存储在渲染循环之外的另一个指针中,例如:

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

      然后设置变量变成:

      vmViewMatrix->SetMatrix((float*) &view);
      

      【讨论】:

        猜你喜欢
        • 2012-08-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多