我有一个案例,我需要一种方法来将 OpenGL 中的模型矩阵旋转到绝对值。那里的大多数 rotate() 方法将旋转添加到当前矩阵与新旋转相乘的当前矩阵。我需要在不保留旧旋转的情况下将模型矩阵旋转到某个值。我目前所做的是将当前矩阵破坏为身份。然后根据我之前设置的比例变量从头开始计算它的比例。然后将它与从四元数获得的旋转矩阵相乘,并最终再次对其进行平移。
在我看来,这样的任务计算太多了。是否有更短的方法来重置矩阵旋转,同时保持其比例和平移部分完整?这是我当前的方法(Java):
public void rotateTo3( float xr,float yr,float zr) {
Quaternion xrotQ= Glm.angleAxis( (xr),Vec3.X_AXIS);
Quaternion yrotQ= Glm.angleAxis( (yr),Vec3.Y_AXIS);
Quaternion zrotQ= Glm.angleAxis( (zr),Vec3.Z_AXIS);
xrotQ= Glm.normalize(xrotQ);
yrotQ= Glm.normalize(yrotQ);
zrotQ= Glm.normalize(zrotQ);
Quaternion acumQuat=new Quaternion();
acumQuat= Quaternion.mul(xrotQ,yrotQ);
acumQuat= Quaternion.mul(acumQuat,zrotQ);
Mat4 rotMat=new Mat4(1);
rotMat=Glm.matCast(acumQuat);
_model = new Mat4(1);
scaleTo(_scaleX, _scaleY, _scaleZ);//reconstruct scale
_model = Glm.translate(_model, new Vec3(_pivot.x, _pivot.y, 0));
_model=rotMat.mul(_model); ///add new rotation
_model = Glm.translate(_model, new Vec3(-_pivot.x, -_pivot.y, 0));
translateTo(_x, _y, _z);//reconstruct translation
}