在Qt中使用QMatrix4x4
实现以原点为基准的缩放和旋转操作时,需注意矩阵变换的顺序(从右到左应用,即后调用的变换先作用)。以下是具体实现方法:
scale(x, y, z)
函数实现,参数分别表示x、y、z轴的缩放因子。rotate(angle, x, y, z)
函数实现,参数为旋转角度(弧度)和旋转轴向量(如绕Z轴旋转时参数为(0, 0, 1)
)。若需先旋转后缩放(常见于保持缩放中心为原点),代码示例如下:
QMatrix4x4 matrix;
matrix.rotate(angle, 0, 0, 1); // 绕Z轴旋转angle弧度
matrix.scale(scaleX, scaleY, 1); // 沿X/Y轴缩放
若需先缩放后旋转(缩放以旋转后的坐标系为准),则调整顺序:
matrix.scale(scaleX, scaleY, 1);
matrix.rotate(angle, 0, 0, 1);
rotate
和scale
均以原点(0, 0, 0)为中心进行变换。若需绕其他点旋转,需先用translate
将坐标系平移到目标点,旋转后再平移回去。QMatrix4x4 matrix;
matrix.translate(translationX, translationY, translationZ); // 平移(可选)
matrix.rotate(rotationAngle, rotationX, rotationY, rotationZ); // 旋转
matrix.scale(scaleX, scaleY, scaleZ); // 缩放
此矩阵可应用于顶点着色器或图形渲染中,实现平移、旋转、缩放的组合变换。
通过合理控制rotate
和scale
的调用顺序,并明确变换目标(如原点),可精确实现所需的几何变换。具体顺序需根据实际需求调整,例如:
领取专属 10元无门槛券
手把手带您无忧上云