zoukankan      html  css  js  c++  java
  • OPENGL图形渲染管线图解

    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

  • 相关阅读:
    硬件_WIFI&Blue
    C++_练习—多态_纯虚函数与抽象类
    C++_练习—多态_验证vptr分布初始化
    C++_练习—多态_证明vptr指针的存在
    单摆方程
    谐振动相关知识
    UVa 129
    LeetCode-316
    Java 运算符
    一些特殊的矩阵
  • 原文地址:https://www.cnblogs.com/wwhhgg/p/11714636.html
Copyright © 2011-2022 走看看