glm中vec4平移操作无效(x、y无变化),缩放旋转功能正常
问题分析:GLM平移矩阵对向量无影响的原因
核心问题是矩阵与向量的乘法顺序搞反了。
GLM采用列主序矩阵存储,遵循图形学标准的矩阵左乘向量规则(即矩阵 * 向量)。你当前代码里写的是向量 * 矩阵,这会被GLM解释为行向量右乘矩阵——而平移矩阵的平移分量存储在第四列,行向量乘该矩阵时,平移项无法作用到x、y分量上,所以结果和平移前完全一致。
修正后的代码如下:
mat4 c = mat4(1.f); c = translate(c, vec3(10, 10, 0)); vec4 dv1 = c * vec4(line1s[i].x, line1s[i].y, 1.f, 1.f);
修改后,矩阵的平移分量会正确作用到向量的x、y分量上,得到你预期的平移结果。需要注意:GLM的translate函数生成的平移矩阵,平移量默认放在第四列位置,只有矩阵左乘列向量时,才能正确触发平移变换。
内容的提问来源于stack exchange,提问作者PlayMek
相关产品推荐
相关产品推荐

