ris*_*nrp 1 3d geometry pseudocode game-physics
请帮忙,
我找不到关于这个不是语言特定而不依赖于库的详细解释,因为我想出于某种原因自己控制数学.
如何使用鼠标创建轨道摄像机控制,例如Google SketchUp中的中间单击拖动?
*在Google SketchUp中,通过拖动鼠标,摄像机可以在平面中心(不总是0,0,0)上绕圆形轨道移动虚拟物体.它可以水平,垂直,甚至对角地沿所有方向运行.
最简单的解决方案是存储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)