gpt4 book ai didi

java - JOGL - 移动相机

转载 作者:行者123 更新时间:2023-12-01 07:10:45 24 4
gpt4 key购买 nike

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

最佳答案

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

cameraPos = <cx, cy, cz>

那么你应该使用

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

这将抵消该 vector 绘制的所有内容。

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

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

确保将此实现类注册为 GLJPanel(或您正在使用的任何内容)的 KeyListener。然后,在 keyPressed(...) 函数内,检查按下的是哪个键并增加相机的适当坐标。

如果您想要变得非常奇特并允许鼠标​​让您环顾四周,您可以通过创建 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/
(有关此主题的众多资源之一)

关于java - JOGL - 移动相机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14858623/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com