OpenGL笔记:一.总述

摘要:本文介绍的是OpenGL的总纲,不管你是否已经学习了OpenGL,这篇文章对你都会有所帮助。

    在学习OpenGL的时候你会发现OpenGL非常凌乱,完全不同你以往的编程习惯,他和C/C++,JAVA等完全不同。

    OpenGL像一个状态机,他的各个部分是一个个的状态,处理流程都已经规定好了,你只需要填充数据,和开启/关闭某一功能。

    (不明白,以后再说,可以接着往下看。这篇文章你可能都不明白,这需要你有一定的图形学的基础。当你对OpenGL有一定了解到时候,并且感觉OpenGL很混乱,那你在回过头来看这篇文章你会有所收获。)

    (1)Evaluators(求值器):根据控制点计算表示表面的顶点
    (2) Per-vertex operations and primitive assembly(基于顶点的操作和基本装配):
        把顶点变成图元(主要是变换矩阵操作),如果启用的高级特性如光照,纹理等,还要计算纹理坐标、计算光照。
    (3)Pixel operation (像素操作): 从内存中取出像素-->解码-->得到数据-->数据操作(缩放、偏移)
    (4)Texture assembly(纹理装配):在图行中应用纹理、多重纹理……
    (5)Rasterization(光栅化):(几何数据+像素数据)-->片段(fragment)
                                片段对应帧缓冲区中的一个像素
    (6)Per-fragment operation(片段操作):纹理处理-->雾计算-->裁剪测试-->alhpa测试-->模板测试 深度缓冲区测试(消隐)
    
    附:(from: http://www.lighthouse3d.com/tutorials/glsl-tutorial/?pipeline)
    

    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 等.将在这个阶段影响写入的值.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值