PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage zu texture lookup in HLSL


pajofego
2004-05-25, 22:47:42
Ich habe folgenden simplen hlsl code:

In Pixelshader "ps1" schreibe ich in die 100x100 große Texture Tex1 (Anmerkung: über ID3DXRenderToSurface) die Texturcoordinaten rein. Im Pixelshader "ps2" wird über eine Texturlookupfunktion der Inhalt ausgelesen und da habe ich folgendes Problem:

Beim debuggen von ps2 lese ich für pos2 die Werte (0, 0.99) aus. In der Variable "Inhalt" stehen dann aber die Werte (0, 0.01, *, *). Ich hätte eigentlich die gleichen Werte erwartet wie für pos2. Kann mir jemand vielleicht erklären warum die y Koordinate vertauscht ist?

Danke!


/////////////////////////////////////////////////////
// VARIABLES
/////////////////////////////////////////////////////
texture Tex1
/////////////////////////////////////////////////////
// STRUCTURES
/////////////////////////////////////////////////////
struct vertex2Pixel
{
float4 Position : POSITION;
float2 TexCoord : TEXCOORD0;
};
/////////////////////////////////////////////////////
// Sampler
/////////////////////////////////////////////////////
sampler SampleTex1 = sampler_state
{
Texture = (Text1);

MinFilter = Point;
MagFilter = Point;
AddressU = Clamp;
AddressV = Clamp;
};

/////////////////////////////////////////////////////
// PIXELSHADER
/////////////////////////////////////////////////////
float4 ps1(vertex2Pixel v) : COLOR0
{
float2 pos1 = v.TexCoord;
return float4(pos1.x, pos1.y, 0, 0);
}

float4 ps2(vertex2Pixel v) : COLOR0
{
float2 pos2 = v.TexCoord;
float4 Inhalt = tex2D(SampleTex1, float2(pos2.x, pos2.y))
return Inhalt;
}

/////////////////////////////////////////////////////
// TECHNIQUES
/////////////////////////////////////////////////////
technique tps1 {

pass P0
{
VertexShader = NULL;
PixelShader = compile ps_2_0 ps1();
}
}

technique tps2 {

pass P0
{
VertexShader = NULL;
PixelShader = compile ps_2_0 ps2();
}
}

bendel
2004-05-26, 00:41:32
Die Texture- und Screenspacekoordinaten sind unterschiedlich. In diesem Fall ist der Nullpunkt der Y-Achse in einem Fall oben und im anderen unten. Außerdem geht der Screenspace ,zumindest wenn man das Resultat des Vertexshaders betrachtet( y/w) auch von -1.0 bis 1.0 statt wie bei der Texture von 0.0 bis 1.0.