xna - 在 HLSL 中更改纹理

标签 xna textures

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/

相关文章:

c++ - DirectX Clip 空间纹理坐标

animation - 更新的纹理在three.js 中停止动画

c# - 显示窗口 15 分钟后崩溃

c# - XNA 3D 程序的正确 OOP 设计是什么?

java - 如何将视频输出到Java中的纹理?

python - 如何使用 Python 在 Blender 2.49 中设置世界背景纹理?

C# 'get' 访问器无法识别

c# - 性能:Vector2 与 x/y

.net - 我的用例是否需要 XNA 或者我可以使用 silverlight (Windows Phone 7)?

尝试呈现 SDL_Texture : Invalid texture 时出现 C++ SDL2 错误