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