首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JOGL -移动相机

JOGL -移动相机
EN

Stack Overflow用户
提问于 2013-02-14 00:48:57
回答 2查看 6.3K关注 0票数 0

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-14 04:24:46

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

代码语言:javascript
复制
cameraPos = <cx, cy, cz>

那么你应该使用

代码语言:javascript
复制
glTranslate3f( -cx, -cy, -cz );

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

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

代码语言:javascript
复制
public void keyPressed( KeyEvent ke ){ // put something intelligent here... }
public void keyReleased( KeyEvent ke ){}
public void keyTyped( KeyEvent ke ){}

确保将这个实现类作为KeyListener注册到您的GLJPanel (或您正在使用的任何东西)中。然后,在keyPressed中(...)功能,检查哪个键被按下,并增加相机的适当坐标。

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

代码语言:javascript
复制
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/

(关于这个主题的许多资源之一)

票数 7
EN

Stack Overflow用户

发布于 2013-11-30 01:40:05

你使用一个名为"gluLookAt( x的位置,y的位置,z的位置,相机看的位置x,相机看的地方y,相机看的地方z,0,1,0);“

至于"0,1,0“部分,让它们保持原样,就像你只是平移和放大一样。这只会影响相机的倾斜。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14858623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档