算法3d轨道摄像机控制鼠标拖动

ris*_*nrp 1 3d geometry pseudocode game-physics

请帮忙,

我找不到关于这个不是语言特定而不依赖于库的详细解释,因为我想出于某种原因自己控制数学.

如何使用鼠标创建轨道摄像机控制,例如Google SketchUp中的中间单击拖动?

*在Google SketchUp中,通过拖动鼠标,摄像机可以在平面中心(总是0,0,0)上绕圆形轨道移动虚拟物体.它可以水平,垂直,甚至对角地沿所有方向运行.

kol*_*nda 5

最简单的解决方案是存储X/Y方向角度并最终存储缩放级别.然后,您在某些MouseMove事件中修改角度,并使用它们来计算摄像机方向.

这是鼠标拖动的一些伪代码:

OnMouseDown:
    mouseDragging = true;
    lastX = mouse.x;
    lastY = mouse.y;

OnMouseUp:
    mouseDragging = false;

OnMouseMove:
    if( mouseDragging ) {
        angleX += (mouse.x-lastX) * speedX;
        angleY += (mouse.y-lastY) * speedY;
    }

OnMouseWheel:
    zoom += mouse.wheelDelta;
Run Code Online (Sandbox Code Playgroud)

根据这些数据,您可以构建相机位置.我不知道你在用什么,但这是OpenGL的一个例子:

glLoadIdentity();
glTranslatef( 0.0f, 0.0f, -zoom );
glRotatef( angleY, 1.0f, 0.0f, 0.0f );
glRotatef( angleX, 0.0f, 1.0f, 0.0f );
glTranslatef( -orbitCenterX, -orbitCenterY, -orbitCenterZ );
Run Code Online (Sandbox Code Playgroud)