2014-11-25 54 views
2

我是Android开发者,但是OpenGL的初学者。我被视锥体迷惑了。 有两个问题:在Opengl中,近平面和镜像平面是一样的东西吗?

  1. 接近飞机和图片平面的东西吗?
  2. 如果它们不是一样的东西,为什么没有指定图像平面的z值?

我不擅长英语,希望你能理解我的问题..任何帮助将不胜感激!

+0

我从来没有完全完成它,但我写了一个说明性的程序,试图解释,什么是平截头体:https://github.com/datenwolf/codesamples/tree/master/samples/OpenGL/截锥体 – datenwolf 2014-11-25 08:42:12

回答

6

不,它们是不同的概念,OpenGL中不需要图像平面。

由于使用投影矩阵来定义相机的投影,存在近平面和远平面。深入缓冲区和数字精度时,它们非常重要。显然,图像是渲染的结果。然而,图像平面只存在于真实世界的相机中,光线通过针孔或镜头投射到记录图像的物体上。在计算机图形学中,除非你做出非常薄的镜头效果,否则不需要对其进行建模。我想它是这样的:

enter image description here

再次,部分盘旋“虚”不具备OpenGL和光栅化的任何目的。它们对于真实的相机是必需的,但是人为地计算图像可能会带来一些捷径。首先,投影矩阵用于将几何投影到图像空间中,保留深度值。图像空间与图像平面的概念相当独立。观看照片时,我们不倾向于考虑相机中传感器或胶片的位置和尺寸。然后栅格化几何,产生碎片(像素数据包)。深度缓冲区仅用于保留最前面的可见碎片。这只是基于深度比较。在某种意义上,像素不是显式图像平面上的表面,而是代表观看体积的切出部分。

homogeneous coordinates的维基页面讨论了将点映射到平面z = 1上,尽管认为这是图像平面的深度似乎不起任何作用。

这里有大量有关相机模型的文献,但我不知道我应该指出哪些。如果其他人,请评论/编辑!也许从红色书开始吧? http://www.glprogramming.com/red/chapter03.html

+0

但是“glViewport”功能可以在近平面上工作,不是吗?所以视口是近平面的一块区域。 – WZY 2014-11-27 07:30:06

+0

@ user911660否,'glViewport'定义窗口内要呈现的区域。它的with/height成为您使用OpenGL生成的图像的分辨率。投影定义了在栅格化到视口之前几何如何被拉伸和变形。近平面和远平面仅夹住几何图形并提供有界的深度范围。在图像平面上观察视口,延伸到平截面两侧,在近平面上或后方(如图像中)以及从每个像素射出的光线可能并不会造成伤害,但是我会提醒注意不要让它更多混乱。 – jozxyqk 2014-11-27 09:34:06

+0

谢谢,我明白了。 – WZY 2014-12-12 10:31:00