学习着色器,并理解着色器的工作机制,就要对OpenGL的固定功能管线有深入的了解。

零.首先要知道几个OpenGL的术语

渲染(rendering):计算机根据模型(model)创建图像的过程。
模型(model):根据几何图元创建的物体(object)。
几何图元:包括点、直线和多边形等,它是通过顶点(vertex)指定的。

最终完成了渲染的图像是由在屏幕上绘制的像素组成的。在内存中,和像素有关的信息(如像素的颜色)组织成位平面的形式,位平面是一块内存区域,保存了屏幕上每个像素的一个位的信息。例如,它指定了一个特定像素的颜色中红色成分的强度。位平面又可以组织成帧缓冲区(framebuffer)的形式,后者保存了图形硬件为了控制屏幕上所有像素的颜色和强度所需要的全部信息。

一.OpenGL的固定功能管线

理清了基本的概念,下面了解了一些关于OpenGL渲染管线的知识.看了这个之后对于OpenGL的学习我想应当是很有帮助.关于这么一篇的原文则是GLSL-LIGHTSOURCE 教程一个开篇部分.点击这里访问原文。原文是英文的,以下是中文的翻译,点击访问下文的原文地址。

关于渲染管线将什么呢?无非就是在OpenGL的管道当中各个部分的功能以及如何在管道当中形成了我们想要的最终的一幅图.(像素).而管线当中的操作可分为以下几个部分:

阶段1. 指定几何对象.

如:点 线 三角形.等一些几何图元..OpenGL绘制几何图元的方法有以下三种:

  • <1> 一次一个顶点.即使用glBegin()  glVertex() glEnd() 指定几何对象.
  • <2> 使用顶点数组..如glDrawArrays.glDrawElements.等.一次性的绘制大量图元.

上面这两种模式则是立即模式.即指定完图元之后会被立即渲染.即将所有数据发往渲染管线后立即被渲染.

  • <3>显示列表模式.它存储于OpenGL服务端 (接收OpenGL命令的一端),操作函数有 glNewList、 glEndList、 glCallList .

阶段2   顶点处理操作:

不管以上的几何对象是如何指定的,所有的几何数据都将会经过这个阶段,这个阶段负责的则是逐个顶点的操作.

在这个阶段能做的工作则是:

  1. 顶点变换:根据模型视图和投影矩阵变换
  2. 光照计算和法线变换(法线矩阵 是模型矩阵的左上角3*3的逆矩阵)和法线规格化
  3. 纹理坐标变换.(纹理矩阵)
  4. 材质状态:纹理坐标生成

而最重要的则是变换以及光照. 每个顶点在这个阶段分别是单独处理的.

这个阶段所接收到的数据则是每个顶点的属性特征..输出则是变换后的顶点数据.

阶段3  图元组装

在顶点处理之后,顶点的全部属性都已经被确定。在这个阶段顶点将会根据应用程序送往的图元规则如GL_POINTS 、GL_TRIANGLES 等将会被组装成图元。

阶段4 图元处理(裁剪 消隐)

阶段5  栅格化操作

阶段6 片元处理

阶段7  逐个片元的操作

这些操作将会最后影响其在帧缓冲区的颜色值.

阶段8  帧缓冲操作

glColorMask、glStrncilMask、glDepthMask、glClearDepht、glClearStencil、glClearColor 等.将在这个阶段影响写入的值.

以上只是讨论OpenGL 图元绘制的基本过程 那么基于像素图像绘制.几乎形同之上..只是在光栅化处理前的操作不一样.即经过像素解码 像素传输.栅格化 最后形成片元...片元之后的处理完全一样..

二.可编程管线可以替换的功能

在着色器编程领域..你将可实现

因为这三个阶段所决定都是最重要效果的阶段..对于这些的可编程将带来非常大的好处以及可控制的渲染!!

在前面的固定功能管线提到了,在阶段5:栅格化操作 过程中, 片元的属性会由图元上顶点数据等经过插值而确定。在顶点着色器处理完毕后,OpenGL都会将顶点与顶点之间的片元(基本上可以理解为像素)的属性(如位置坐标、纹理坐标)进行线性插值。所以,在纹理坐标为(1,0)和(0,0)中间的片元会得到一个(0.5,0)的纹理坐标,在纹理坐标为(0,0)和(1,1)之间的片元会得到一个(0.5,0.5)的纹理坐标。然后将这些经过差值处理之后的片元交给片元着色器处理。片元着色器确定最终的片元颜色。

OpenGL: 渲染管线理论相关推荐

  1. OpenGL 渲染管线理论

    这几天稍微看了一些关于GLSL的顶点着色以及片元着色的一些相关知识.目前来讲还有一个着色器则是Geometry_shader..我的显卡用不了这个功能..当然有点遗憾>_<..       ...

  2. OpenGL 渲染管线理论

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 学习着色 ...

  3. OpenGL渲染管线解析

    背景: 本篇文章主要偏向理论知识的讲解,实践方面后期会进行讲解.opengl的渲染管线中,如果接触3D渲染不多情况下,比如经常做视频滤镜或视频渲染显示的话,经常接触的两个部分就是顶点着色器.片段着色器 ...

  4. 小强学渲染之OpenGL渲染管线详析

    什么是OpenGL? OpenGL是一套图形硬件的软件API接口库,它直接和GPU交互,将3D场景渲染绘制到2D屏幕上.总结说,OpenGL的功能是将程序中定义的各种2D或3D模型绘制到帧缓存中,或者 ...

  5. 《OpenGL编程指南(原书第9版)》——1.4 OpenGL渲染管线

    1.4 OpenGL渲染管线 OpenGL实现了我们通常所说的渲染管线(rendering pipeline),它是一系列数据处理过程,并且将应用程序的数据转换到最终渲染的图像.图1-2所示为Open ...

  6. OpenGL渲染管线之简单示例(五)

    前言:这一章我们将对前面的所有知识进行实践,通过OpenGL编程,完成一个简单的OpenGL程序.你可以通过访问我的GitHub获取我学习的HelloOpenGL项目.这个项目需要的所有头文件及库均配 ...

  7. opengl渲染管线(Graphics Pipeline)

    opengl渲染管线 前言:在OpenGL中,任何事物都在3D空间中,但是屏幕和窗口都是2D像素数组,因此OpenGL大部分工作都是将3D坐标转化为适应屏幕的2D像素.3D坐标转化为2D坐标的过程是O ...

  8. OpenGL渲染管线介绍

    一.概述 OpenGL是跨平台计算机图形应用程序的应用规范,广泛应用于仿真.游戏.GIS系统等领域,实现二三维图形的渲染.OpenGL渲染过程需要经历CPU.GPU两个阶段,CPU中进行图形计算,完成 ...

  9. 红宝书阅读笔记——OPENGL渲染管线

    之前读的时候一直觉得红宝书是很艰涩难懂的,不如NEHE的教程简单. 后来才发觉是自己没基础,几番折腾之后也只能用OPENGL做些简单的东西.半年没写,连glBegin都给忘了. 图形学的大作业要求写个 ...

最新文章

  1. Ansible — Playbooks
  2. 02 面向对象之:类空间问题以及类之间的关系
  3. win8.1注册表-修改资源管理器的默认路径regedit
  4. mysql树节点路径,关于mysql:从使用物化路径编码树的表中选择,按深度优先排序(无递归/ ltree)...
  5. 结婚生娃和去核电站参观,哪个更安全?
  6. 使用Origin Pro2021画简单函数图像
  7. SpringCloud创建Config Client通过Eureka访问Config
  8. vs2010 打开 vs2012 的解决方案
  9. yum更换国内源、yum下载rpm包  源码包安装
  10. 民生银行java 面试_2019民生银行招聘面试试题及答案解析
  11. 2022年java学什么?java怎么学?
  12. Tomcat的使用(详细流程)
  13. 【数据处理】之读取csv文件报错
  14. 如何运用时间管理四象限法则去管理时间?
  15. 一枚中级网络工程师的工作日常,能引起多少同行的共鸣啊。
  16. 【MacM1+PyCharm+PyQt5】记录一次Pycharm有Pyqt5环境但无代码提示的解决流程
  17. 自动驾驶(三十二)---------车辆行人识别
  18. Win7 64 位 Vcode Python安装与环境配置
  19. 微信小程序--小程序及微信生态圈
  20. HDU 5761 Rower Bo(积分)

热门文章

  1. 攻防比赛_深度:一场攻防杂乱的比赛,凸显了索肖三中卫阵型的核心是谁
  2. 【Oracle】删除不存在表时避免报错
  3. 【Linux】Another app is currently holding the yum lock; waiting for it to exit...
  4. word 远程过程调用失败。 (异常来自 HRESULT:0x800706BE) 解决方法
  5. 解决vi/vim中粘贴会在行首多很多缩进和空格的问题
  6. nginx开启目录浏览,解决中文乱码问题
  7. session跨域共享解决方案
  8. 解决python中csv文件中文写入问题
  9. 解决Win10 PowerShell无法激活Anaconda环境的问题
  10. 解决“此图片来自微信公众平台未经允许不可引用”的方法