2009-05-16 15 views
1

Wie schließlich, papervision3d (das beliebte 3D-Rendering-Paket für Flash) gezeichnet Texturen auf den Bildschirm zeichnen?Wie transformiert Papervision3d Texturen?

Wird intern eines der Flash-Rendering-Geräte verwendet - d. H. Indem Sie Texturen in DisplayObjects zeichnen und transformieren, oder zum Beispiel mit 3D MovieClips? Oder vielleicht Filter? Oder liest es letztendlich nur Pixel aus den Texturen und malt sie in die Ausgabe, wie Sie es in jeder Softwareplattform tun würden?

Ich frage, weil die einfache Antwort die letztere wäre, aber nach ein wenig Test scheint es, dass getPixel und setPixel einfach nicht schnell genug für diese Art von Ansatz sind, so dass es scheint, als müsse etwas arkaner gehen auf.

Danke für jede Info!

Bearbeiten - meine Zusammenfassung der Antwort: Papervision macht nicht perspektive Transformationen. Es skaliert und verzerrt nur Transformationen auf jedem Texturdreieck, und die Illusion der Perspektive entsteht, wenn Sie genügend Dreiecke verwenden. Die affinen Transformationen nutzen das Flash-Rendering-Gerät, so dass kostspielige Pixeloperationen vermieden werden.

Antwort

5

Es wird alles mit der Zeichen-API gerendert. (lineTo) Mit der Zeichen-API können Sie eine BitmapFill-Ratehr als eine Farbe festlegen, mit der Sie Texturen zeichnen können. Intern konvertieren sie jedes Asset, das Sie als Textur übergeben, in ein BitmapData-Objekt, das beim Rendern verwendet wird. Dann für immer Unterteilung (Dreieck), die Ihr 3D-Objekt hat, präfrom Transformationen darauf, um die richtigen Perspektiven zu bekommen.

Dieser Ansatz ist immer noch sehr prozessorintensiv, aber schneller als jedes Pixel setzen. Es funktioniert ähnlich wie andere 3D-Rendering-Softwares und verwendet die Smae-Techniken und -Theorien, die speziell für ActionScript entwickelt wurden.

+0

Vielen Dank für die Antwort! Aber du hast mich beim Schritt "Transformationen ausführen" verwirrt. Wenn sie sich mit irgendeiner Art von Pixel umwandeln, müssen dann nicht alle Pixel in den transformierten BitmapDaten abgerufen und gesetzt werden? Oder Sie könnten einen DisplacementMapFilter verwenden, aber Sie müssten dennoch jedes Pixel in der Karte festlegen. Oder meinst du, dass die Transformation mit Flash-Rendering-Gerät getan wird (d. H. In eine MC malen, transformieren und in eine Bitmap zurückziehen)? Das scheint machbar, aber dann scheint es, als wären Sie auf affine Transformationen beschränkt, so dass es keine Perspektive geben würde. – fenomas

+0

Wenn Sie eine BitmapFill festlegen, können Sie auch eine Matrix definieren, die beim Zeichnen verwendet wird. Diese Matrix transformiert die Bitmap so, wie sie gezeichnet wird. (zum Beispiel Schrägbild des Bildes) Dies ist Verschleiß Dreiecke ins Spiel kommt. Ein Rechteck ist in zwei (oder mehr) Dreiecke unterteilt. Beim Zeichnen wird die Bitmap für jedes Dreieck anders ausgerichtet, um die richtige Perspektive zu erhalten. Je mehr Unterteilungen, desto besser ist die Genauigkeit. –

+0

AH! Ich verstehe es jetzt, es macht überhaupt keine perspektivische Transformation - es macht affine Verzerrungen, und die Illusion der Perspektive entsteht, wenn mehr Unterteilungen verwendet werden. Verstanden, vielen Dank! – fenomas