Hallo zusammen, meine Frage ist vielleicht völliger Quatsch, aber sie interessiert mich schon seit längerem. Bis jetzt habe ich mit einem AVR und einem LCD Display eine Art "Gameboy" gebaut in dem der AVR als Baasic Interpreter arbeitet. Meine Frage ist nun, ob es möglich wäre mit einem Mikrocontroller (vielleicht lpc21xx) eine kleine 3D-Engine zu programmieren? Als ausgabe würde ich dafür gerne meine Ausgabekarte für einen VGA Monitor benutzen, die eine Auflösung von 320x240 pder 160x120 unterstützt. Wäre soetwas grundsätzlich möglich, oder sind solche Mikrocontroller einfach zu schwachbrüstig? Wäre über jegliche Tipps dankbar Thomas
also ein PII300 wuerde es sicher schaffen nur fraglich ist das mit dem aufwand =) kleinere 3d modelle hmmh evtl, wenn wenn wenn...
Mit einfachen 3D Routinen (drehendes Wireframe Modell) schaffte ein mega8515 etwa 5000-10000 Pixel/s. Auf einem 160x128 LCD machte das etwa 10-15fps.
Das ist wohl eine Frage der Rechenleistung und der effizienz, mit der die Daten zum Display transportiert werden. Wolfenstein lief damals ab 386sx mit 16Mhz, und die hatten gerade mal 3 oder 4Mips, wenn ich mich recht erinnere. Das müsste son AVR locker schaffen. Allerdings wurden die Daten zur VGA-Karte auch paralell über einen 16Bit breiten Bus übertragen. Ich denke, so eine optimierte Verbindung hast du zu deinem LCD nicht, oder?
Hallo Thomas, ich würde sagen dass vor allem wichtig ist, dass der verwendete Mikrocontroller/Mikroprozessor vor allem mit Gleit-/Fixpunkt-Zahlen in Hardware umgehen können sollte, da gerade für 3D-Anwendungen diese m.E. relevant sind. Letztendlich kommt es aber wohl darauf an was genau Du unter einer "kleinen 3D-Engine" verstehst. Grüße, Marco.
Danke für die schnellen Atnworten!! Also, es gibt ja manche LPC´s oder AVR´s mit externem Datenbus. Da meine "Grafikkarte" einen eigenen Controller hat würde es ja reichen, wenn der AVR oder LPC die Daten in einen Ram schreibt und die Grafikkarte diese einfach ausgibt. Wenn man z.B. einen Dual-Port Ram (oder wie die heißen) nehmen würde, dann bräuchte der AVR oder LPC nur noch die fertig berechneten Pixel dort reinschreiben, den Rest macht die Grafikkarte. Zu den Gleitkommazahlen: Wenn ein 386sx Wolfenstein schafft, der aber meiner Meinung nach auch ohne Coprozessor keine Gleitkommazahlen berechnen kann, dann dürfte das ein LPC ganz locker hinbekommen, oder? Gruß Thomas
Sorry, hab noch was vergessen: Also unter kleiner 3D-Engine stell ich mir etwa so etwas vor, mit dem ich eine Grafik wie Wolfenstein oder Doom bekomme, besser wäre Doom ;-) Gruß Thomas
Hmmm, hört sich interessant an, hatte schon mal ähnliches vor, aber wegen mangels eingestellt... Es gibt open source spieleconsolen, da mal umsehen... Ansonsten, warum ich gescheitert bin: 640*480*256 = 80KByte "Grafikspeicher" Eventuel ist es möglich das ganze zu Teilen: 1. Teil "Grafikkarte" (AVR, DRAM, LCD) 2. CPU --> in dem AVR als Baasic Interpreter arbeitet. Source bitte ??? Sowas suche ich... Lg Christian
Hallo Thomas, wegen Gleitkommazahlen: 3D-Grafik basiert sehr viel auf den trigonometrischen Funktionen, deren Ausführung ohne FPU nicht gerade flott ist. Natürlich kann man auch eine Art Look-Up-Tabelle verwenden und so die Berechnung garnicht mehr auf dem Zielsystem durchführen. Ich nehme mal an dass das früher eben auch so bei den 3D-Spielen gemacht wurde. Wichtig bei so "geringer" Rechenleistung ist dann natürlich auch effiziente Programmierung. Ich würde an Deiner Stelle vielleicht erstmal mit einfachen Drahtgittermodellen anfangen. Grüße, Marco.
/* Mit einfachen 3D Routinen (drehendes Wireframe Modell) schaffte ein mega8515 etwa 5000-10000 Pixel/s. */ Hättest genauso "100-10000 Pixel/s" schreiben können, hat den gleichen Informationsgehalt. Nach dem Motto, das Auto kostet etwa 30000-60000 Euro.
px=x*zoom/z; py=y*zoom/z; mit dieser Formel kommt man aus, um die Position eines Texels auf den zweidimensionalen Bildschirm zu projezieren. Darauf basiert quasi schon die Renderingengine von Wolfenstein.
http://www.mikrocontroller.com/ und dort unter M16C gibt es ein Bild von einer animierten 3D Vektorgrafik.
@ Christian Sorry, aber ich arbeite zur Zeit erst an dem Gameboy, habe mich oben bischen falsch ausgedrückt. Bis jetzt kann der AVR nur einfache Rechenoperationen (ohne Klammer usw.) und Texte ausgeben. Ich dachte mir halt, bevor ich das feritg programmiere, frage ich erstmal, ob auch 3D möglich wäre, weil dann wäre mit großer Wahrscheinlichkeit mein Interpreter umsonst gewesen. Aber so wie es aussieht scheint das alles sehr kompliziert zu werden :-( Ich habe mal eine Idee, wie man vielleicht einfach 3D Szenen darstellen könnte. Die 3D Welt besteht aus den Koordinaten x,y und z. Wenn man nun das Koordinatensystem von oben betrachtet, sieht man ja die x und z Achse. Nun legt man auf beide Koordianten ein Raster, so das Vierecke entstehen. Die Objekte bestehen nun aus Stäben, die die senkrecht stehen und immer genau so ein Viereck ausfüllen. Die Stäbe fangen nun bei einer bestimmten y Position an und auch wieder auf. Wenn ich nun von einem Virtuellen Auge aus einen Strahl "aussende", der nun alle Vierecke die er schneidet in einer Liste aufschreibt, so müsste ich nur so viele Strahlen aussenden, wie die Pixelbreite des Bildschirms. Damit ich nun noch die y Informationen bekomme, so überprüfe ich von jeden geschnittenem Viereck die anfangs und end Koordinaten der y Achse und rechne diese mit dem Satz des Pythagoras(abstand des x,z Rasters zum Auge und dem Höhenunterschied zum Auge) in einen Winkel um, der dann einer y Koordiante auf dem Bildschirm entspricht. Das ist zwar ähnlich wie das raytracing, aber wenn es funktioniert und ein vielfaches einfacher. Durch das x,z Raster ist natürlich dann die Genauigkeit der Oberfläche eines Objekts begrenzt. Naja, ich hoffe ihr versteht in etwa was ich damit meine Gruß Thomas
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.