问题标签 [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 回答
222 浏览

android - 移动后glulookat“重置”(使用android)

这是我的问题:我正在用 android 制作台球游戏,我想让相机围绕桌子的中心自由旋转。问题是,当我停止移动时,glulookat 似乎会自行重置,因为我只能一遍又一遍地看到相同的东西。如果有人知道如何解决这个问题或另一种方法来做我想做的事情,我将不胜感激

这是我的渲染器类:

这是我的活动类中的 onTouch 方法:

0 投票
2 回答
983 浏览

android - Android OpenGL 适用于模拟器但不适用于手机

我有以下渲染器代码:

如果我使用它的当前代码,onDrawFrame它非常适合模拟器,但在电话上SurfaceView是空白的,我什么也得不到。我在一篇文章中发现我应该使用 GLU.gluLookAt(); 而不是 gl.glLoadIdentity(); 如果我这样做(onDrawFrame 中注释的代码)它可以工作,我会得到背景,但我的纹理没有加载,无论是在手机上还是在模拟器上。我该怎么做才能加载它们并使应用程序正常工作?

EDIT1:我GLU.gluPerspective(gl, 45.0f, (float)w / (float)h, 0.1f, 100.0f);从函数中注释了该行onDrawFrame,现在它显示了我的纹理,但程序强制在几秒钟后关闭。

我得到下一个 LogCat 错误:

任何想法这可能意味着什么?

0 投票
1 回答
924 浏览

opengl - 为什么这个正方形不在屏幕中间?

我写了一些代码,期望在屏幕中间看到一个正方形,而不是正方形看起来更高,在屏幕顶部附近的某些纵横比中,稍微向左。

这是我屏幕上绘制的内容

使用另一个纵横比:

另一个例子

这是我的代码的相关部分:

0,0,0 不应该是屏幕的中间吗?gluLookAt 不应该将我指定的任何坐标放在屏幕的中心吗?

0 投票
0 回答
407 浏览

opengl - glu.LookAt 用于具有任意垂直轴方向的倾斜顶置摄像头

[2012 年 9 月 23 日编辑] 从自上而下的角度想象 FPS 控制(扫射、转弯)。现在想象一下,当玩家转动时,整个屏幕都会旋转,所以他们总是面向显示器的顶部。现在想象一下,相对于他们的方向,投射这个的“相机”总是在玩家上方和后方 10 英尺处。这意味着相机以 45 度角俯视风景,随着玩家的转动而旋转。我试图掌握为此所需的代码而失去理智,这就是我迄今为止所得到的结果好坏参半:

以下是我对 Update_Camera 过程所做工作的总结:

1) 暂时将相机移动到其身后十英尺(它松散地跟随玩家)。

2) 计算三个点。一个是玩家的位置,或相机目标。第二个和第三个是移动相机的位置,一个围绕玩家稍微顺时针旋转,另一个稍微逆时针旋转。

3) 使用步骤 2 中的三个点计算“向上”向量。

4) 使用 glu.LookAt 正确定位和定向“相机”。

起初这似乎效果很好,但是当我降低相机或增加它与玩家的距离时,事情开始扭曲。相机似乎放大了,风景的垂直比例似乎增加了。平行于景观渲染的 Sprite 四边形也仍然被渲染,就好像相机在它们的正上方一样,当相机降低时它们应该以增加的视角渲染。我会错过什么?

0 投票
1 回答
15555 浏览

opengl - gluPerspective、glViewport、gluLookAt 以及 GL_PROJECTION 和 GL_MODELVIEW 矩阵

原始问题

我想使用“gluPerspective”、“glViewport”和“gluLookAt”来操作我的相机和屏幕。

我将哪些功能应用于哪种矩阵模式?我应该/必须以什么顺序使用它们?

例如,我正在尝试像这样设置我的屏幕和相机:(但它不起作用!)

我四处寻找在线文档,我了解这些功能,只是不知道它们应该去哪里以及以什么顺序!

一段时间以后...

现在是几个月后,我正在添加一个快速编辑以显示我用来使用 OpenGL 渲染事物的系统。这是为了帮助将来看到这个问题的其他人。

我主要使用两种方法。

方法一:

此方法将所有内容组合在一起。

这将重新创建用于在窗口内部的整个区域进行渲染的视口。使用 sfml,您可以执行诸如 window.width() 或 window.height() 之类的操作,或类似的操作,具体取决于您使用的窗口工具包(glut、glfw、sdl 等)...

您需要从“glOrtho”、“gluPerspective”和“glFrustrum”三个选项中选择一个。还有'gluOrtho2D',但要小心使用!(我更喜欢自己用“glOrtho”指定近平面和远平面。)您还需要用函数的参数替换“...”。

方法二:

第二种方法与上面相同,但将第一步移到一个单独的函数中。然后您必须检测窗口调整大小事件并调用此函数。使用 glut,您可以指定回调。使用 SFML,您可以在调整窗口大小时检测到事件。我忘记了 SDL 是如何工作的,但它是相似的。我还没有了解 glfw 是如何工作的。

希望这会帮助你。

一些 OpenGL 新手(可能我曾一度包括在内)尝试在 PROJECTION 矩阵上指定相机平移。不要这样做- 我认为它会弄乱照明和其他可能的东西。

0 投票
1 回答
1576 浏览

opengl - gluLookAt 向量和 FPS 风格的相机

我试图通过更新三个向量来实现 FPS 风格的相机:EYE、DIR、UP。这些向量与 gluLookAt 使用的向量相同(因为 gluLookAt 由相机的位置、它所看的方向和向上向量指定)。

我已经实现了左右和上下扫射运动,但是我很难理解在保持静止的同时让相机环顾四周的数学原理。在这种情况下,EYE 向量保持不变,而我必须更新 DIR 和 UP。

下面是我尝试过的代码,但它似乎无法正常工作。有什么建议么?

rotate 方法创建一个旋转矩阵,该矩阵围绕轴旋转一定度数。

--

编辑:我将它编辑为这个(也将“dir”切换为“center”),但它仍然没有用。当我尝试向左/向右旋转时,没有任何反应。当我尝试向上/向下旋转时,对象消失了。

0 投票
3 回答
12311 浏览

c++ - gluLookAt 是如何工作的?

据我了解,

相当于:

但是当我打印出ModelView矩阵时,调用glTranslatef()似乎无法正常工作。这是代码片段:

无论我对向量使用什么值:eye或者
300, 0, 0平移 向量是相同的,这没有任何意义,因为代码的顺序是倒序的,所以应该先运行,然后是 2 次旋转。另外,旋转矩阵完全独立于平移列(在 ModelView 矩阵中),那么什么会导致这种奇怪的行为呢?这是眼睛矢量的输出是
0, 300, 0
0, 0, 300
glTranslatef(0.0f, 300.0f, 0.0f)

我希望T专栏是(0, -300, 0)!那么有人可以帮我解释一下吗?

gluLookAt来自http://www.mesa3d.org的实现

0 投票
1 回答
1737 浏览

opengl - 沿预定义路径移动对象

我和几个朋友正在尝试编写一个小的动画片段。所以,我们决定一个好的但仍然有点简单的项目是制作某种恐怖屋之旅,其中“玩家”乘坐手推车穿过废弃的矿井。

由于制作圆和直线有点无聊,我们决定做一个“稍微”更复杂的动作。我们推断我们可以导入一个带有简单顶点条带的 .obj 文件,作为移动的路径。当然,这个对象不会被绘制在屏幕上。因此,我创建了一个 Trayectory 类来处理此路径的导入。这是我用来导入路径的代码:

但是,我有两个小问题:

  1. 由于我使用的是顶点条,我无法为它们分配法线。有没有办法计算与 gluLookAt() 一起使用的法线?
  2. 当我渲染对象时,我将它转换为我的顶点列表中的一个顶点,并将它的外观分配给该行中的下一个顶点。然而,这带来了我的 .obj 中的顶点不一定有序的问题。有没有办法订购它们?我推断我可以计算出最接近每个顶点的顶点并进行类似冒泡排序的排序。但它可以更容易吗?
0 投票
1 回答
175 浏览

opengl - gluLookAt 故障

我画了一个由 2 个切线球体组成的对象,它本身与墙相切(下图)。使用 gluLookAt(),我将相机设置在 x 点(第一个球体中心),看着 y 点(第二个球体中心),所以实际上我沿着墙壁看到。但是,我可以在墙内看到一点(一些']')。

有谁知道是什么问题?

观察:如果我将球体从墙壁移开一点,故障就会消失,但是我不明白为什么当球体非常靠近墙壁时它会出现。

0 投票
1 回答
1549 浏览

opengl - 在没有 gluLookAt 的情况下旋转相机而不是场景

我创建了一个网格来代表行走的地面。

我已将箭头键链接起来以旋转/移动视图:

z_trans 是 z 中的平移,y_angle 是 glRotatef() 中 y 轴的旋转。

我可以让我的“角色”向前走,左右转,然后继续朝着他所面对的方向直走。唯一的问题是,当我离开原点 (0,0,0) 时,旋转发生在原点周围,而不是相机周围。因此,如果我距离原点 100 个单位,我的角色基本上遵循 100 半径圆的路径。

在不使用 gluLookAt 的情况下,有没有人知道如何实现这个?完全被难住了,在这里坐了两个小时试图弄清楚。

完整代码: