3D渲染--OpenGL

1、图形硬件

                                      3D渲染--OpenGL_第1张图片

      GPU(Graphics Processing Unit):

      像素和帧

             基本所有现代显示器都是基于光栅的,一个光栅是一个像素的2D矩形网格,一个像素有两个属性:颜色和位置。颜色以RGB分量表示--经常8位一个分量或者24位一个像素。位置以(x,y)形式表示。原点(0,0)在左上角,如下图所示:

 

        3D渲染--OpenGL_第2张图片

          每个像素的颜色位数成为显示器深度,矩形网格的行列数成为显示器的分辨率,比如640*480(VGA), 1024*768(VGA)....

帧缓存和刷新率

         像素的颜色值存储在称为帧缓存的图形内存中。GPU将颜色值写入到帧缓存。显示器次用做到右,从上到下逐行从帧缓存读取颜色值,并将每个值显示在屏幕上,这称为光栅扫描。显示器每秒刷新屏幕数十次,称为刷新率,对于LCD显示器一般是60HZ。

双缓存和垂直同步

       当显示器从缓存读取数据显示到当前帧的时候,我们可能正在为下一帧更新内容,这样就导致屏幕一部分显示新帧和一部分旧帧的内容,真就是所谓的撕裂。

     双缓存可以解决此类问题,不使用单帧缓存,而是使用两个缓存:前缓存跟后缓存。 显示器从当前缓冲区读取,而我们将下帧写到后缓存区。完成后,我们像GPU发出信号交换前后缓冲区。

      单独使用双缓存并不能解决整个问题,因为缓存区交换可能发生在不适当的世界,例如,在显示器处于显示旧帧的中间时,这就需要通过光栅扫描结束时候成为垂直同步(VSYnc)来解决。当我们向GPU发出信号进行缓存交换时, 在显示整个当前帧之后,GPU将等待下一个VSync进行实际交换。

    需要注意的是:当VSync缓存交换使能后,你不能以比显示屏刷新率更快速度刷新。对于LCD、LED显示器,通常刷新率是60HZ。或者每帧16.7ms。此外,如果以固定帧率刷新应用程序,你最终的刷新率很可能是显示器刷新率的整数因子,比如1/2, 1/3, 1/4等。

3D渲染--OpenGL_第3张图片

2、3D渲染管线

 

3D渲染--OpenGL_第4张图片       

   需要补充一些OPenGLES的可编程渲染管线:

   3D图形渲染管线主要包括以下几部分:

 1、顶点处理

2、光栅化

3、Fragment Processing

3、输出合并

 

3、顶点、图元、Fragment和像素

    3.1 3D图形坐标系

         openGL是右手坐标系,x轴朝右,y轴朝上,z轴指向显示器外。Direct3D是左右坐标系,z轴相反。本文采用opengl的RHS和CCW。

       3D渲染--OpenGL_第5张图片

 

   3.2 图元

   3D渲染--OpenGL_第6张图片

3.3 顶点

3D渲染--OpenGL_第7张图片

 顶点索引

 

3.4 像素和Fragment

4

3D渲染--OpenGL_第8张图片

3D渲染--OpenGL_第9张图片

 

3D渲染--OpenGL_第10张图片

 

 

3D渲染--OpenGL_第11张图片

 

3D渲染--OpenGL_第12张图片

 

3D渲染--OpenGL_第13张图片3D渲染--OpenGL_第14张图片

3D渲染--OpenGL_第15张图片

3D渲染--OpenGL_第16张图片

 

https://www3.ntu.edu.sg/home/ehchua/programming/opengl/CG_BasicsTheory.html

 

 

 

你可能感兴趣的:(3D)