zoukankan      html  css  js  c++  java
  • GPU图形绘制管线总结

    听说后面老总要过来讲解FLSL的使用,后来搜索到他和AGAL或者HGAL很像,搜索FLSL的资料基本没有,国内根本搜不到一些文献资料,9ria上面提供的资料也大都不适合入门,虽然有一些基础的讲解但是还是有很多基本的概念难以理解。所以只能通过学习其他GPU的语言侧面来了解FLSL的一些内容。

    今天的总结主要是大致总结一下GPU的图形绘制管线的一些基本概念和理解。全部援引自下面提到的第一本书,非常感谢这本书的作者。让我这个新手至少在一些概念上有了一些粗浅的认识!

    昨天搜索到两本书:《GPU Programming And Cg Language Primer》和《3D数学基础:图形与游戏开发》看了收获很大,并且在一些概念上和算法上有了一定的理解。所以好好总结一下为以后的FLSL的学习提供一定的基础。在此也将这本书上面提到的论文以及书籍详细记录下来,以便以后的学习。

    1、GPU的历史

    (参考论文:Plaform Independent Real-time X3D Shaders and Their Application in Bioinformatics Visualization)

    虽然GPU的历史并没有什么需要过多的记述和总结的,但是稍微了解一下历史我们会很好的明白GPU的作用和发展趋势。“历史是告诉我们现实是什么,而不是过去是什么”。当然也可以参看第一本书的极少,虽然有些早了!

    2、GPUVsCpu

    QQ截图20131004154113

    GPU具有高并行结构,以GPU在处理图形数据和复杂算法方面拥有比Cpu更高的效率。如上图,CPU和GPU的结构差距,CPU大部分面积交给了控制器和寄存器,然而GPU拥有更多的Alu(逻辑运算单元)用于数据处理,而非数据高速缓存和流控制,这样的结构适合对密集型数据进行并行处理。CPU执行计算任务时,一个时刻只处理一个数据,不存在真正的并行处理,而GPU具有多个处理核,在一个时刻可以并行处理多个数据。

    3、GPU图形绘制管线

    图形绘制管线的定义:用于描述GPU渲染流程,即“给定视点,三维物体,光源,照明模式,和纹理等元素,如何绘制一幅二维图像”

    图形绘制管线的三个阶段:应用程序阶段、几何阶段、光栅阶段。(参考书目:《实时计算机图形学》)

    应用程序阶段:使用高级语言开发,主要和Cpu、内存打交道,诸如碰撞检测,场景图建立、空间八叉树更新、视锥裁剪等经典算法都在此阶段念执行。该阶段的末端,几何体数据(定点坐标、法向量、纹理坐标、纹理等)通过数据总线出少年送到图形硬件。

    几何阶段:主要负责定点坐标变换、光照、裁剪、投影以及屏幕映射,该阶段基于GPU进行运算,在该阶段的末端得到了经过变换和投影之后的定点坐标、颜色以及纹理坐标。

    光栅阶段:基于几何阶段的输出数据,为像素正确配色,以便绘制完整图像,该阶段惊醒的都是单个像素的操作,每个像素的信息存储在颜色缓冲器中。

    注意:光照计算属于几何阶段,因为光照计算牛奶涉及视点、光源和物体的世界坐标,所以通常放在世界坐标系中进行计算;而雾化以及涉及物体透明度的计算属于光栅化阶段,因为深度值信息,而深度值是在几何阶段中计算,并传递给光栅阶段的。

    4、详细论述

    几何阶段:

    输入到计算机中的一系列三维坐标点,但是我们最终需要看到的是,从视点出发观察到的特定点(三维物体是要显示在二维屏幕上的)所以要进行顶点坐标转换

    定点坐标转换的先后顺序:

    Object space(模型坐标空间)——〉World space(世界坐标系空间)——〉Eye space(观察坐标系空间)——〉Clip and Project space,屏幕坐标空间。如下图:

    QQ截图20131004155643

    光栅化阶段:

    光栅化:决定哪些像素被集合图元覆盖的过程。经过上面的一些列转换之后,现在得到每个点的屏幕坐标值,我们需要绘制图元(点、线、面)。

    这里只能初略的总结一下,如果想深入理解《计算机图形学》和《实时计算机图形学》这两本书必看了,我也得找时间恶补一下才可以了。书上还推荐了Blinn的《A Trip Down the Graphice Plineline》

    5、GPU图形硬件(内存架构)

    寄存器和内存有什么区别?

    从物理结构而言,寄存器是Cpu和GPU内部的存储单元,即寄存器是嵌入在Cpu或者GPU中的,而内存则可以独立存在;从功能上而言,寄存器是有限存储容量的高速存储不见,用来暂存指令、数据和位址。Shader编程是基于计算机图形硬件的,这其中就包括GPU上的寄存器类型,glsl和hlsl的着色虚拟机版本就是基于GPU的寄存器和指令集区分的。

    QQ截图20131004161014

  • 相关阅读:
    Mysql分布式事务
    Mysql锁
    Mysql事务隔离级别
    java 资源监控
    Mysql子查询
    javaWeb四大域对象
    KVM 迁移
    KVM 虚拟化
    网络基础
    系统简单启动过程
  • 原文地址:https://www.cnblogs.com/flashbird/p/3351589.html
Copyright © 2011-2022 走看看