unity3d float3x3乘法在hlsl中未按预期工作

4nkexdtk  于 2023-02-19  发布在  其他
关注(0)|答案(1)|浏览(123)

在片段着色器中实现一些向量和矩阵计算失败后,我尝试在顶点着色器中测试基本的矩阵计算,只是为了确定。
这符合预期:

uniform float4x4 _Identity4x4 = { 1.0, 0.0, 0.0, 0.0,
                                  0.0, 1.0, 0.0, 0.0,
                                  0.0, 0.0, 1.0, 0.0,
                                  0.0, 0.0, 0.0, 1.0 };
v2f vert (appdata v)
{
   v2f o;
   o.vertex = UnityObjectToClipPos( mul( v.vertex, _Identity4x4 ));
   ...

但这造成了一场浩劫:

uniform float3x3 _Identity3x3 = { 1.0, 0.0, 0.0,
                                    0.0, 1.0, 0.0,
                                    0.0, 0.0, 1.0 };
v2f vert (appdata v)
{
    v2f o;
    o.vertex = UnityObjectToClipPos( float4( mul( v.vertex.xyz, _Identity3x3 ), v.vertex.w));
    ...

我肯定我错过了一些重要的东西,但不能弄清楚或找到一些类似的在线。

iecba09b

iecba09b1#

所以矩阵必须是静态的。不知道为什么4x4工作而3x3不工作...一个基本的解释可以在here中找到。

相关问题