函数glm::translate
有2个参数(矩阵 M ,矢量 V )。我是否正确地承担以下事项:
答案 0 :(得分:1)
不完全是概念上的两件事:
它创建了一个4x4同质平移矩阵 T ,它具有通过向量 V 抵消每个点的效果:
/ 1 0 0 Vx \
T = | 0 1 0 Vy |
| 0 0 1 Vz |
\ 0 0 1 1 /
所以每个点 p =(px,py,pz,1) p' = T * p < / strong>将导致 p' = p + V :
/ 1 0 0 Vx \ / px \ / px * 1 + 1 * Vx \
| 0 1 0 Vy | * | py | = | py * 1 + 1 * Vy |
| 0 0 1 Vz | | pz | | pz * 1 + 1 * Vz |
\ 0 0 1 1 / \ 1 / \ 1 /
将 T 后乘以 M 并返回结果: M' = M * T
这会导致将 M'应用于任何点将首先应用 T ,anfd然后应用 M 中的任何内容:< / p>
p' = M' * p = M * T * p = M *( T * p )
注意,如果知道其中一个操作数是转换矩阵,则可以简化一般矩阵乘法方案。在后mulitplying T 的情况下,这与首先将 V 转换为 M 具有相同的效果,并且将结果向量添加到最后一栏 M 。
/ m00 m01 m02 m03 \ / 1 0 0 Vx \ / m00 m01 m02 (m03 + m00 * Vx + m01 * Vy + m02 * Vz) \
| m10 m11 m12 m13 | * | 0 1 0 Vy | = | m10 m11 m12 (m13 + m10 * Vx + m11 * Vy + m12 * Vz) |
| m20 m21 m22 m23 | | 0 0 1 Vz | | m20 m21 m22 (m23 + m20 * Vx + m21 * Vy + m22 * Vz) |
\ m30 m31 m32 m33 / \ 0 0 1 1 / \ m30 m31 m32 (m33 + m30 * Vx + m31 * Vy + m32 * Vz) /
所以不,它不返回单位矩阵,其中翻译部分被 M * V 替换,它返回 M'其中 M * V 已添加到翻译部分。
答案 1 :(得分:1)
请参阅glm 0.9.8 API Documentation for glm::translate
:
<强>
glm::translate
强>GLM_FUNC_DECL tmat4x4<T, P> glm::translate( tmat4x4< T, P > const & m, tvec3< T, P > const & v )
构建从3个组件的矢量创建的翻译4 * 4矩阵。
参数:
m
输入矩阵乘以此转换矩阵。v
翻译矢量的坐标。
这意味着变换矩阵由向量v
glm::vec3 v;
glm::mat4 t(
1.0f, 0.0f, 0.0f, 0.0f,
0.0f, 1.0f, 0.0f, 0.0f,
0.0f, 0.0f, 1.0f, 0.0f,
v.x, v.y, v.z, 1.0f );
,结果是输入矩阵m
和翻译矩阵t
的乘法运算:
glm::mat4 m;
glm::mat4 result = m * t;