gpt4 book ai didi

matrix - 有人可以解释 glMatrix 的 mat4.translate 函数吗?

转载 作者:行者123 更新时间:2023-12-04 21:19:52 25 4
gpt4 key购买 nike

有谁知道为什么 glmatrix ( 1.x ) 像这样定义 mat4.translate :

/**
* Translates a matrix by the given vector
*
* @param {mat4} mat mat4 to translate
* @param {vec3} vec vec3 specifying the translation
* @param {mat4} [dest] mat4 receiving operation result. If not specified result is written to mat
*
* @returns {mat4} dest if specified, mat otherwise
*/
mat4.translate = function (mat, vec, dest) {
var x = vec[0], y = vec[1], z = vec[2],
a00, a01, a02, a03,
a10, a11, a12, a13,
a20, a21, a22, a23;

if (!dest || mat === dest) {
mat[12] = mat[0] * x + mat[4] * y + mat[8] * z + mat[12];
mat[13] = mat[1] * x + mat[5] * y + mat[9] * z + mat[13];
mat[14] = mat[2] * x + mat[6] * y + mat[10] * z + mat[14];
mat[15] = mat[3] * x + mat[7] * y + mat[11] * z + mat[15];
return mat;
}

a00 = mat[0]; a01 = mat[1]; a02 = mat[2]; a03 = mat[3];
a10 = mat[4]; a11 = mat[5]; a12 = mat[6]; a13 = mat[7];
a20 = mat[8]; a21 = mat[9]; a22 = mat[10]; a23 = mat[11];

dest[0] = a00; dest[1] = a01; dest[2] = a02; dest[3] = a03;
dest[4] = a10; dest[5] = a11; dest[6] = a12; dest[7] = a13;
dest[8] = a20; dest[9] = a21; dest[10] = a22; dest[11] = a23;

dest[12] = a00 * x + a10 * y + a20 * z + mat[12];
dest[13] = a01 * x + a11 * y + a21 * z + mat[13];
dest[14] = a02 * x + a12 * y + a22 * z + mat[14];
dest[15] = a03 * x + a13 * y + a23 * z + mat[15];
return dest;
};

看起来向量值乘以(缩放)矩阵的方向向量( dir, left, up )。但我不明白为什么。还有为什么分配 mat[15] 。我认为它应该总是 1 ...

我大部分时间都在使用这个,我很高兴:
mat4.translate_alt = function (mat, vec, factor) {
factor = factor || 1;
mat[12] += vec[0]*factor;
mat[13] += vec[1]*factor;
mat[14] += vec[2]*factor;
}

我什么时候应该使用 mat4.translate ,什么时候我的 mat4.translate_alt 足够了?

最佳答案

mat4.translate使用给定向量 (vec3) 平移矩阵,这与乘以平移矩阵相同。

另一种看待它的方式是说 mat4.translate = mat4.multiply(someMatrix, mat4.create_translate_matrix(someVec3)) (伪代码)。

关于matrix - 有人可以解释 glMatrix 的 mat4.translate 函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14313934/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com