_worldMatrix矩阵信息中每个项分别是表示什么值?

在看自定义渲染文档中有一段代码,因为不明白 a b c d 四个参数分别表示什么意思?推测 tx ty 是位移。
所以,也就不明白 data[offset].x = al + cb + tx;有知道的可否解释下,我都找了好多资料,也没解释这个的

`
// 准备顶点数据
updateVerts (comp) {

let matrix = node._worldMatrix,
a = matrix.m00, b = matrix.m01, c = matrix.m04, d = matrix.m05,
tx = matrix.m12, ty = matrix.m13;
// 左下
data[offset].x = al + cb + tx;

}


建立了一个微信群,需要添加微信回复cocos

有没有清楚啊?小白的我,这资料太难找了

坐等回答

a,b,c,d里面包含了旋转跟缩放的信息,
例如缩放 x = sqrt(a * a + c * c), y = sqrt(b * b + d * d)

tx ty 就是你说的位移

旋转信息的提取比较麻烦,a = cos(θ) b =.sin(θ)c = -sin(θ) d = cos(θ)

1赞

我也看不懂这个,前辈可以说明一下这是做什么用的吗?

在您的提示下,查了些资料,针对缩放采用的的线性公式感觉是 y=kx+b,你这个开方的感觉还是没懂,大神可否在提示点?

有没有再来解释一波的,给我们这些小白科普下

好像是包含了变换信息:位移,旋转,缩放,这三个也是矩阵,通过运算得到了_worldMatrix这一个矩阵,这一个矩阵就包含了前面三个矩阵的所有信息(神奇的矩阵)

这个一个4*4的矩阵,对角线前三个表示xyz轴缩放,第四列的上面三行表示坐标。具体的可以看OpenGL三维矩阵变换

感觉回答都好模糊,难道是我欠缺太多基础知识了。

如果你只是想懂得如何提取矩阵里的信息的话,只需要我上面说的就够了。
如果你是想懂原理,为何矩阵旋转,缩放,平移要放在矩阵的那些位置。
你需要把《线性代数》看一遍,你就自然懂了。
这玩意没捷径,国内的教程基本都不提原理的,都只是告诉你如何提取,但不告诉你为何这样能提取。
要搞懂原理,线性代数一定要学。

1赞

举个简单的例子,平移变换。
例如坐标点(x,y)经过平移矩阵
[a , b, c]
[d, e, f] (下文用M表示)
变换后得到距离原点(tx, ty) 远的新坐标(x2, y2),
即 (x2, y2) = M* (x, y),根据矩阵的乘法计算可得:
x2 = ax + by + c
y2 = dx + ey + f
又因为(x2, y2)是原点平移(tx, ty)后得到的,又能得到等式:
x2 = x + tx
y2 = y + ty
两个等式相消可得,
a = 1, b = 0, c = tx,
d = 0, e = 1, f = ty
则矩阵M可表示为
[1, 0, tx]
[0, 1, ty]

上面就是平移矩阵的推导过程,同理你可以推理缩放,旋转矩阵,当然旋转会麻烦得多,因为涉及到三角函数,涉及到绕轴旋转

3赞