OPENGL固定图形渲染管线可以粗略地认为由下面的阶段衔接而成:

顶点颜色,光照,材质三个输入在光栅化前控制绘制管线的操作。光照和材质不能单独使用。顶点颜色,光源颜色,材质颜色都有alpha值,它们的alpha经过运算最后会保存在光栅化后的图元中,也就是说它们的影响也就在上图中红色虚线上方。输入是顶点(几何坐标、顶点颜色),矩阵,光照(光源,参数),材质,输出是片元。

纹理映射的过程的本质是根据纹理信息对片元的再处理,这个过程可能改变片元的alpha值。输入是片元,纹理(纹理坐标、各种参数),输出还是片元。

Alpha值最终通过Alpha混合阶段影响绘制效果,输入时片元,输出是帧缓存颜色值。

一,概述
        当前OpenGL的版本为3.3,基于可渲染管线,实现模型生成,渲染,图像输出等工作。

可渲染管线就是把三维顶点经过一系列加工变成二维的离散的像素点。并且用户可以在特定着色阶段自由配置(如在顶点着色和片段着色阶段,这也是和固定流水线最大的不同)。可渲染管线简要流程如下图所示。

二,详细流程
        上图所示基本上是正确的,但不太直观,一个三维顶点怎么变换成像素的呢?我把它分为两大步,先把三维顶点二维化,在把二维顶点离散化(像素化)。

1,三维坐标变换成二维坐标
(1)模型顶点构建

模型顶点都是相对模型自己的坐标构建的,即物体坐标。只能表达模型的形状,无法得到它的位置和姿态,这就必须引入世界坐标。

(2)变换到世界坐标

世界坐标表达一个更大的坐标域,模型的每个顶点都可以由世界坐标表达出来,由物体坐标到世界坐标,需乘以一个世界矩阵,这样就得到了相对世界坐标的模型。

(3)世界坐标变换相机坐标

世界坐标变换相机坐标,由物体坐标到世界坐标,需乘以一个观察矩阵,这样就得到了相对于相机坐标的模型。

(4)相机坐标变换屏幕坐标1

相机坐标变换屏幕坐标。任何三维模式都是以二维形式(屏幕)显示的。所以三维模型通常要转化为二维。首先要以相机为原点构建视锥体。

(5)相机坐标变换屏幕坐标2
        接下来模型的三维坐标就要变换到二维坐标了,需乘以透视矩阵,最终得到了一个投影于视锥体近平面的二维模型。


2,二维顶点像素化
        经过透视投影得到的顶点是线性的,无法显示在屏幕上,还需要进行像素化,如下图:

————————————————
版权声明:本文为CSDN博主「先锋小牛」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/niu2212035673/article/details/78627307

最新文章

  1. http://note.youdao.com/yws/public/redirect/share?id=2bc2dc6c7df6013e9f8106c005da999a&type=false
  2. BZOJ 4034 BIT & Dfs序
  3. quartus使用笔记
  4. HDU 3652 B-number(数位dp)
  5. memcached学习——分布式算法(Consistant hash + 虚拟节点)(三)
  6. linux 系统中的特殊文件
  7. 3385: [Usaco2004 Nov]Lake Counting 数池塘
  8. 利用Java调用OpenCV进行人脸识别
  9. iOS开发——iOS国际化 APP内语言切换
  10. ●BZOJ 3676 [Apio2014]回文串
  11. I - The 3n + 1 problem(2.4.2)
  12. UNIGUI上传文件
  13. SD内存卡禁止写入只读怎么办?另类SPI模式修复坏卡
  14. linux更改文件权限
  15. js-权威指南学习笔记18
  16. 离线安装 Ambari Hadoop
  17. java程序后台报错java.net.SocketException: Too many open files
  18. 大专生自学php到找到工作的前前后后
  19. php-resque 简单的php消息队列
  20. Alpha冲刺(四)

热门文章

  1. JavaScript 事件代理
  2. MyBatis学习笔记一:MyBatis最简单的环境搭建
  3. 吴裕雄--天生自然 R语言开发学习:基本图形(续三)
  4. OSCACHE介绍
  5. 我们为什么不愿意相信AI?
  6. MyBatis之ResultMap的association和collection标签(一)
  7. Choway Blog
  8. 从赴美IPO绝迹 看那些烧成泡沫的互联网企业
  9. USB小白学习之路(6) IIC EEPROM读取解析
  10. SpringBoot图文教程8 — SpringBoot集成MBG「代码生成器」