如何使用 Glut 使相机飞过 OpenGL 中的对象?
Posted
技术标签:
【中文标题】如何使用 Glut 使相机飞过 OpenGL 中的对象?【英文标题】:How can I make the camera fly through objects in OpenGL using Glut? 【发布时间】:2011-02-16 05:07:41 【问题描述】:首先,我所有的代码都可以在这里找到,它在 3 个文件中。
flythrough.cpp、support.cpp、support.h
好的...所以如果你运行它,它似乎可以工作,但有些事情真的让我很烦!
相机在一个奇怪的位置开始,我尝试改变各种变量,但似乎没有效果。
目前最大的问题是移动相机。在这个时间点......相机将左右移动,但不会向前或向后移动。当我尝试向前移动时,就像像素在做正确的事情一样,当我向前移动时,对象最终会消失,就像我已经移过它一样,但是当我靠近时,对象本身并没有“看起来更大”。向后移动也一样。
如果你能想出什么,请告诉我。
我想补充一点,这段代码大部分来自我的教科书。由我自己修改。
谢谢!
【问题讨论】:
没看代码,但不会是正交相机吧? 我对 OpenGL 完全陌生,恐怕我不明白你的意思。 我的意思正是丹尼尔所说的。我很高兴你让他接受了答案! :) 【参考方案1】:它是一个正交相机,因此您不能沿 Z 轴移动。你需要改变你的相机类型来做你想做的事情。
参考:第 33 行,flythrough.cpp
glOrtho(-2.0 * 64 / 48.0, 2.0 * 64 / 48.0, -2.0, 2.0, 100, 100.0);
通常,只需取消注释此行,然后编写以下内容:
gluPerspective(60.0, 640.0 / 480.0, 0.1, 1000.0);
这会将透视矩阵乘以当前加载的单位矩阵 (LoadIdentity())。
参考:http://www.opengl.org/sdk/docs/man/xhtml/gluPerspective.xml
【讨论】:
感谢您为我指明正确的方向。你知道应该改成什么吗?我还在学习语法和结构。 谢谢!我会试一试的!编辑:现在,我还注意到在 support.cpp 中,在 Camera :: setProjectionMatrix 中,我确实使用了 gluPerspective。 好的,添加你所说的确实有效,我比以前取得了更大的进步。它似乎仍然没有按预期运行。似乎一切都围绕一个点或奇怪的东西移动。感谢您的帮助! 是的,该函数包含您想要的,而不是您的 glOrtho 行(注释/删除它),放入 Camera::setProjectionMatrix()。但是您发布的粘贴中的那些行目前已被注释掉。 定义围绕一个点移动?您的代码包含多个 glRotated(...) 函数。我建议您从更简单的东西开始,一次构建一个示例,而不是一次构建所有示例,并试图弄清楚为什么您的世界可能会旋转:)【参考方案2】:在没有尝试计算轴的情况下,您是否尝试过沿 Z 轴而不是 Y 轴前后移动相机。也许您的深度轴设置为 Z 而不是 Y。
【讨论】:
如果您指的是:“myCamera.slide(0, -manipulator, 0);”是的,我尝试过“myCamera.slide(0, 0, -manipulator);”,但它会向上移动相机,而不是向前或向后移动。以上是关于如何使用 Glut 使相机飞过 OpenGL 中的对象?的主要内容,如果未能解决你的问题,请参考以下文章