vertex shader texture 访问纹理的方法

vertex shader texture 访问纹理的方法


         今天考虑程序的优化问题,突然想到说现在vetex shader已经可以访问纹理资源了,可以把访问高度图的操作转移
到vetex shader中去做计算,GPU访问纹理的速度要比CPU访问内存快多了吧(我是这么认为的)。不过遇见一个问题。
用tex2D访问出来的值怪怪的,不是我要的高度纹理值,后来发现如果fragment shader里面访问了别的纹理会影响到vetex里
面的,上网google了一下,好多人都说得用 tex2DLod才行,试了下一点好转的迹象都没有,又有人说纹理得是float的,参照
着改了下,还是不行。(很多时候在网上查到的都不好用,当然也有好用的,有点废话,哈哈)
        后来突然发现我的sampler都没有跟寄存器绑定,绑定了以后就好了,很奇怪,难道说只调用cgGLSetTextureParameter
并不能实现纹理的绑定?   现在我把所有sampler都跟一个寄存器绑定后就一切正常了。

就像这样:
//--------------------------------------------------------------------------------
sampler2D t10 :TEXUNIT0;//地面高度图,    其他的sampler也需要绑定到寄存器才会好用

OutPut xS_v(float4 ipos:POSITION,
            float2 tex:TEXCOORD0,
            float3 normal:NORMAL)
{
    OutPut OUT;                            //out是关键字
    ipos.y =tex2D(t10,tex).z*256;
//---------------------------------------------------------------------------------


cg语言运行出来的结果经常怪怪的,有一次我故意写错了一句话,结果编译也能通过,只是显示出来的完全不
是我想要的,有没有高人指点一下,多谢!!


不过把访问高度图改到用GPU访问纹理后,效果还是很明显的,速度提升了差不多一倍。
vertex shader  texture  访问纹理的方法_第1张图片



你可能感兴趣的:(vertex shader texture 访问纹理的方法)