【问题标题】:OpenGL GLUT PerspectiveOpenGL GLUT 透视图
【发布时间】:2011-12-22 22:38:34
【问题描述】:

我正在构建建筑物和景观的比例模型。我正在使用 openGL 和 GLUT 以及 glupperspective 函数。我知道函数的最后两个参数定义了 z 剪切路径,并且只能是正数。好吧,我的东西被渲染为负 z 值。好吧,它被剪掉了,这是有道理的。有没有人建议如何阻止它用负 z 值剪裁我的东西?我对 gluperspective 的调用如下。

gluPerspective(50.0, (double)w / (double)h, 1.0, 300.0);

【问题讨论】:

  • 只需移动顶点的坐标以确保它们在正确的范围内。
  • @stardt 我想过这样做,但是当我旋转它时它不会仍然旋转到负范围,因为我围绕 y 轴旋转?这是我对旋转函数的调用。 glRotatef(_angle, 0.0f, 1.0f, 0.0f);
  • 您可以通过变换点或移动相机来旋转。 opengl.org/sdk/docs/man/xhtml/glMatrixMode.xml 的 glMatrixMode() 文档可能会有所帮助。
  • 链接失效

标签: opengl glut


【解决方案1】:

zbuffer 和 3d 空间中的 z 值是有区别的。想象一下,你有一个相机,并把它举到你的眼前。 1.0 是相机的屏幕(即物体可以靠近您的距离),而 300.0 是相机可以看到的最远距离。这些定义了 zbuffer 的“范围”(设置剪辑)。

如果你身后有一个物体怎么办?那么z-VALUE(不是z-buffer)是负数。你怎么看?只需转身(有效地将相机指向新方向。z 缓冲区保持不变(即,不可见小于 1.0 或大于 300.0 的对象),但具有负 z-VALUE 的对象不可见。

因此,使用 gluPerspective,您可以设置透视矩阵(即相机的视野和范围)。然后要查看您身后的物体,您需要设置您的视图矩阵(即相机的方向)。

编辑:因此,要查看具有负 z-VALUE 的东西(不转身),请将您的相机向后移动(即更改您的视图矩阵,使其位置更靠后)。

【讨论】:

  • 好的,我认为这正是我想要做的。我想更改视图矩阵,使其位于更靠后的位置。我正在谷歌搜索试图弄清楚但如何手动设置视图矩阵?这是用gluperspective完成的吗?再次感谢您的帮助!
  • 您可以使用 gluLookAt 来设置视图矩阵。它需要相机的位置(你的眼睛位置)、观察位置(你用相机盯着的点和一个向上的向量(天空的方向,通常是 (0, 1, 0)) .
  • “那么 z-VALUE(不是 z-buffer)是负数。”这是不正确的。眼睛空间(由gluPerspectiveglFrustum 生成的透视矩阵定义)+Z 位于观察者后面。 -Z 向前。也就是说,在眼睛空间中,距离较远的物体比靠近的物体具有更大的负 Z。这些函数采用正 Z 值的原因是因为它使它们更易于使用。
  • @NicolBolas 您在眼睛空间方面是正确的。但是,根据 user1024157 给出的描述,我假设他们的视图设置为使世界空间中的正 z 值位于相机前面。因此,我在世界空间中给出了我的解释。
  • @user1024157 设置视图矩阵不仅不能使用gluPerspective(例如gluLookAt 或一些glTransform 函数),更重要的是它不是在投影矩阵堆栈上完成,而是在模型视图矩阵堆栈上完成。如果你不明白我在说什么,请获取一个好的 OpenGL 或通用计算机图形学习资源。
猜你喜欢
  • 2013-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多