OpenGL 鼠标拖动 3D 旋转
void CSixthView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if(mouserightdown)
{
SetCamPos(2, -(point.y - mouseprevpoint.y) , TRUE,TRUE);
}
else if(mouseleftdown)
{
SetSceneRot(0, (point.y - mouseprevpoint.y) , TRUE,TRUE);
SetSceneRot(1, (point.x - mouseprevpoint.x) , TRUE,TRUE);
scenePos[0] += point.x - mouseprevpoint.x;
scenePos[1] += point.y - mouseprevpoint.y;
}
mouseprevpoint.x = point.x;
mouseprevpoint.y = point.y;
CView::OnMouseMove(nFlags, point);
}
void CSixthView::SetSceneRot(int axis , int value , bool increment, bool apply)
{
/*if(increment)
sceneRot[axis] += (sceneRot[axis] >=360) ? (-360 + value/2): value/2;
else
sceneRot[axis] = (sceneRot[axis] >=360) ? (-360 + value/2): value/2;*/
sceneRot[axis] += value/3.6;
if (sceneRot[axis]>=360)
{
sceneRot[axis] -= 360;
}
if (sceneRot[axis]<0)
{
sceneRot[axis] += 360;
}
RenderScene();
}
旋转部分:
glRotatef( sceneRot[0], 1.0F, 0.0F, 0.0F );
glRotatef( sceneRot[1], 0.0F, 1.0F, 0.0F );
glRotatef( sceneRot[2], 0.0F, 0.0F, 1.0F );
这个常见的例子,但是glRotaef每用一次,坐标轴就变动了,比如X轴屏幕水平向右,Y轴屏幕竖直向上,Z垂直屏幕向上,上下拖动鼠标使其绕X轴转动90度时,Y轴朝屏幕里面,那么鼠标左右移动时则是沿Z轴旋转,但是上面的函数无法实现,是不是得用归一球模拟?利用四元数才能实现?求大虾指教,小弟初学OpenGL。