2012-11-17 10 views

Antwort

4

Der Grund dafür ist, dass die Matrixmultiplikation in einer bestimmten Reihenfolge durchgeführt werden muss, um das richtige Ergebnis zu erzielen (wie Sie vielleicht bereits wissen).

Die Reihenfolge der Übersetzungen/Umdrehungen/Skalen erfolgt in umgekehrt Reihenfolge, wie Sie sie eingeben.

Also, wenn Sie etwas tun, wie folgt aus:

Camera.rotate(15, 0, 0); 
Camera.scale(.5f, .5f, .5f); 
Camera.translate(70, 70, 70); 

Sie zuerst 70,70,70 dann um 50% in alle Richtungen Skalierung zu übersetzen, dann 15 Grad um die X-Achse zu drehen.

Also Matrix hat eine Pre-und Post-Übersetzung (gut, vor und nach allem), weil Sie es vielleicht zuerst um 15 Grad drehen und dann übersetzen und dann schließlich skalieren.

So dass die Pre- und Post übersetzt. Der Grund, warum Camera gerade rotiert und übersetzt, ist für Leute, die wissen, wie das funktioniert (wie ich!), Also benutze ich nie Matrix oder Camera, weil ich meine Drehungen und Übersetzungen einfach direkt auf Canvas machen kann. Sie können auch, solange Sie wissen, dass Übersetzungen, Skalen und Drehungen in umgekehrter Reihenfolge erfolgen.

Auch, wenn Sie wissen, was ich Ihnen gesagt habe, gibt es Ihnen mehr Macht. Sie können eine Sequenz von 10 Matrizen erstellen, ohne sie in mehrere Matrix-Objekte für jeden zu integrieren (z. B. möchten Sie eine Schwingbewegung ausführen, die nach außen schwingt und sich um das Zentrum dreht, um die Zentrifugalkraft zu simulieren). Dies müsste mit mehreren Drehungen und Translationen geschehen (umgeben von mehreren Matrix-Objekten, die ineinander übergehen), aber wenn Sie wissen, wie jeder Übersetzer funktioniert, können Sie einfach eine Reihe von .translate(), .rotate(), und .scale().

Diese Informationen sind besonders nützlich, wenn Sie 3D-Grafiken machen, da diese Matrizen den Leuten Kopfschmerzen bereiten.

Ich hoffe, das hilft!

+1

Führst du mich zu einer Dokumentation, dass du diese Tatsache gefunden hast? – hasanghaforian

+0

können Sie bitte einen Link angeben, der Ihre Antwort unterstützt? –

+0

Oh mein. Es ist lange her, seit ich das geschrieben habe, und es klingt arrogant, um es gelinde auszudrücken. Die Dokumentation kann auf wikipedia, speziell gefunden werden: http://en.wikipedia.org/wiki/Transformation_matrix#Composing_and_inverting_transformations "Beachten Sie, dass die Multiplikation in umgekehrter Reihenfolge aus dem englischen Satz erfolgt: die Matrix von" A folgte von B "ist BA, nicht AB." –

1

wäre das Ergebnis visuell das gleiche, wenn Sie das heißt die Leinwand nicht berühren, sondern die Kamera 90 ° auch oder halte Kamera noch drehen, aber drehen Sie die Leinwand es von -90 ° auch bei aussieht.

+1

Kennen Sie irgendwelche gute docs oder Tutorial in 3D über 'Android.Canvas'? Es scheint' Magic'and 'surd'. – hasanghaforian