Matrix 内置矩阵Object2World,UNITY矩阵MVP。。。行专业还是列专业?

Matrix 内置矩阵Object2World,UNITY矩阵MVP。。。行专业还是列专业?,matrix,unity3d,shader,Matrix,Unity3d,Shader,我找不到内置4x4矩阵(如Object2World或UNITYMATRIX_MVP)的明确定义,无法确定它们是如何构造的(行主矩阵还是列主矩阵),这让我对它们应该放在mul()函数中的位置感到困惑 在这样的情况下 o.pos = mul(UNITY_MATRIX_MVP, v.vertex); float3 viewDirection = normalize( float3( float4( _WorldSpaceCameraPos, 1.0) - mul(_Object2World, v.ve

我找不到内置4x4矩阵(如Object2World或UNITYMATRIX_MVP)的明确定义,无法确定它们是如何构造的(行主矩阵还是列主矩阵),这让我对它们应该放在mul()函数中的位置感到困惑

在这样的情况下

o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
float3 viewDirection = normalize( float3( float4( _WorldSpaceCameraPos, 1.0) - mul(_Object2World, v.vertex) ) );
UNITYMATRIXMVP和_Object2World矩阵是mul()函数的第一个参数

因此,根据矩阵向量左乘右乘的规则,UnityMatrix xmvp和_Object2World应该是行主的

第二个参数v.vertex应该是4x1向量,所以float4在这里会自动被视为4x1而不是1x4向量吗

在下列情况下

float3 normalDirection = normalize( mul( float4(v.normal, 0.0), _World2Object ).xyz );
_world2对象用作第二个参数

那么World2Object、UNITYMATRIX_MVP和其他内置矩阵在内部是什么样子的呢?它们是主要的吗?比如:

X1,X2,X3,X4

Y1,Y2,Y3,Y4

Z1,Z2,Z3,Z4

W1,W2,W3,W4

还是主修专栏?比如:

X1,Y1,Z1,W1

X2,Y2,Z2,W2

X3,Y3,Z3,W3

X4,Y4,Z4,W4

我现在所能做的就是通过反复试验来猜测。 这些内置矩阵是行主矩阵还是列主矩阵?有没有关于它的明确文件

非常感谢~~

统一矩阵是。即,必须将矩阵乘以向量,才能将矩阵提供的仿射变换应用于给定向量

我理解你对向量积和矩阵积的混淆。事实上,矩阵乘积在数学上是公平的,但逐向量(和反向)矩阵乘法则不然。当你们将向量乘以矩阵(或者矩阵乘以向量)时,在数学上它仍然是矩阵的乘法

记住你可以乘(nxm)矩阵和(M×p)矩阵?就这样。您可以将(1x4)乘以(4x4)(4x4)乘以(4x1)(但不能将(4x1)乘以(4x4)。因此,当你将向量和矩阵相乘时,你必须考虑向量作为一个矩阵——一个单行矩阵(1x4)或一个单列矩阵(4x1),并且必须将它们乘以<强>正确的顺序< /强>。这就是为什么当你们使用乘法后的M.V时,你们必须让矩阵按列的主次排列,才能得到有意义的结果