如何在HLSL中获得纹理大小?

时间:2013-11-11 15:09:27

标签: xna textures hlsl

对于我正在研究的HLSL着色器(用于练习)我正在尝试执行代码的一部分,如果纹理坐标(在模型上)超过相应大小的一半(即x > width / 2y > height / 2)。我熟悉C / C ++并且了解HLSL的基础知识(非常基础)。如果没有其他可能的解决方案,我将使用XNA手动设置纹理大小(其中我正在使用着色器,事实上)。有更好的解决方案吗?我想尽可能保持在Shader Model 2.0中。

2 个答案:

答案 0 :(得分:2)

默认纹理坐标空间规范化为0..1,因此x > width / 2应该只是texcoord.x > 0.5

答案 1 :(得分:1)

这里要小心。 tex2d()和其他纹理调用应 NOT 在if()/ else子句中。因此,如果你有一个像素着色器输入“IN.UV”并且你的目标是“OUT.color”,你需要这样做:

float4 aboveCol = tex2d(mySampler,some_texcoords);
float4 belowCol = tex2d(mySampler,some_other_texcoords);
if (UV.x >= 0.5) {
   OUT.color = /* some function of... */ aboveCol;
} else {
   OUT.color = /* some function of... */ belowCol;
}

而不是在if()块中放入teh tex()调用。

相关问题