Foundations of 3D Computer Graphics_Chapter11_Depth

11.1 Visibility

      In then physical world,if object A is in the front of object B,then the light  from object B will be blocked by object A before reaching the camera.and it will not appear in the image(for example, the blue hexagon of figure 10.2).In the computer graphics,we need to model this computationally.


     在物理世界,A在B的前面,来自B的光在到达相机之前会被会被B遮挡。

B不会出现图像上,在计算机图形学中,我们需要模拟这个计算过程。


Foundations of 3D Computer Graphics_Chapter11_Depth


  有很多中方法可以确保对相机可见的物体出现在图像中。一种思想是根据三角形面片的深度进行排序,然后按照从后往前的方式进行绘制。这个方法的思想是在最前面的面片会遮挡后边的面片,从而产生正确的渲染结果。但是,这种所谓的画家方法同样也有一些难点,例如,一个唱场景中可能包含交叉的面片。也可能包含非交叉的面片。


Foundations of 3D Computer Graphics_Chapter11_Depth

      另外一个非常常用的方法是光线投射,我们会计算场景的每个点,与投射光线最近的交点的点会被进行到下一级的渲染,这个方法会在20章进行讨论。

      在基于光栅化的渲染引擎中,比如Opengl, 我们使用某种称作Z-buffer的机制进行可见性计算。在这个方法中,

三角形可以以任何顺序进行绘制。在帧缓存中,每个像素不仅存储着颜色信息,同时也存储着深度信息。当一个像素将要进行绘制时,首先与帧缓存的已经存在的深度进行比较,如果更小,则更新颜色及深度缓存,否则,放弃。

该方法能够较好的解决交叉三角形情况


Foundations of 3D Computer Graphics_Chapter11_Depth

Foundations of 3D Computer Graphics_Chapter11_Depth

         其它的一些可见性计算,例如阴影贴图,光线追踪。

          可见性计算时非常重要的,可以提前删除一些不可见的物体或者面片,减少绘制的计算量。

     11.2 Basic Mathematical Model

       这一部分主要完成投影矩阵的第三行的计算,其实在正常的投影矩阵计算是,应该包含该部分。

Foundations of 3D Computer Graphics_Chapter11_Depth

Foundations of 3D Computer Graphics_Chapter11_Depth

   在OpenGL 中我们是使用z-buffer进行可见性计算,为了使用z-buffer,我们需要一个深度值,为了得到,

对于每一个在视空间的点,我们定义一个()在裁剪空间的的坐标。我们打算把Zn与深度缓存中的值做比较。


Foundations of 3D Computer Graphics_Chapter11_Depth

     

            Foundations of 3D Computer Graphics_Chapter11_Depth

首先可以确认,Zn的值确实可以用作深度对比,

同时,我们来考虑把视坐标点通过投影矩阵转换到NDC的过程。通常情况下,这种变换既不是线性变换也不是仿射变换,我称之为3D投影变换,

下边的几段内容到11.3 不知道在讲什么


11.3 部分主要在将如何求解投影矩阵的两个参数,可是没看到推导过程,感觉是作者直接给你的结论,