float4x4 WVP;
texture cubeTexture;
sampler TextureSampler = sampler_state
{
texture = <cubeTexture>;
MipFilter = Point;
MagFilter = Point;
MinFilter = Point;
AddressU = Wrap;
AddressV = Wrap;
MaxAnisotropy = 16;
};
所以,如果我没有弄错的话,这会告诉采样器状态我正在使用什么纹理。 我对许多 Sprite 使用一个效果文件,因此这允许我使用一种纹理(图集)。 我可以将所有纹理图集合并到一本老爹图集中,但我担心会出现复杂情况。
有没有办法通过参数告诉像素着色器使用某个纹理? 我是 HLSL 新手,这让我很困惑。
最佳答案
如果你给你的着色器一个语义来引用寄存器,就像这样
// HLSL
sampler TextureSampler : register(s1);
然后您可以使用游戏代码中的 GraphicsDevice.Textures
属性在代码中分配纹理
// C#
Texture2D texture2D = Content.Load<Texture2D>("contentfile");
graphicsDevice.Textures[1] = texture2D;
我使用寄存器 1 而不是 0,因为 Spritebatch.Draw()
中的纹理参数使用寄存器 0。如果您不进行 spritebatching,请随意使用寄存器 0;
关于xna - 在 HLSL 中更改纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14637608/