在OpenGL中平移和移动相机的正确方法?

Posted

技术标签:

【中文标题】在OpenGL中平移和移动相机的正确方法?【英文标题】:Proper way to pan and move camera in OpenGL? 【发布时间】:2010-09-03 00:51:10 【问题描述】:

现在我在渲染所有内容之前通过 glRotating 进行平移,并且通过 gltranslating 移动相机。我觉得这是错误的,因为我本质上是在移动场景,而不是相机。移动相机的正确方法是什么?

谢谢

【问题讨论】:

嗨 Milo,如果您对平移功能有任何了解,现在意味着。请为 android 中 OpenGL Es2.0 中的 Pan Functionality 提供任何示例代码。我看到了更多链接,但是,我无法清楚地了解该 pan 功能.. @sje397 链接已损坏。 【参考方案1】:

实际上“在相机周围移动场景”是 OpenGL 中的正确方法。

这是因为 OpenGL 将视图和模型矩阵组合到模型视图矩阵中。 (查看here了解更多详情)

很明显,lookat 函数(如上所述)是移动(虚拟)相机的一种简单方法,但我发现它不适用于 OpenGL3。

我建议使用优秀的glm library 来设置 OpenGL3 的转换矩阵。

亲切的问候, 弗洛里安

【讨论】:

嗨,弗洛里安,您能否建议任何有关 Android 中 OpenGL Es2.0 中的平移功能的示例代码。我看到了更多链接,但是,我无法清楚地了解该平移功能.. 【参考方案2】:

移动场景和相机本质上是一回事。一个是另一个的否定。 实现它的通常方法是有一个具有绝对坐标和方向的相机类,然后你就放

glTranslate(-camera)
glRotate(-camera)

在显示函数的顶部。

【讨论】:

嗨 Takoi,我也尝试过这个平移,虽然触摸事件。但是,它不适合我。你能给出这个平移功能的一些示例代码吗?【参考方案3】:

gluLookAt 是您移动相机的方式。

【讨论】:

@Milo:你也可以用 gluLookAt 平移它。 这是 Python 绑定文档的链接。 Here are C API docs. @Craig McQueen:感谢链接。 您好,该链接(页面未找到错误)未打开..请您提供一些示例程序,用于在 android 的 opengles2.0 中进行此平移功能..

以上是关于在OpenGL中平移和移动相机的正确方法?的主要内容,如果未能解决你的问题,请参考以下文章

如何在unity3D中平滑移动相机?

OpenGL 使用 Q 和 E 字符移动相机 GLFW 库

使用 GLM 正确旋转 Open GL 相机

OpenGL:相机和对象

OpenGL相机的相对旋转

需要帮助在 OpenGL 中移动相机