很多书上介绍了渲染管线,往往严重脱离实际,不知道到底对应的程序代码是什么。作为程序员,在没有弄清代码流程和作用之前,所有的理论都很苍白。下面是一些补充说明。
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
分享到:
相关推荐
看到论坛上很多同学问坐标转换的问题,什么屏幕坐标转世界坐标...一旦弄清楚了渲染管线,有关于这类的问题都可以迎刃而解。于是我用了两天的时间来完成这个OpenGL的教程,绝对的原创。 希望这篇教程能够给大家帮助~
OpenGL 1.4标准发布已经快到一年了,而支持它的显卡却不是很多。所以这么久才有一些关于OpenGL 1.4新特性的示例程序。 这个示例程序演示了OpenGL 1.4现今支持的五种贴图环绕模式。 ??顺带说一句,买廉价显卡...
1.4 OpenGL渲染管线 7 1.4.1 准备向OpenGL传输数据 8 1.4.2 将数据传输到OpenGL 8 1.4.3 顶点着色 9 1.4.4 细分着色 9 1.4.5 几何着色 9 1.4.6 图元装配 9 1.4.7 剪切 9 1.4.8 光栅化 9 1.4.9 片元着色 10 ...
OPENGL静态渲染管线渲染OFF文件实例
1.5OpenGL渲染管线 1.5.1显示列表 1.5.2求值器 1.5.3基于顶点的操作 1.5.4图元装配 1.5.5像素操作 1.5.6纹理装配 1.5.7光栅化 1.5.8片断操作 1.6与OpenGL相关的函数库 1.6.1包含文件 1.6.2GLUT,OpenGL实用工具包 ...
OpenGL 图形管线 渲染管线 坐标变换 模型观测变换 投影变换 正交投影 投影设置 视口变换
主要为大家详细介绍了OpenGL ES渲染管线的简单概述,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
【目录如下】 推荐语 译者序 前 言 第1章 OpenGL概述 1 1.1 什么是OpenGL 1 1.2 初识OpenGL程序 2 1.3 OpenGL语法 6 1.4 OpenGL渲染管线 7 1.4.1 准备向OpenGL传输数据 8 1.4.2 将数据传输到OpenGL 8 1.4.3...
这是一张Silicon的OpenGL图形系统架构图,对于理解OpenGL渲染管线有很大好处。
OpenGL 图形渲染管线及 GPU shader 编程 图像处理算法及实现 C++ 面向对象编程思想和方法,了解基础的设计模式和架构思维 快速看懂及使用网上的代码、库及各种资料 从问题到抽象、到数学建模再到算法实现的方法 使用...
Gouraud 着色过程如下。 (1)确定每个顶点的颜色,以及光照相关计算。 (2)允许正常的光栅化过程...在OpenGL 中,这表示大多数光照计算都是在顶点着色器中完成的,片段着色器仅做传 递并展示自动插值的光照后的颜色。
1.GL_TRIANGLES:每三个顶之间绘制三角形,之间不连接 2.GL_TRIANGLE_FAN:以V0V1V2,V0V2V3,V0V3V4,……的形式绘制
OpenGL 对硬件曲面细分的支持,通过3 个管线阶段提供: (1)曲面细分控制着色器; (2)曲面细分器; (3)曲面细分评估着色器。 (1)C++/OpenGL 应用程序: 创建一个摄像机和相关的MVP 矩阵,视图(v)和投影(p...
该资源花了很多精力完成,主要看点是1)组件(按钮)参与渲染 2)渲染的关键步骤、关键函数。3)如何在Qt5使用着色器 4)三维视图如何调节显示 5)Qt5下较为健壮的...总之,用Qt5下的渲染管线中,这是一个成功典范。
http://blog.csdn.net/hopposite 博客中连载的计算机图形学笔记系列, Foundations Of 3DComputer Graphics 翻译的第一章。 本章主要介绍了计算机图形学的一些背景知识,以及OpenGL渲染管线的整体流程。
实现了软件光栅化。最大的特点是实现了类似Direct3D和OpenGL里面的可编程渲染管线(programmable graphics pipeline)。
opengl es 2.0全面抛弃了 固定渲染管线.只能说shader的时代越来越近了..先下手为强 哈哈.反正nehe已经老黄历了.shader当道.感觉图形学门槛高了一大截.无论怎么说对很多opengl半瓶子来说是个坏消息吧,白学那么多API了...
OpenGL的固定渲染管线是维持了模型视图矩阵和投影矩阵两套矩阵,而Direct3D的固定渲染管线维持了三套矩阵,也就是世界矩阵、视图矩阵以及投影矩阵。我个人认为Direct3D的做法比较科学,而且将三者分开可以更好地控制...