shading language 和 CG 概述

一个讲图形编程和CG的PDF,整理一下贴上来。

作者:康玉之,kang_yu_zhi@yahoo.cn

 

第3 章 Shader Language

shader language 被定位为高级语言

目前,shader language 的发展方向是设计出在便捷性方面可以和C++/JAVA相比的高级语言,“赋予程序员灵活而方便的编程方式”,并“尽可能的控制渲染过程”同时“利用图形硬件的并行性,提高算法的效率”。Shader language 目前主要有3 种语言:基于OpenGL 的GLSL,基于Direct3D 的HLSL,还有NVIDIA公司的Cg 语言。

使用shader language 编写的程序称之为shader program(着色程序)。着色程序分为两类:vertex shader program(顶点着色程序)和fragment shader program(片断着色程序)。

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

顶点着色器控制顶点坐标转换过程;片段着色器控制像素颜色计算过程。这样就区分出顶点着色程序和片段着色程序的各自分工:Vertex program 负责顶点坐标变换;Fragment program负责像素颜色计算;前者的输出是后者的输入。

Vertex Shader Program

Vertex shader program(顶点着色程序)和Fragment shader program(片断着色程序)分别被Programmable Vertex Processor(可编程顶点处理器)和Programmable Fragment Processo(可编程片断处理器)所执行。

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

可以只有顶点着色程序。如果只有顶点着色程序,那么只对输入的顶点进行操作,而顶点内部的点则按照硬件默认的方式自动插值。

而片断着色程序是对每个片断进行独立的颜色计算,并且算法由自己编写,不但可控性好,而且可以达到更好的效果。

Fragment Shader Program

片断着色程序对每个片断进行独立的颜色计算,最后输出颜色值的就是该片段最终显示的颜色。可以这样说,顶点着色程序主要进行几何方面的运算,而片段着色程序主要针对最终的颜色值进行计算。

所谓片断就是所有的三维顶点在光栅化之后的数据集合,这些数据还没有经过深度值比较,而屏幕显示的像素都是经过深度比较的。

 

第4 章 Cg 语言概述

在网上有一个名为NShader(http://nshader.codeplex.com/)的Visual Studio2008 插件,安装之后可以支持编写着色程序。

Cg 语言通常采用动态编译的方式

Cg 编译器首先将Cg 程序翻译成可被图形API(OpenGL 和Direct3D)所接受的形式,然后应用程序使用适当的OpenGL 和Direct3D 命令将翻译后的Cg 程序传递给图形处理器,OpenGL 和Direct3D 驱动程序最后把它翻译成图形处理器所需要的硬件可执行格式。

被特定的图形硬件环境或AIP 所支持的Cg 语言子集,被称为Cg Profiles。需要注意的是: profile 分为顶点程序的profile 和片段程序的profile,这是因为顶点着色器和片段着色器原本就不是工作在同一个硬件。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值