前面简单的介绍了一下vetex shader和pixel shader,这里简单的介绍一下效果(effect)
效果(effect)就是用一个文件来综合管理vetex shader和pixel shader的框架。通过使用effect,可以将vetex shader和pixel shader统筹起来,所以主程序中只需要加载effect文件就可以了。Effect文件一般保存在.fx文件中,当然,也可以想前面介绍vetex shader和pixel shader一样保存在.txt文件中。
一般来说,效果(effect),技术(technique),过程(pass)是一起使用的,也就是说,一般的,一个effect至少要有一个technique,一个technique至少有一个pass,而具体数目上限是没有限制的
这么说的话其实effect很简单的,就是简单的用technique和pass把vetex shader和pixel shader的一个逻辑步骤,没有什么新的东西,不过优点却是明显的,方便嘛,而且提高了程序的兼容性,具体的用了就知道了(其实我时钟认为在没有告诉人家一个东西是什么的情况下说优点是和愚蠢的事情…..汗’’)
下面是如何编写效果,其实很简单,我写出来,大家一看就都明白了,不用过多的解释的:
technique [id] [
<
annotation(s)
>
]
... {
pass [id] [<annotation(s)>]
...{
.....//程序语句
}
......//可以有多个psss
}
..... // 可以有多个technique
... {
pass [id] [<annotation(s)>]
...{
.....//程序语句
}
......//可以有多个psss
}
..... // 可以有多个technique
这就是一个典型的effect框架,有人问,那effect呢?整个不就是个effect嘛。。。。
下面解释下,technique 就是关键字,[id]是 technique的名称,然后 [<annotation(s)>]是注释啦,我这么写不会有人认为[ ]是不需的吧,这个就是说[id]这整个用名字代替掉。。。(觉得自己好白痴 寒‘’)不过注意,注释是一定要在<>也就是我们所说的尖括号里头的,这么做嘛,简单说就是规定了,具体说就是,呃,抄一段人家的,注释是用户指定的数据,他可以链接到任何技术,过程或参数。注释是为当个参数添加信息的一种灵活方式,这些信息可以通过应用程序选择任意方式读取和使用,也就是说,注释是有用的,一个注释包括,一个数据类型,一个变量名,一个等号,数据的值,最后用分号(;)结尾例如:
texture Tex0
<
string
name
=
"
tiger.bmp
"
;
>
汗吧?我也汗,具体想了解的可以参考directx的帮助,这里要是说的话要说好久,反正就是可以通过GetAnnotation()或者是GetAnnotationByName()的到,具体怎么用,讲到的时候再说
上面就是effect的编写了,一般简单的effect只要把vetex shader和pixel shader分别封装在一个pass里头就可以了,复杂的因为有好多的vetex shader和pixel shader,所以需要好好组织
下面是怎样来使用效果,第一步自然是从效果文件中创建效果接口对象,