PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme beim 2D-Rendering


Asmodeus
2008-02-13, 17:48:28
Ich habe ein Problem beim 2D-Software-Rendering, wobei folgendes Beispiel die Sache veranschaulichen soll:

In der XY-Ebene liegen zwei Strecken parallel zur Y-Achse nebeneinander. Weiterhin existiert ein frei wählbarer Punkt in der Ebene der später die linke untere Ecke meines Bildbereiches bilden soll. Um nun die Möglichkeit zu haben, eine Zoomfunktionalität für die in meinem Bildbereich sichtbare Geometrie der Ebene zu implementieren, habe ich außerdem noch einen Skalierungsfaktor.

Jetzt gehe ich folgendermaßen vor:

Ich führe eine Translation für die Strecken um den negierten Punkt aus. Somit wird der Punkt mein neuer Ursprung und die Streckenkoordinaten liegen relativ dazu. Dann skaliere ich die Streckenkoordinaten, um die Zoomfunktionalität zu bekommen. Für jedes weitere Frame wird nun der Punkt ein Stück weiter in Richtung positive X-Richtung verschoben. Dadurch erhält man im Bildbereich den Eindruck, dass sich die beiden senkrechten, parallelen Strecken nach links bewegen.

Soweit zur Erklärung des Szenarios. Das Problem ist nun, dass im Bildbereich während dieser Bewegung der Abstand der beiden Strecken "pulsiert", also mal ein Pixel mehr, mal ein Pixel weniger beträgt. Alle Transformationen laufen mit float-Genauigkeit ab und die Koordinaten liegen nach der Skalierung etwa in der Größenordnung 100 bis 1000, also meiner Meinung nach auch vom Wertebereich her völlig unproblematisch. Wenn ich nun erst skaliere und dann die Translation durchführe, tritt das Pulsieren komischerweise nicht auf, der Abstand der beiden Strecken bleibt absolut stabil. Und ich habe keine Erklärung dafür.

Gruß, Carsten.

Asmodeus
2008-02-14, 10:11:30
Ich denke, ich kann den Effekt jetzt auf ein Rundungsproblem zurückführen:

Bei Frame a hat die erste Strecke die X-Koordinate: 122,841 und die zweite Strecke die X-Koordinate: 134,494. Die Differenz beträgt: 11,653.

Bei Frame a+1 hat die erste Strecke die X-Koordinate: 122,258 und die zweite Strecke die X-Koordinate 133,911. Die Differenz beträgt wieder genau: 11,653.

Im Float-Wertebereich bleibt also alles stabil. Doch egal welche mir bekannte "iround-Regel" ich anwende (Abschneiden oder auf den nächsten Integerwert runden oder +0,5 und dann abschneiden etc.) im Fixed-Bereich variieren die Differenzen dann immer um einen Pixel.

Gruß, Carsten.