我正在(重新)学习 DirectX 并已进入 HLSL 编码。在使用我的自定义 .fx 文件之前,我为带有四边形顶点缓冲区的游戏创建了一个天空盒。一切正常...纹理映射和精美包装。然而,现在我已经设置了 HLSL 来管理顶点,四边形相交的地方有独特的接缝。纹理都正确排列我只是无法摆脱这个该死的接缝!
我倾向于认为问题出在 texCube 上……或者更确切地说是这里的所有纹理信息。我正在 DX 中对四边形进行纹理处理……可能只是我仍然不太了解两者之间的联系……不确定。无论如何,提前感谢您的帮助!
这是 .fx 文件:
float4x4 World;
float4x4 View;
float4x4 Projection;
float3 CameraPosition;
Texture SkyBoxTexture;
samplerCUBE SkyBoxSampler = sampler_state
{
texture = <SkyBoxTexture>;
minfilter = ANISOTROPIC;
mipfilter = LINEAR;
AddressU = Wrap;
AddressV = Wrap;
AddressW = Wrap;
};
struct VertexShaderInput
{
float4 Position : POSITION0;
};
struct VertexShaderOutput
{
float4 Position : POSITION0;
float3 TextureCoordinate : TEXCOORD0;
};
VertexShaderOutput VertexShaderFunction(VertexShaderInput input)
{
VertexShaderOutput output;
float4 worldPosition = mul(input.Position, World);
float4 viewPosition = mul(worldPosition, View);
output.Position = mul(viewPosition, Projection);
float4 VertexPosition = mul(input.Position, World);
output.TextureCoordinate = VertexPosition - CameraPosition;
return output;
}
float4 PixelShaderFunction(VertexShaderOutput input) : COLOR0
{
return texCUBE(SkyBoxSampler, normalize(input.TextureCoordinate));
}
technique Skybox
{
pass Pass1
{
VertexShader = compile vs_2_0 VertexShaderFunction();
PixelShader = compile ps_2_0 PixelShaderFunction();
}
}