私はDirectXを学び、HLSLコーディングに移行しました。私のカスタム.fxファイルを使用する前に、クワッドの頂点バッファを持つゲーム用のスカイボックスを作成しました。すべてうまくいきました...テクスチャがマップされ、美しく包まれました。しかし、頂点を管理するためのHLSLセットアップがあるので、クワッドが合う特徴的な継ぎ目があります。テクスチャはすべて適切に整列しています。私はちょうどこの気味の縫い目を取り除くことができません!HLSLとDXスカイボックスの問題(継ぎ目の作成)
私はこの問題がtexCube ...というか、むしろすべてのテクスチャ情報がここにあると思う傾向があります。私はDXのクワッドをテクスチャリングしています...それはまだ私はまだ2つの間のリンクを取得していない可能性があります。とにかく事前に助けてくれてありがとう!
相続人のFreeBSDファイル:
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();
}
}
私はクランプのコンセプトを理解しています...そして述べたように、HLSLの外にあるこのスカイボックスには問題ありません...クワッドがレンダリングされた後にレンダリング状態を設定すると、完全に動作します。問題はシェーダを使用しているためです。問題は.fxファイルから来ています。 ここではtex座標にCLAMPパラメータを使用していますが、それは動作しません。折り返し(ここで使用しているもの)は機能しますが、継ぎ目があります。私は四角形からボックスを作ったので、私はそれを仮定していますが、私はHLSLのtexCUBE関数を使っています。実際のトラブルは私が代わりに使うべきものです。(私が正しいと仮定して) –
FYI私はちょうどあなたのシェーダを試して、それは縫い目なしで働いた。おもちゃ用には – CarlJohnson
+1。 – Jono