Ich versuche im Moment eine 3D-Engine für Spiele und ähnliches zu schrieben. Zielplattform sieht wie folgt aus: - STM32F4 - Greyscale LCD, im moment 96*64, ich möchte aber auch andere Auflösungen unterstützen - Auf Texturen/Licht verzichte ich, weil eh nur 5 Graustufen zur Verfügung stehen - Möglichst anwenderfreundlich Ich habe vor ein paar Monaten mal hier Beitrag "Gesucht: 3D Rendering Routinen in C" nach Rendermöglichkeiten gefragt. Da das Projekt viele Teile beinhaltet gehts erst jetzt mit der Engine weiter... Nachdem nun das Grundgerüst läuft, stellt sich mir natürlich die Frage der Schnittstelle: Ich möchte Objekte kreieren können (z.B. einen Würfel), welche ich zu einem späteren Zeitpunkt skalieren, drehen etc. kann. Dazu hätte ich dann viele Klassen, welche jeweils zum Beispiel einen Würfel darstellen: Parameter wie -Mittelpunkt -Kantenlänge -Rotation Jetzt sehe ich 2 Ansätze: 1. Es gibt einen Polygon-Buffer, der als Eingabe der Renderfunktion dient. Wenn zum Beispiel ein Würfel gereut wird, dann dient die Funktion würfel1.rotate() dazu, die 12 Einträge im Polygon-buffer zu aktualisieren. Vorteil wäre ein Schnelles erzeugen des Bildes. 2. Es gibt keinen Buffer, Bei jedem Aufruf der Renderfunktion wird jedes einzelne Objekt neu aus seinen Attributen berechnet. Vorteil wäre, dass die 37 Byte Buffer/Polygon nicht benötigt werden (ein Polygon ist 37 Byte gross). Welche der 2 Möglichkeiten soll ich wählen? Ich hätte am liebsten die 2. Variante, aber da sehe ich ein weiteres Problem: Jedes Objekt vom typ Cube hat eine Funktion wie folgt: cubex.return_polgons() Das heisst für JEDES Objekt muss die aufgerufen werden. Gibt es da irgendeine Möglichkeit dazu? Also dass die Funktion render() z.B. all das aufruft: cube1.return_polgons() cube2.return_polgons() cube54.return_polgons() cow123.return_polgons() house.return_polgons() usw. Weil bei Variante1 müsste man sich auf 2000 oder so Polygons pro Szene beschränken, und ich kann schlecht beurteilen, ob das in jedem Fall genug ist. Besten Dank, und Sorry dass es so lange geworden ist ;)
Hi Hast du denn schon eine Graphics Lib dafür ausgesucht? Du must ja auch Polygone zeichnen können (nicht ganz so einfach). Und wie bringst Du das auf das Display? Nur wire frame oder Z-Buffer algorithmus? Für meine eigene lib hab mich mal ein Demo geschrieben. Auf dem youtube Video ist das am Schluss zu sehen: https://code.google.com/p/ucglib/ Die Render Engine für den Würfel ist hier: https://code.google.com/p/ucglib/source/browse/sys/arduino/Box3D/Box3D.ino Viel Erfolg. Oliver
ucglib schrieb: > Hi > > Hast du denn schon eine Graphics Lib dafür ausgesucht? > Du must ja auch Polygone zeichnen können (nicht ganz so einfach). Jep, mehr oder weniger selber geschrieben, habe mich daran orientiert: http://www.sunshine2k.de/coding/java/TriangleRasterization/TriangleRasterization.html > Und wie bringst Du das auf das Display? Nur wire frame oder Z-Buffer > algorithmus? Später dann Z-Buffer, aber im Moment läuft es noch auf dem falschen Chip, weshalb ich zuwenig RAM dafür habe. Deshalb habe ich jetzt die Polygone anhand der Z-Koordinaten ihres Mittelpunktes sortiert und dann so gezeichnet. Gibt natürlich Artefakte, aber zum Testen reichte es. > Für meine eigene lib hab mich mal ein Demo geschrieben. Auf dem youtube > Video ist das am Schluss zu sehen: > https://code.google.com/p/ucglib/ > > Die Render Engine für den Würfel ist hier: > https://code.google.com/p/ucglib/source/browse/sys/arduino/Box3D/Box3D.ino > WOW, das sieht super aus, ich muss mir deine Lib mal genauer ansehen!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.