Я изучаю DirectX и перешел в кодирование HLSL. До того, как я использовал свой собственный .fx-файл, я создал skybox для игры с вершинным буфером quads. Все отлично работало ... текстура сопоставлена и завернута красиво. Однако теперь, когда у меня есть настройка HLSL для управления вершинами, есть отличительные швы, где встречаются квадроциклы. Текстуры все выстраиваются правильно, я просто не могу избавиться от этого проклятого шва!Проблемы с HLSL и DX Skybox (создает швы)
Я склонен думать, что проблема связана с 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();
}
}
Я понимаю концепцию зажима ... и, как сказано, у меня нет никаких проблем с этим skybox вне HLSL ... настройка состояния рендеринга после рендеринга квадрантов отлично работает. Проблема в том, что я использую шейдеры, поэтому проблема исходит из файла .fx. Теперь я использовал параметр CLAMP для координат tex, но он не работает ... wrap (то, что im использует здесь) работает, но я получаю швы. Я предполагаю, потому что я построил коробку из квадрациклов, но я использовал функцию texCUBE в HLSL. Значит, реальная проблема в том, что я должен использовать вместо этого?(при условии, что я прав) –
FYI Я просто попробовал свой шейдер, и он работал без швов. – CarlJohnson
+1 для томакера. – Jono