这是我的情景:
texture diffuseMap;
sampler2D diffuseSampler = sampler_state {
Texture = <diffuseMap>;
Filter = MIN_MAG_MIP_LINEAR;
AddressU = WRAP;
AddressV = WRAP;
};
我希望能够通过将参数传递给我的效果来更改我的C#应用程序中的diffuseSampler
过滤器值。以下是我拍摄的方式:
#define __DiffuseFilterLinear 0x0
#define __DiffuseFilterAnisotropic 0x1
#define __DiffuseFilterNearest 0x2
int diffuseMapFilter; // Here's where I'll assign, via my application,
// a hex value corresponding to one of the three
// #defines above
然后,在diffuseSampler
内,我想实现相当于使用条件设置Filter值,如下所示:
sampler2D diffuseSampler = sampler_state {
Texture = <diffuseMap>;
// Conditionals to pick the right Filter value
switch (diffuseMapFilter)
{
case __DiffuseFilterLinear:
Filter = MIN_MAG_MIP_LINEAR;
break;
case __DiffuseFilterAnisotropic:
Filter = ANISOTROPIC;
break;
case __DiffuseFilterNearest:
Filter = MIN_MAG_MIP_POINT;
break;
}
AddressU = WRAP;
AddressV = WRAP;
};
我知道尝试在采样器结构中插入一个开关块可能是一个异端,但我认为它说明了我想要做的事情。
如何根据diffuseSampler
参数设置diffuseMapFilter
过滤器值?
答案 0 :(得分:0)
着色器由顶点着色器和像素着色器组成。 3D模型流从应用程序流向顶点着色器,然后流向像素着色器,最后流向帧缓冲区。 a2v结构表示从应用程序传输到顶点着色器的数据结构,从顶点着色器到像素着色器的v2p,以及从像素着色器到帧缓冲区的p2f。下面的程序通过视图矩阵将顶点的位置转换为剪辑空间的位置。
struct a2v {
float4 Position : POSITION;
};
在HLSL函数中,struct a2v指定一个顶点结构,表示顶点的数据。
struct v2p {
float4 Position : POSITION;
};
struct v2p指定从顶点到像素着色器的流结构。 Position是float4声明的四维向量。此外,POSITION(称为输出语义)表示初始化的位置类型。
void main(in a2v IN, out v2p OUT, uniform float4x4 ModelViewMatrix)
{
OUT.Position = mul(IN.Position, ModelViewMatrix);
}