如何在OpenGL中实现轨迹球?
在深入了解转换之后,是时候为我的应用实现跟踪球了。我知道我必须创建一个从起点到单击鼠标的向量,然后再从起点到释放鼠标的另一个向量。 我的问题是,我是否必须将(x,y)像素坐标转换为世界坐标,还是应该只在图像空间中做所有事情(考虑图像空间是以像素为单位测量场景的2D投影)? 编辑 Richie Sams的答案是一个很好的答案。但是,我认为我采用的方法略有不同,如果我错了或者我误会了一些东西,请纠正我。 在我的应用程序有一个SimplePerspectiveCamera接收类position相机中,position of the target我们正在寻找的up载体中,fovy,aspectRatio,near和far距离。 通过这些,我构建了视图和投影矩阵。现在,如果要放大/缩小,请更新视野并更新投影矩阵。如果要平移,请移动摄像机的位置,并按鼠标产生的增量查看。 最后,对于旋转,我可以使用角度轴变换或四元数。为此,我将像素坐标保存在按下鼠标的位置,然后当鼠标移动时,我还将保存像素坐标。 对于每一对COORDS的我可以计算Z值给出的公式为球状,即,SQRT(1-X ^ 2-Y ^ 2),然后计算与从去矢量target到PointMousePressed和从target到PointMouseMoved,做叉积获取旋转轴并使用任何方法计算新的相机位置。 但是,我最大的疑问是(x,y,z)值是以像素坐标给出的,在计算我使用的矢量时,target这是世界坐标中的一个点。坐标系的这种混合不影响我尝试做的旋转结果吗?