GPU编程入门(一)

全文摘自 《 GPU Programming And Cg Language Primer 1rd Edition》 康玉之

 Shader Language目前有三种语言: 基于OpenGL的GLSL、基于Direct3D的HLSL、NVIDIA公司的Cg。
 使用  Shader Language编写的程序称之为shader program。着色程序分为两类:vertex shader program和fragment  shader program
======================================================================================================
GPU上有两个组件:Programmable Vertex Process(可编程顶点处理器,又称顶点着色器)
                                 Programmable Fragment Process(可编程片段处理器,又称片段着色器)

顶点和片段处理器被分离成可编程单元
可编程顶点处理 是一个硬件单元,可以运行顶点程序————顶点程序运行在顶点处理器上
可编程片段处理器 是一个可以运行片段程序的单元。————片段程序运行在片段处理器上

Vertex program 负责顶点坐标变换;
Fragment program 负责像素颜色计算;——————前者的输出是后者的输入

顶点和片段处理器都拥有非常强大的并行计算能力,并且非常擅长于矩阵 (不高于4 阶)计算,片段处理器还可以高速查询纹理信息(目前顶点处理器还 不行,这是顶点处理器的一个发展方向)。
=======================================================================================================
 

可编程图形硬件输入\输出

顶点着色程序从GPU 前端模块(寄存器)中提取图元信息(顶点位置、法 向量、纹理坐标等),并完成顶点坐标空间转换、法向量空间转换、光照计算等 操作,最后将计算好的数据传送到指定寄存器中;
然后
片断着色程序从中获取需 要的数据,通常为“纹理坐标、光照信息等”,并根据这些信息以及从应用程序传 递的纹理信息(如果有的话)进行每个片断的颜色计算,最后将处理后的数据送 光栅操作模块。

图元信息(顶点位置坐标、颜色、纹理坐标等)传递到vertex buffer 中;
理信息传递到texture buffer 中

也可以只有顶点着色程序。如果只有顶点着色程序,那么只 对输入的顶点进行操作,而顶点内部的点则按照硬件默认的方式自动插值。
片断着色程序是对每个片断进行独立的颜色计算,并且算法由自己编写, 不但可控性好,而且可以达到更好的效果。

由于GPU 对数据进行并行处理,所以每个数据都会执行一次shader 程序程 序。
即,每个顶点数据都会执行一次顶点程序;每个片段都会执行一次片段程序。

======================================================================================================
顶点着色程序主要进行几何方面的运算
段着色程序主要针对最终的颜色值进行计算。

片段着色程序还有一个突出的特点是:拥有检索纹理的能力。对于GPU 而言, 纹理等价于数组,这意味着,如果要做通用计算,例如数组排序、字符串检索等, 就必须使用到片段着色程序。让顶点着色器也拥有检索纹理的能力,是目前的一 个研究方向。
 (蓝色字体为不懂的地方,如果可以帮忙答疑解惑,请留言告知,十分感谢!)
 
附: 什么是片断?片断和像素有什么不一样?所谓片断就是所有的三维顶点 在光栅化之后的数据集合,这些数据还没有经过深度值比较,而屏幕显示的像素 都是经过深度比较的。
======================================================================================================
GLSL\HLSL\Cg各自特点
GLSL 与HLSL 分别提基于OpenGL 和Direct3D 的接口,两者不能混用
GLSL:
ATI 系列显卡对OpenGL 扩展支持不够 ,例如在使用OSG(Open Scene Graphic)开源图形引擎时,由于该引擎完全基于OpenGL,导致其上编写的3D 仿真程序在较老的显卡上常常出现纹理无法显示的问题
 
GLSL 的语法体系 自成一家,而HLSL 和Cg 语言的语法基本相同,这就意味着,只要学习HLSL 和Cg 中的任何一种,就等同于学习了两种语言。
GLSL继承了OpenGL 的良好移植性,一度在unix 等操作系统上独领风骚(已是曾经 的往事)。
HLSL:

微软的HLSL 移植性较差  
  HLSL 多半都是用于游戏领域。我可以负责任的断言, 在Shader language 领域,HLSL 可以凭借微软的老本成为割据一方的诸侯,但, 决不可能成为君临天下的霸主。
Cg:
Cg 是一个可以被OpenGL 和Direct3D 广泛支持的图形处理器编程语 言。
Cg 语言是Microsoft 和NVIDIA 相互协作在标准硬件光照语言的语法 和语义上达成了一致  
尽管目前还有一些关于Cg 和GLSL 之间的争议,不过主流 的3D 图形厂家都开始支持Cg 语言。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值