`
daojin
  • 浏览: 677943 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

OpenGL渲染管线

 
阅读更多

很多书上介绍了渲染管线,往往严重脱离实际,不知道到底对应的程序代码是什么。作为程序员,在没有弄清代码流程和作用之前,所有的理论都很苍白。下面是一些补充说明。

 

1.顶点数据

指定顶点颜色(glColorPointer),法线(glNormalPointer),坐标(glVertextPointer),纹理坐标(glTexCoordPointer)。 如果有显示列表从显示列表中提取以上数据。 顶点坐标最终被添加为4纬的。 其中z =0, w = 1

 

 

2. 求值器,如果没有使用,则忽略。

 

 

3. 基于顶点的操作(Vertex Shader 自己编程完成)。 主要是五部分。

 

输入:顶点位置,法线,顶点颜色,裁剪平面,纹理,光照。

输出: 变换后的顶点位置,顶点颜色,法线

 

顶点位置变换,

法线变换,

裁剪平面变换,

纹理变换,

光照运算。

很多书上没有说【法线变换】和【裁剪平面变换】,这是不完整的。

 

另外,【裁剪平面变换】,可以认为是一种特殊的图元。下面是详细过程

 

1 . 利用【模型视图矩阵】进行模型视图变换。从局部坐标变换为【人眼的世界坐标】。

 

 

2.进行投影变换,进行正规(normalize)化。 实际的结果是

 

把实景体压缩成为立方体。具体参照OpenGL书上提供的【投影矩阵】。

3. 纹理坐标变换。利用【纹理变换矩阵】变换纹理坐标。

 

4 . 法线变换。利用【模型视图矩阵的逆的转置】变换法线方向。

 

5 . 与此同时,进行光照运算,利用变换后的法线和顶点坐标,当前的材

质,灯光坐标,灯光模型产生新的颜色或者颜色索引。

 

6. 如果有裁剪平面,裁剪平面也要根据【模型视图矩阵的逆】变换法线方向。

 

2. 图元装配(固定管线功能)。 【分散的点,转换为图元】

 

1.根据图元的类型,点,三角形,四边形,如果glShadeModel采用的是flat模型,则顶点使用同一种颜色。(注意:如果使用的是smooth模型,则送入光栅化阶段。)

2.如果有裁剪平面,则进行裁剪运算。

 

3.坐标按照标准正方体x=a w, y = aw, z = aw进行裁剪。其中a是计算出来的结果。

4.如果启用了选择,则进行选择,并报告。渲染管线停止。如果没有,则进行透视除法。和视口变换。

 

5.如果启用了隐藏面消除,则进行隐藏面消除操作。

 

3. 光栅化,向量几何图形转换为位图图像(固定管线功能)【对图元进行插值

 

1. 根据线的宽度,线的stipples,顶点的大小,来决定窗口中的哪些栅格

 

被图元占用。

2. 颜色插值。与此同时,颜色和深度值也被安排到每一个【片段】。

 

3. 纹理坐标插值。

 

4. 片段着色器。【Fragment Shader 自己编程完成

 

1. 通过片段的纹理坐标获取纹理颜色,然后与片段颜色进行混合。

 

2. 雾效果的计算。本阶段的结果是,每一个像素都有一个颜色值和深度值。

 

5. 光栅操作。【固定管线功能

输入为像素位置,和颜色,深度。

 

1.裁剪测试。scissor test。注意与clip不同。

2.alpha测试。

3.深度测试。

5.模板测试

6.混合(也就是玻璃效果,在此时应用)

 

 

  • 大小: 22.3 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics