3D-Objekt auf 2D-Oberfläche rendern (eingebettetes System)

9

Ich arbeite an einem eingebetteten System und möchte in einiger Freizeit seine Zeichenfähigkeiten testen.

Bei dem fraglichen System handelt es sich um einen ARM Cortex M3-Mikrocontroller, der an die EasyMX Stellaris-Karte angeschlossen ist. Und ich habe einen kleinen 320x240 TFT Bildschirm :)

Jetzt habe ich jeden Tag etwas Freizeit und möchte einen rotierenden Würfel erstellen. Micro C PRO für ARM verfügt nicht über 3D-Zeichenfunktionen, was bedeutet, dass dies in Software erfolgen muss.

Aus dem Buch Einführung in die 3D-Spielprogrammierung mit DirectX 10 kenne ich die Matrixalgebra für Transformationen, aber das ist cool, wenn Sie DirectX haben, um die Kamera richtig einzustellen.

Ich denke, ich könnte 2D-Objekte zum Drehen bringen, aber wie würde ich mit 3D-Objekten vorgehen?

Ideen und Beispiele sind willkommen. Obwohl ich Ratschläge bevorzugen würde. Ich würde das gerne verstehen.

Martin Berger
quelle
@Marin Was hast du bisher gemacht? Ich versuche das gleiche zu erreichen. Bitte kontaktieren Sie mich Skype: andreahmed
Ahmed Saleh

Antworten:

7

Sie wissen, dass eine directX-Kamera nur ein paar Matrixtransformationen sind? Sie haben eine ModelView-, Projektions- und dann eine Ansichtsfenster-Matrixtransformation für jeden Scheitelpunkt in dieser Reihenfolge, um die 3D-Koordinaten in 2D-Koordinaten zu ändern.

Weitere Details zur Transformation entlang der Standard-Pipeline (ich glaube, DirectX und OpenGL funktionieren beide auf die gleiche Weise).

Dann rastern Sie die Dreiecke basierend auf den 2D-Positionen (die sich aus Ihren Transformationen ergeben haben) des jetzt 2D-Arrays von Scheitelpunkten, die Sie haben. Dies kann schnell kompliziert werden, aber die Verwendung des PIT-Tests und das vollständige Färben aller kollidierenden Pixel sollte in Ihrem Fall einfach und effektiv sein.

Die andere und einfachere Möglichkeit besteht darin, einen Raytracer zu erstellen. Projizieren Sie den Strahl einfach mit der Transformationsmatrix, die Sie auf Ihr Objekt anwenden möchten.

Ich habe seit einiger Zeit nicht mehr mit Sachen auf niedrigem Niveau herumgespielt, daher erinnere ich mich vielleicht falsch, aber beide Routen sollten nicht zu schwer sein. Verstehen Sie, wie die Hardware-Pipeline funktioniert, und implementieren Sie sie in Software oder schreiben Sie einen Ray Tracer.

Übrigens habe ich hier gelernt, was ich über die Grafik-Pipeline weiß.

ClassicThunder
quelle
Jede programmierbare Pipeline-Referenz für OpenGL wäre ebenfalls nützlich, da alle Transformationen jetzt manuell codiert werden.
edA-qa mort-ora-y
@ Klassischer Donner. Über die Kamera: Ja, das merke ich. Aber ich weiß nicht, wie ich das alles auf dieses System übertragen soll. Ich dachte, dass es vielleicht eine Art Gleichung gibt, um dies zu tun. So entziehen Sie sich den Matrixberechnungen. Vielleicht habe ich die Frage nicht sehr gut geschrieben. Über Pipeline: Sie sind gleich. Vielen Dank!
Martin Berger
3

In den Tagen, als 3D-Hardware nicht verfügbar war, mussten wir unsere eigenen 3D-Engines und Polygon-Rasterizer bauen. 3DICA ist ein großartiges Tutorial, das alle Grundlagen einer Software-3D-Engine erklärt. Für mich werden die Bilder in Firefox nicht angezeigt, aber in Internet Explorer funktionieren sie einwandfrei.

Die Kapitel 2.1 und 3.1 sollten ausreichen, um Ihre Anforderungen zu erfüllen, aber das Lesen des gesamten Tutorials sollte Ihnen viel beibringen.

msell
quelle
Beeindruckend. Gutes Zeug. Ich denke, dass das einzige, was ich von dieser Seite nicht weiß, Teil von Splines ist. Ich habe keine Zeit, mich eingehend damit zu befassen. Zur Zeit. Danke für die Nachricht.
Martin Berger