这几天稍微看了一些关于GLSL的顶点着色以及片元着色的一些相关知识.目前来讲还有一个着色器则是Geometry_shader..我的显卡用不了这个功能..当然有点遗憾>_<..
         在看了一些之后,大概了解了一些关于OpenGL渲染管线的知识.看了这个之后对于OpenGL的学习我想应当是很有帮助.关于这么一篇的原文则是GLSL-LIGHTSOURCE 教程一个开篇部分. 原文地址:
是英文的..我在osgchina教程论坛上也见到过FreeSouth大牛的中文翻译..

关于渲染管线将什么呢?无非就是在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 图元处理(裁剪 消隐)
         <1>这个步骤第一个所做的应当是裁剪操作..会将图元与用户定义的裁剪平面 即glClipPlane 和模型投影矩阵所建立的视景比较. 这将会裁剪且丢弃位于视景和裁剪平面外部的图元.不在予以处理.
        <2> 其次.若是采用透视投影 那么.将会对每个顶点的x,y z坐标分别除以w. 
        <3>紧接着 则是由视口变换将顶点坐标变换至窗口坐标.
        <4> 执行消隐操作

阶段5  栅格化操作
        <1>由图元处理传递过来的图元数据.在此将会被分解成更小的单元并对应帧缓冲区的各个像素.这些单元被称之为 片元. 一个片元可能包含窗口左边 深度 颜色 纹理坐标等属性.
         <2> 片元的属性则是图元上顶点数据等 经过插值 而确定的..这里生成的片元将会包含主颜色和次颜色.
           glShadeMode() 函数的作用将会这里体现.即使用插值(平滑着色) 或者使用最后一个顶点颜色(平面着色)
         <3> 点宽 线宽.多边形模式,正面背面等一些特征也将是这阶段发生作用.
          <4> 反走样也是这个阶段起作用.

阶段6 片元处理
         <1>上纹理 通过纹理坐标取得纹理内存中相对应的颜色
         <2> 雾化 通过片元距离当前视点位置修改颜色.
         <3> 颜色汇总..(这个与混合完全不同概念.将(纹理,主定义的颜色,雾化的颜色,次颜色光照阶段计算的颜色)汇总一起.
        
阶段7  逐个片元的操作
         <1> 所有的一些测试 像素所有权 剪切(glScissor) Alpha测试(glAlphaFunc) 模版测试(glStencilFunc)
          深度测试 (glDephtFunc) 混合(glBlendFunc) 
         这些操作将会最后影响其在帧缓冲区的颜色值.

阶段8  帧缓冲操作
        <1>这个阶段执行帧缓冲的写入等操作等..最后产生了显示出来的像素.
         glColorMask glStrncilMask glDepthMask glClearDepht glClearStencil glClearColor 等.将在这个阶段影响写入的值.

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

因此 在着色器编程领域..你将可实现
    Vertex Shader 替换 顶点处理阶段
    Fragment Shader 替换 片元处理阶段
    Geometry Shader 替换 图元组装阶段..

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


         这几天稍微看了一些关于GLSL的顶点着色以及片元着色的一些相关知识.目前来讲还有一个着色器则是Geometry_shader..我的显卡用不了这个功能..当然有点遗憾>_<..
         在看了一些之后,大概了解了一些关于OpenGL渲染管线的知识.看了这个之后对于OpenGL的学习我想应当是很有帮助.关于这么一篇的原文则是GLSL-LIGHTSOURCE 教程一个开篇部分.原文地址:
是英文的..我在osgchina教程论坛上也见到过FreeSouth大牛的中文翻译..

关于渲染管线将什么呢?无非就是在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 图元处理(裁剪 消隐)
         <1>这个步骤第一个所做的应当是裁剪操作..会将图元与用户定义的裁剪平面 即glClipPlane 和模型投影矩阵所建立的视景比较. 这将会裁剪且丢弃位于视景和裁剪平面外部的图元.不在予以处理.
        <2> 其次.若是采用透视投影 那么.将会对每个顶点的x,y z坐标分别除以w. 
        <3>紧接着 则是由视口变换将顶点坐标变换至窗口坐标.
        <4> 执行消隐操作

阶段5  栅格化操作
        <1>由图元处理传递过来的图元数据.在此将会被分解成更小的单元并对应帧缓冲区的各个像素.这些单元被称之为 片元. 一个片元可能包含窗口左边 深度 颜色 纹理坐标等属性.
         <2> 片元的属性则是图元上顶点数据等经过插值而确定的..这里生成的片元将会包含主颜色和次颜色.
           glShadeMode() 函数的作用将会这里体现.即使用插值(平滑着色) 或者使用最后一个顶点颜色(平面着色)
         <3> 点宽 线宽.多边形模式,正面背面等一些特征也将是这阶段发生作用.
          <4> 反走样也是这个阶段起作用.

阶段6 片元处理
         <1>上纹理 通过纹理坐标取得纹理内存中相对应的颜色
         <2> 雾化 通过片元距离当前视点位置修改颜色.
         <3> 颜色汇总..(这个与混合完全不同概念.将(纹理,主定义的颜色,雾化的颜色,次颜色光照阶段计算的颜色)汇总一起.
        
阶段7  逐个片元的操作
         <1> 所有的一些测试 像素所有权 剪切(glScissor) Alpha测试(glAlphaFunc) 模版测试(glStencilFunc)
          深度测试 (glDephtFunc) 混合(glBlendFunc) 
         这些操作将会最后影响其在帧缓冲区的颜色值.

阶段8  帧缓冲操作
        <1>这个阶段执行帧缓冲的写入等操作等..最后产生了显示出来的像素.
         glColorMask glStrncilMask glDepthMask glClearDepht glClearStencil glClearColor 等.将在这个阶段影响写入的值.

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

因此 在着色器编程领域..你将可实现
    Vertex Shader 替换 顶点处理阶段
    Fragment Shader 替换 片元处理阶段
    Geometry Shader 替换 图元组装阶段..

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

OpenGL 渲染管线理论相关推荐

  1. OpenGL: 渲染管线理论

    学习着色器,并理解着色器的工作机制,就要对OpenGL的固定功能管线有深入的了解. 零.首先要知道几个OpenGL的术语 渲染(rendering):计算机根据模型(model)创建图像的过程. 模型 ...

  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. python使用pandas计算dataframe中每个分组的极差、分组数据的极差(range)、使用groupby函数和agg函数计算分组的最大值和最小值
  2. apache 安装配置 以及php-fpm结合apache配置
  3. WPF 10天修炼 第四天- WPF布局容器
  4. 【UAV】气压计 SPL06
  5. DCMTK:DcmDate,DcmTime和DcmDateTime类的测试程序
  6. c语言 判断日期时间_C语言中不得不知的那些“关键字”和“控制语句”
  7. commons-pool
  8. 02.改善深层神经网络:超参数调试、正则化以及优化 W1.深度学习的实践层面
  9. linux kvm dhcp配置,《转》QEMU-KVM创建虚拟机自动指定IP的配置
  10. ECCV 2020最佳论文讲了什么?作者为ImageNet一作、李飞飞高徒
  11. Mars《Android开发视频教程》全集下载(第一季到第五季)
  12. 自由职业者和外包接单项目分析
  13. 来自Transformer + Bert + GPT 的灵魂拷问
  14. Highlighting System5 最新高亮系统
  15. 第七章 Git操作 7.1利用gitee提交代码
  16. 城市空气质量监测系统解决方案
  17. SAP BAPI_PRODORD_CREATE 参数带上销售订单号报 客户订单无CO对象 提示
  18. 机械臂控制软件,上位机软件 此机器人上位软件。 运动采用通用G代码指令编程,具有G5三维的空间圆弧插补,空间直线插补功能
  19. 【疯壳·无人机开发教程1】开源编队无人机-开机测试
  20. 1. 英文SCI论文引言写作四步走模型学习笔记

热门文章

  1. java 手机信息管理系统照相功能_Android实现手机拍照功能
  2. Jenkins配置工具
  3. 光电编码器的原理及应用场合_图解编码器应用,推荐收藏
  4. 提供oracle兼容特性报,【干货】K-DB为什么能全面兼容Oracle
  5. Jupyter Notebook使用说明
  6. python面向对象中的私有属性和私有化方法
  7. codeblocks哪个字体最舒服_如果给你一百万让你放弃一种美食永远不吃,你会放弃哪个?...
  8. php根据循环条件切换图片,根据条件循环复框,麻烦各位朋友帮小弟我看一下应该怎样改...
  9. 两个iphone怎么大量传照片_「唯物」传个视频到 iPhone,有了新方法
  10. excel柱状图堆叠图显示总和_Excel堆积柱形图同时显示合计值和构成值的方法介绍...