【问题标题】:Accessing members of a matrix in HLSL在 HLSL 中访问矩阵的成员
【发布时间】:2023-05-21 21:19:01
【问题描述】:

我对使用 Direct3D 和 HLSL 有点陌生,我想知道以下问题:如何在一个着色器函数中访问矩阵的成员。在我看来,它应该是点运算符和之后的一些东西,就像向量一样。但是,我不确定如果我要使用它,我会在点之后放下什么。访问第 2 行第 3 列的成员会是类似 .m12 的东西吗?

【问题讨论】:

    标签: matrix direct3d hlsl


    【解决方案1】:

    假设你的矩阵是

    float4x4 myTransform;
    

    您可以访问基于 1 的成员(例如 m11 到 m44),例如:

    float member = myTransform._11;
    float member = myTransform._44;
    

    或从零开始:

    float member = myTransform._m00;
    float member = myTransform._m33;
    

    【讨论】:

      【解决方案2】:

      添加到 catflier 的答案。您还可以像在 C++ 中期望的那样使用数组下标语法(从零开始)来获取矩阵成员。

      float4x4 myMatrix;
      float x = myMatrix[0][1];
      

      【讨论】: