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();
}
}
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();
}
}