【发布时间】:2023-02-17 15:53:11
【问题描述】:
在片段着色器中实现一些向量和矩阵计算失败后,我尝试在顶点着色器中测试基本矩阵计算,以确保万无一失。
这按预期工作:
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));
...
我确定我遗漏了一些重要的东西,但无法弄清楚或在网上找到类似的东西。
【问题讨论】:
-
为什么你认为这是错误的?您正在做的事情也可以简化为
o.vertex = UnityObjectToClipPos(float4(v.vertex.xyz, v.vertex.w)); -
单位矩阵应该无关紧要,但我很确定矩阵应该是 mul() 调用中的第一个参数。否则向量会被转置矩阵变换。
-
@Daniel - 我认为它应该是一样的,但第二个代码 sn-p 不起作用,我想知道为什么。
-
@Louis Ingenthron - 文档说在这种情况下向量被转置。使用身份矩阵我认为这无关紧要
标签: unity3d matrix shader hlsl