有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JOGL移动相机

我在JOGL中构建了一些东西,我希望通过使用键盘或鼠标使相机移动,这其实并不重要,只要相机可以围绕对象平移,并可能进行放大和缩小。如果使用键盘/鼠标很困难,那么我也不介意在应用程序中使用一些按钮,例如上、下、左、右箭头,以及用于缩放的加减按钮,但基本上是最简单的。 我正在制作一种类似乐高的东西,但事实证明,如果不能移动相机,这是非常困难的


共 (1) 个答案

  1. # 1 楼答案

    要移动“相机”,需要在渲染函数的开头应用glTranslate3f()变换。如果你的相机的位置是

    cameraPos = <cx, cy, cz>
    

    那你应该用

    glTranslate3f( -cx, -cy, -cz );
    

    这将抵消该向量绘制的所有内容

    为了使用键盘实现这一点,您需要使用KeyListener实现并定义接口指定的函数

    public void keyPressed( KeyEvent ke ){ // put something intelligent here... }
    public void keyReleased( KeyEvent ke ){}
    public void keyTyped( KeyEvent ke ){}
    

    确保将这个实现类注册为GLJPanel(或任何您正在使用的)的KeyListener。然后,在按键的内部(…)功能,检查按下哪个键,并增加相机的相应坐标

    如果你真的想让鼠标让你四处看看,你可以通过创建一个MouseMotionListener并注册它来做类似的事情。根据您所寻找的鼠标行为类型,需要进行的OpenGL转换可能会有所不同。如果你只是想要一些简单的东西,让你可以环顾四周,你可能可以通过跟踪鼠标在x和y方向的运动,并允许它修改一些偏移角度。沿x方向移动鼠标会绕y轴旋转。y方向的运动绕x轴旋转。作为OpenGL调用,与glTranslate3f()一样,可以使用glRotatef()绕每个轴旋转

    glRotatef( angleX, 1, 0, 0 ); // to rotate about the x-axis
    glRotatef( angleY, 0, 1, 0 ); // to rotate about the y-axis
    

    同样,这只是一个快速简单的解决方案。它不会很漂亮,但会管用的。如果你想实现一些更有趣的东西,你可以研究计算任意轴旋转矩阵

    http://inside.mines.edu/~gmurray/ArbitraryAxisRotation/
    (关于这个话题的众多资源之一)