Ich benutze D3D10 und versuche gerade einfach nur ein paar Pointsprites zu rendern. Dazu benutze ich den GeoShader. Ich übergebe eine Pointliste mit den Punkten im WorldSpace, transformiere sie im VertexShader in den ViewSpace. Und erzeuge dann aus jedem Punkt 2 Dreiecke indem ich die Koordinaten aus der Pointliste um jeweils einen Pixel verschiebe:
Code: Alles auswählen
[maxvertexcount(4)]
void GS(point vs_output input[1], inout TriangleStream<vs_output> TriStream)
{
vs_output output;
output.Pos.x=input[0].Pos.x - 1 / SCREEN_WIDTH;
output.Pos.y=input[0].Pos.y - 1 / SCREEN_HEIGHT;
output.Pos.z=input[0].Pos.z;
output.Pos.w=input[0].Pos.w;
output.Color=input[0].Color;
TriStream.Append(output);
output.Pos.x=input[0].Pos.x - 1 / SCREEN_WIDTH;
output.Pos.y=input[0].Pos.y + 1 / SCREEN_HEIGHT;
output.Pos.z=input[0].Pos.z;
output.Pos.w=input[0].Pos.w;
output.Color=input[0].Color;
TriStream.Append(output);
output.Pos.x=input[0].Pos.x + 1 / SCREEN_WIDTH;
output.Pos.y=input[0].Pos.y - 1 / SCREEN_HEIGHT;
output.Pos.z=input[0].Pos.z;
output.Pos.w=input[0].Pos.w;
output.Color=input[0].Color;
TriStream.Append(output);
output.Pos.x=input[0].Pos.x + 1 / SCREEN_WIDTH;
output.Pos.y=input[0].Pos.y + 1 / SCREEN_HEIGHT;
output.Pos.z=input[0].Pos.z;
output.Pos.w=input[0].Pos.w;
output.Color=input[0].Color;
TriStream.Append(output);
TriStream.RestartStrip();
}
Hat jemand eine Idee, bzw. wie macht Ihr das, dass die Pointsprites immer genau 3x3 Pixel groß sind und nicht so hin und her "wabbern".
Vielen Dank!
Stephan