leichtes rucken bei 2D Animation
-
Ich versuche zzt eine Kleine Animation in 2D zu zeichnen allerdings macht mir ein leichtes rucken zu schaffen.
Das ist die Textur die ich benutze (die Hintergrundfärbung ist zur Fehelranalyse gedacht). http://img16.imageshack.us/img16/6765/testcursor2.png
Die einzellnen Felder sind 32x42 Pixel groß und sollen als Mausanimation genutzt werden. Die Fläche auf die die Textur gezogen werden soll ist auch exakt so groß und auch um 0,5 versetzt, so das sie direkt auf den Pixelgrenzen endet.
Die Texturkoordinaten stimmen auch (also 0,0 31,41 (jeweils /255) für die 1. Fläche etc). Das Problem da sich jetzt habe ist das die Darstellung leicht Ruckelt, Von der Textur werden nur 31x41 Pixel übertragen. Im Betrieb sieht das ganze dann so aus, das eine senkrechte und eine waagerechte Pixelreihe fehlt. Wenn ein Feld ganz links auf der Textur dran ist ruckt die gezeigte Textur nach rechts und der rechte senkrechte Streifen fehlt, je weiter das Feld das gerade genutzt wird rechts liegt umso weiter wandert die Textur dann nach links bis dann der linke senkrechte Streifen fehlt. Dadurch kommt es zu einem Ruck in der Animation der auch sehr gut sichtbar ist, waagerecht tritt das selbe Phänomen auf.Meine Frage ist jetzt wie bekomme ich das ganze weg?
-
such mal nach pixelcenter oder texelcenter (auch hier im forum gab es threads dazu afaik), vielleicht liegt es ja daran.
-
Hab ich schon gemacht ich hab mir auch im SDK schon "Directly Mapping Texels to Pixels" angeschaut, aber da finde ich auch keine Lösung raus.
Die Fläche auf die die textur soll folgt schon dem Pixelcenter, ist also in jede Richtung auf 0.5 vergrößert so das sie genau bis zur Grenze des Nächsten Pixels geht, und die Gesammtfläche ist auch Exakt so groß wie der Texturausschnitt, 1:1 Übertragung wäre also Möglich, passiert aber aus irgendeinem Grund nicht. Was die Texel angeht habe ich das ganze so verstanden das die Textur wie ein Array gesehen werden kann und die Koordinate ein bestimmtes Texel anspricht, somit wären ganzzahlige werte ja das Texelcenter, oder verstehe ich da was falsch?
Hier ist ein Schema wwelcher Ausschnitt genommen wird:
http://img23.imageshack.us/img23/6296/scheman.pngDie Flächen die Kopiertw erden solen sind abwechselnd Geld und Rot, die Grüne Fläche ist das was Tatsächlich kopiert wird. Hier leicht übertrieben dargestellt, in meinem Fall beduetet das oben links ignoriert die Pixelreihe ganz rechts, oben rechts die Ganz links und die Fläche oben Mitte ignoriert von rechts und links je 50%, das läst sich Beliebig über eine ganze Textur interpolieren. Texturkoordinatenfehler schließe ich aus, da 0,0 31,31 ja eigentlich ein 32x32Pixel feld übertragen solte.
-
Ich konnte das ganze jetzte rstmal Lösen, hab allerdings iemmrnoch keine Erklrung dafür gefudnen. Meine Lösung für das ganze sieht so aus:
(LinkesX-(LinkesX*(1.0f/Texturbreite)))/Texturbreite
(RechtesX+((Texturbreite-RechtesX)*(1.0f/Texturbreite)))/TexturbreiteLinkesX bzw RechtesX sind die Texturkorodinaten die ich eigentlich benutzen würde (also 0 31 für 32Pixel). Durch die Formeln wird exakt das aus der Textur genomemn das ich will, ich fidne es nur nachwievor sehr merkwürdig das ich den Bereich damit breiter ziehen muß nur um zu bekommen wa sich eigentlich wollte.
Wäre dankbar wenn jemand ne Erklärung hätte wieso das nur so Funktioniert aber nicht wenn cih die eigentlichen Koordinatend er Pixel nehme.
-
naja, du musst die koordinaten 0 bis 32 angeben damit 0 bis einschliesslich 31 als texel benutzt werden (bzw half pixel offset, je nach API). Das stand hier in den threads und in der Dx doku eigentilch.
oder hab ich deine frage missverstanden
-
Ne du ahst sie nicht falsch verstanden. In der DX Doku hab ich davon leider nichts gelesen, entweder hab ich das überlesen oder hatte die Seite wo es steht schlicht nicht gesehen. Es ist aber gut zu wissen das es eine API sache ist, mit +1 bzw halber Pixel bekam ich allerdings keine so guten Ergebnisse, mit der Formel bekomme ich 1:1 exakt das was ich wollte. Danke dir.
-
um es mal aus den anderen threads zu kopieren,
http://msdn.microsoft.com/en-us/library/bb147314(VS.85).aspx
-
Die regeln kenne ich ja, darum gings mir auch garnicht, mir ging es um die tatsache das ich einen teil eienr textur raufkopieren woltle, Kopieren der Pixel 1:1 Möglich gewesen wäre (da gleiche Fläche) aber stattd er Fläche die ich ind en texturkoordinaten angegeben hatte wurde imemr ein Teil an jeder Seite, jenachdem wo auf der Textur die fläche war, unetrschlagen, das kontne ich nur mit der Formel oben lösen.