GPU编程入门(三) 象素shader

ZDNet软件频道时间2008-07-03作者:gamedevers |
本文关键词:shader 象素 GPU

关于上一个程序的一点解释

 

//顶点程序

//全局变量
vector color;

//输入结构
struct VS_INPUT{
vertor position :POSITION;}


//输出结构
struct VS_OUTPUT{
vertor position : POSITION;
vector color:COLOR;}


//主函数
VS_OUTPUT main(VS_INPUT){
VS_OUTPUT 
out;
out.position=VS_INPUT.posintion;
out.color=color;
return out;}


 下面来解释一下基本的语法
首先说一下为什么保存为.txt的文件,而不定义一个特别的文件类型,这个其实shader程序来directx程序
里头就像是一个很长的字符串,是在没有必要定义一个文件类型...不过这样就貌似没有特别的IDE环境
哭.....
首先是定义了一个全局变量,类型为vector,就是一个四元向量(注意,hlsl里头把向量和矩阵当作原始类
型数据,也就是说,对向量的操作和对一个数的操作一样高效,这是图形处理的特殊性决定的),用这个向量来表示一个颜色。全局变量不需要后面说的类似:POSITION的标识符定义语义,原因就是全局变量不是在顶点程序里头初始化,而是通过我们上面看到的consttable初始化的

接着,我们定义了两个结构,分别是输入和输出结构,表示的就是顶点程序的输入和输出结构由”struct“关键字定义,和C语言和C++一样,具体的说我们定义的是一个顶点结构,是的,在顶点程序里头自然要定义顶点结构。接着是vertor position : POSITION这句里头的”:POSITION“这是一个语义(semantics),用来告诉程序这个变量是做什么的,不如这个表示的是位置信息,而后面的:COLOR表示的是散色光信息,而:TEXCOORD表示的就是纹理信息,这些等用到的时候再介绍。语义有定义好的许多,在高级程序里头,还可以自己定义语义语法实际是和底层的寄存器有关的,不过不知道也不影响使用,想知道,百度咯.....
下面是一个主函数,HLSL里头叫做入口函数,相当于C中的main函数。HLSL里头和C不同,没有确定的入口函数所以需要自己指定(也就是函数名可以任意,只要合法),这也带来了相当大的灵活性。函数的定义和C非常类似,一个返回类型,这里我们返回输出结构VS_OUTPUT,也可以是VOID,不过要有特别的语法来返回点什么,毕竟如果不返回你的顶点程序干嘛来着,关于这点,等下补充。然后是函数名,然后是参数列表。接下来做的事情就很明显了吧,申明一个输出结构,然后为每项分别赋值,然后是返回这个结构 。完了....*/

 

void main(in vertor position :POSITION,
           
out vertor oposition : POSITION,
           
out vector ocolor:COLOR)
{
             oposition
=position;
             ocolor
=color;
}


向上面这样,就可以去掉输入和输出结构的定义了,这里,主要是用了in关键字表示这个参数的定义是用
来输入的,out表示用来输出的,这样就不用返回值了。这样对少量参数是使用的,对于复杂一点的顶点程序
还是建议使用结构,这是个好的编程习惯。。好,顶点程序就大概介绍到这里,下次就是片段程序了..

您看到此篇文章时的感受是:
支持
愤怒
无聊
暴汗
养眼
炒作
不解
标题党
搞笑
象素的相关文章
用户评论
用户名
评论内容
发表时间
- 发表评论 -
匿名
注册用户

百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134