- 最后登录
- 2016-10-1
- 注册时间
- 2013-12-28
- 阅读权限
- 90
- 积分
- 5805
- 纳金币
- 2954
- 精华
- 3
|
学shader时,这些函数看的迷迷糊糊,下表提供 Cg标准函数库中的纹理映射函数。所有的这些函数返
回四元向量值。
函数
tex1D(sampler1D tex, float s)
一维纹理查询
tex1D(sampler1D tex, float s, float dsdx, float dsdy)
使用导数值(derivatives)查询一维纹理
Tex1D(sampler1D tex, float2 sz)
一维纹理查询,并进行深度值比较
Tex1D(sampler1D tex, float2 sz, float dsdx,float dsdy)
使用导数值(derivatives)查询一维纹理, 并进行深度值比较
Tex1Dproj(sampler1D tex, float2 sq)
一维投影纹理查询
Tex1Dproj(sampler1D tex, float3 szq)
一维投影纹理查询,并比较深度值
Tex2D(sampler2D tex, float2 s)
二维纹理查询
Tex2D(sampler2D tex, float2 s, float2 dsdx, float2 dsdy)
使用导数值(derivatives)查询二维纹理
Tex2D(sampler2D tex, float3 sz)
二维纹理查询,并进行深度值比较
Tex2D(sampler2D tex, float3 sz, float2 dsdx,float2 dsdy)
使用导数值(derivatives)查询二维纹理,并进行深度值比较
Tex2Dproj(sampler2D tex, float3 sq)
二维投影纹理查询
Tex2Dproj(sampler2D tex, float4 szq)
二维投影纹理查询,并进行深度值比较
texRECT(samplerRECT tex, float2 s)
texRECT (samplerRECT tex, float2 s, float2 dsdx, float2 dsdy)
texRECT (samplerRECT tex, float3 sz)
texRECT (samplerRECT tex, float3 sz, float2 dsdx,float2 dsdy) 89
texRECT proj(samplerRECT tex, float3 sq)
texRECT proj(samplerRECT tex, float3 szq)
Tex3d(sampler3D tex, float s)
三维纹理查询
Tex3D(sampler3D tex, float3 s, float3 dsdx, float3 dsdy)
结合导数值(derivatives)查询三维纹理
Tex3Dproj(sampler3D tex, float4 szq)
查询三维投影纹理,并进行深度值比较
texCUBE(samplerCUBE tex, float3 s)
查询立方体纹理
texCUBE (samplerCUBE tex, float3 s, float3 dsdx, float3 dsdy)
结合导数值(derivatives)查询立方体纹理
texCUBEproj (samplerCUBE tex, float4 sq)
查询投影立方体纹理
s象征一元、 二元、 三元纹理坐标; z代表使用“深度比较 (depth comparison) ”
的值;q表示一个透视值(perspective value,其实就是透视投影后所得到的齐次坐
标的最后一位) ,这个值被用来除以纹理坐标(S) ,得到新的纹理坐标(已归一
化到 0和 1之间)然后用于纹理查询。
纹理函数非常多,总的来说,按照纹理维数进行分类,即:1D纹理函数,
2D纹理函数,3D纹理函数,已经立方体纹理。需要注意,TexREC函数查询的
纹理实际上也是二维纹理。
3D纹理,另一个比较学术化的名称是“体纹理(Volume Texture)”,体纹理
通常用于体绘制, 体纹理用于记录空间中的体细节数据。 通常的二维纹理如图 14
左边所示,记录每个三角面皮上的颜色信息,但并不会记录体内的信息;体纹理
记录三个方向,从里到外的信息,如图右边所示。在第15章和 16章将会详细阐
述体绘制算法和体纹理知识。
还有一类较为特殊的纹理查询函数以 proj 结尾,主要是针对投影纹理进行
查询。所谓投影纹理是指:将纹理当做一张幻灯片投影到场景中,使用投影纹理
技术需要计算投影纹理坐标,然后使用投影纹理坐标进行查询。使用投影纹理坐
标进行查询的函数就是投影纹理查询函数。
本质来说,投影纹理查询函数和普通的纹理查询函数没有什么不同,唯一的
区别在于“投影纹理查询函数使用计算得到的投影纹理坐标,并在使用之前会将
该投影纹理坐标除以透视值”。举例而言,计算得到的投影纹理坐标为 float4
uvproj,使用二维投影纹理查询函数:
tex2Dproj(texture,uvproj);
等价于按如下方法使用普通二维纹理查询函数:
float4 uvproj = uvproj/uvproj.q;
tex2D(texture,uvproj);
|
|