问题标签 [glulookat]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
8490 浏览

opengl - 使用 gluLookAt() 的 OpenGL FPS 相机

所以,我正在尝试创建一个 FPS 风格的相机来探索我的场景,它似乎工作正常。目前无法改变摄像机的俯仰角。我正在尝试创建一个函数,允许我将相机设置为一些预定义的视点,但是在使用 setPosition() 函数将相机设置为新视点后尝试旋转相机时,我遇到的不是位置而是方向的跳跃第一次按下旋转按钮时。

这是我的相机类实现。

以下是我的特殊按键回调函数,省略了相机移动以外的功能。

然后显示回调函数使用 gluLookAt 具有以下代码:

我不明白为什么我会遇到这个问题。我相信这与设置相机和用于旋转它的数学之间的相互作用有关。谁能看到如何防止这种方向跳跃?

我在一个键盘回调函数中设置相机位置,代码如下:

0 投票
1 回答
1379 浏览

opengl-es - 在 2D 游戏 OpenGL 中更改相机位置

我是在 OpenGL 中制作游戏的初学者。我画了一张地图(这是世界,玩家可以移动),现在我想做,那个相机跟随玩家(玩家在屏幕中央)。我做了这样的事情:

其中 this.x 和 this.y 是玩家的坐标。不幸的是它不起作用:(什么都没有发生。这是 2d 游戏,所以没有任何透视等。

0 投票
1 回答
1140 浏览

opengl - 关于使用 OpenGL 模型视图矩阵和矩阵变换的说明

我已经能够使用模型视图矩阵和函数glTranslatef()gluLookAt()转换对象或整个场景的透视图,但是当我尝试同时执行这两种操作时,我遇到了问题。

似乎不管我使用的参数如何,gluLookAt()我绘制的对象都是从相同的角度显示的。我已经尝试在其他不同用途中调用函数,glPushMatrix()并且glPopMatrix基于我在其他线程中读到的内容,但没有运气。这就是我现在所拥有的。物体应该移动,但我只能让它们从一个角度出现。

例如,由于它们应该在 xy 平面上移动,并且逆时针旋转,我认为更改z_0-30会使它们看起来是顺时针移动,但似乎没有任何区别。在它之前有一长串常量,我将省略。最终目标是为我们的太阳系制作一个简单的模型。

如果有人看到我遗漏的东西,我真的很感激对一些额外阅读的解释或指导,这将有助于我解决问题。

0 投票
3 回答
7283 浏览

opengl - OpenGL - 使用 gluLookAt 围绕立方体旋转会非常快速地旋转

我正在尝试使用 gluLookAt 围绕以原点为中心的立方体移动,而不是直接在对象上执行 R*T 转换。起初,我不确定如何解决这个问题。然后我意识到(在圆坐标中实现了一半的解决方案之后)我应该尝试使用球坐标系表示。我能够编写一些代码来做到这一点,但我(相机的“眼睛”)在立方体周围旋转得非常快。另外,我注意到我也向立方体移动了一点,而不是保持一个恒定的半径。当我使用 Rotate*Translate 方法时,它以更合适的速度旋转相同的距离。

我的旋转方法是使用球坐标,但我不确定这是否正确。我根据维基百科页面上的图表计算了这两个角度。我计算我所在的当前点的大小(distX,distY,distZ)。我们最初在 XY 平面上看负 Z 平面)。我还得到了两个角度,一个指定绕 x 轴的旋转角度,一个指定绕 y 轴的旋转角度。这五个值是根据我的鼠标点击方式计算得出的。

我根据一些三角函数计算 theta 和 phi,然后最后计算新位置。这些公式可以在之前的链接中找到。最后一步是将其插入 gluLookAt。同样,在运行这个程序时,我可以围绕立方体旋转,但它非常快并且还可以平移相机。我究竟做错了什么?

我的代码列在下面,以供您参考。引用“y”和“up”的部分是我尝试计算绕 Z 轴的旋转。我可以描述旋转的最佳方式是,如果你看着一个物体,想象你自己是相机,然后左右倾斜你的头。我没有将它包含在我对 gluLookAt 的调用中,因为我也无法让它工作。

编辑:它现在以看起来正确的速度旋转,但它并没有完全旋转。我的意思是,在旋转时,“眼睛”会以一定角度朝向立方体移动,但随后会向后旋转,从而撤消旋转。但这会循环,因此眼睛所走的路径看起来类似于弯曲的无穷大符号。

0 投票
1 回答
5301 浏览

java - OpenGL 3 (LWJGL) LookAt 矩阵混淆

我正在使用 LWJGL 学习 OpenGL 3。我试图实现等效于gluLookAt(),虽然它有效,但我对为什么有些困惑。

我承认只是从网络上的各种来源复制此代码,但经过大量研究,我认为了解其背后的数学原理,并且我了解 LWJGL 在做什么。

但是,“正确”gluLookAt代码在我的应用程序中表现不正确,因为相机似乎转向了错误的方向。我只能通过转置正交向量forward,sideup(希望我使用正确的术语!) 来让我的代码工作,我很确定这是错误的......

我不认为我应该做转置,但没有它就行不通。我放transpose()是因为我懒得重新输入所有矩阵单元格的位置顺便说一句!

我的理解是lookAt矩阵的形式应该如下

而且我认为 LWJGLMatrix4f类将矩阵单元表示为m<col><row>. 该translate(Vector3f)方法执行以下操作

所以我对我搞砸了这部分内容感到非常困惑。是我对 lookAt 矩阵、列/行专业性(是一个词吗?!)的理解Matrix4f,还是其他什么?我的其余代码是否刚刚损坏?它真的正确吗,我只是担心太多了吗?我只是个白痴吗?

谢谢。

0 投票
2 回答
150 浏览

c++ - gluLookAt() 对最小参数大小有限制吗?

我有一个 OpenGL 程序,当我调用它时它可以工作:

gluLookAt(0.1,0.1,0.1, 0,0,0, 0,0.1,0);

...但不是当我这样称呼时:

gluLookAt(0.01,0.01,0.01, 0,0,0, 0,0.01,0);

(在后一种情况下,会出现空白屏幕。)

gluLookAt 是否有最小/最大浮点参数大小?

绘制是围绕原点完成的,半径约为 10-6。

0 投票
1 回答
2346 浏览

opengl - gluLookAt 和 MODELVIEW MATRIX

我觉得我了解模型视图矩阵的用法和gluLookAt. 也就是说,通过声明gluLookAt(ex,ey,ez,lx,ly,lz,ux,uy,uz),可以轻松设置一种直接查看某个点的方式。

我的问题是 - 由于gluLookAt后乘当前矩阵,假设您在调用之前加载标识gluLookAt,并且当前矩阵模式是模型视图,如果您绘制立方体会发生什么?

所以是这样的:

在世界坐标中渲染的立方体在哪里?出于某种原因,在这种情况下,它是在世界原点渲染的,您可以在视口中看到它 - 但为什么呢?不应该gluLookAt用视图旋转和平移修改模型视图矩阵吗?立方体不应该用里面的相机来渲染吗?

0 投票
1 回答
5815 浏览

opengl - OpenGL 3D 相机 gluLookAt

我正在尝试使用 gluLookAt 方法设置 3D 相机。所以我有一个 10x10x10 的立方体,现在我想在那个立方体内移动相机。我有类似的东西:

现在我正在前进/后退:

现在我向左/向右旋转:

这样一切正常,但现在我想在按下 SHIFT 按钮时向上/向下旋转。所以我有这样的事情:

实际上发生了一些奇怪的事情。相机一直在上下跳动,并缓慢地向前移动。另外,我想补充一点,当我向上看并向前移动时,相机实际上会到达它看起来的地方。所以基本上情况是这样的:我是一个被困在一个 10x10x10 立方体中的幽灵,可以走到任何我想去的地方。我想移动到右上角?我只是去那里。所以......任何想法我应该改变/添加什么?

0 投票
1 回答
638 浏览

opengl - 使用 glulookat 加载 ModelViewMatrix

我定义了一个矩阵,其中包含类似于 GL_MODELVIEW 矩阵的相机位置和方向:

GL_MODELVIEW 矩阵

(m3 = 0; m7 = 0; m11 = 0; m15 = 1)

我正在尝试将此数据加载到 ModelViewMatrix 中。我正在考虑这两种可能性:

  • 使用函数 glLoadTransposeMatrixf():

如果我使用此解决方案,我将获得正确的位置和方向。问题是我需要使用第二种解决方案,因为我正在修改代码上的 Left/Up/Forward/Translation 向量以修改视图。

  • 使用函数 gluLookAt():

我的问题是我获得的 GL_MODELVIEW 矩阵与其他情况不同。具体来说,平移向量是错误的,但左/上/前向量是正确的。

我真的很困惑。有人可以解释这两个选项之间是否存在差异以及我做错了什么吗?

获得的结果:

我正在使用这样的矩阵 M:

使用第一种方法,我获得了正确的 GL_MODELVIEW 矩阵:

但是使用第二种方法,我得到了下一个 GL_MODELVIEW 矩阵:

注意 tx'!=tx, ty'!=ty, tz'!=tz。这非常令人困惑……

0 投票
1 回答
344 浏览

java - 如何在立方体内设置相机?

我有每个侧锁颜色不同的立方体 -

在这种状态下——我得到的数字是——

在此处输入图像描述

指位于立方体前面的摄像头。

由于我试图将相机设置在立方体内,因此我将 z 轴值更改glu.gluLookAt为 -glu.gluLookAt(0,0, 50, 0, 0, 0, 0, 1, 0);并且知道我得到的是 -

在此处输入图像描述

如果我改为 -glu.gluLookAt(0,0, 0, 0, 0, 0, 0, 1, 0);我会整个屏幕变黑。

因此,为了将相机设置在立方体内,我必须进行更改 - 意味着例外的图形在右、左上和下将是不同的颜色。