Registriert: Mo Jan 20, 2003 20:10 Beiträge: 424 Wohnort: nähe Starnberg
Hallo,
ich bin auf der Suche nach Material für eine 2.5 D Engine. Auf dem Zielsystem, ein ARM ohne OpenGl oder OpenGL ES, möchte ich eine einfache 3D Landschaft darstellen. Die Betonung liegt auf einfach, eine Texturierung ist zur Zeit nicht angedacht. Ich muss nur bestimmte Punkte berechnen und diese auf dem Bildschirm anzeigen. Ich habe schon im Internet gesucht, aber meistens findet man mittlerweile nur noch Sachen, die auf eine Grafikschnittstelle aufbauen. Ich habe aber nur SDL zu Verfügung.
Naja, im Grunde muss das dann doch eh dasselbe machen, wie OpenGL. Wie OpenGL das macht, steht glaub ich irgendwo da im Wiki. Tut kenn ich aber keins. Ok, weiß jetzt nicht, ob du mit nur SDL einen DepthBuffer hast, wenn nicht dann kann das schon noch deutlich schwieriger bzw deutlich langsamer werden.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Welche Performance Ansprüche hast du? Welche FPS soll erreicht werden. Falls die niedrig sein kann, wäre vielleicht ein SW Renderer machbar bzw. könntest du dann OpenGL verwenden. Die Frage wäre natürlich, ab du einen SW Renderer da zum laufen bekommst. Mesa3D zum beispiel.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Ich muss nur bestimmte Punkte berechnen und diese auf dem Bildschirm anzeigen.
Wirklich nur Punkte? Oder auch Linien oder Polygone?
Wenn es wirklich nur Punkte sind ist die Sache in wenigen Minuten erledigt. Du brauchst lediglich etwas Matrix/Vektor-Mathematik, könntest du dir z.B. aus meiner CoolMath-Library zusammen kopieren (GPL Lizenz).
Würde dann ungefähr so aussehen:
Code:
using namespace CML;
Matrix44f model = Matrix44f::translate(Vector3f(56,-5,3)); Matrix44f model = model * Matrix44f::rotationY(PI*0.25f); Matrix44f view = Matrix44f::lookAt(Vector3f(3,0,0), Vector3f(0,0,0), Vector3f(1,0,0)); Matrix44f perspective = Matrix44f::perspective(PI/4.0f, viewport.x/viewport.y, 1.0f, 1000.0f); Matrix44f mvp = model * view * perspective; // Gesamtmatrix berechnen
for (int i=0; i<100; ++i) { Vector3f point = vec3ProjectCoord(points[i], mvp); // Punkte projizieren setPixel(round(point.x * viewport.x), round(point.y * viewport.y)); }
Registriert: Mo Jan 20, 2003 20:10 Beiträge: 424 Wohnort: nähe Starnberg
Der Rechner ist ein ARMv5 200 MHz Rechner mit eine LCD - Display. Auf dem Rechner läuft kein Window - Manager. Mesa3D ist viel zu langsam, da auch kein FPU existiert.
Registriert: Mo Jan 20, 2003 20:10 Beiträge: 424 Wohnort: nähe Starnberg
Coolcat, scheint nicht ganz zu funktionieren. Es liegt an der View - Matrix, die in jedem Feld den Wert 0x400000 (NAN) enthält. Hängt das mit der Fixed - Math Library eventuell zusammen?
Sorry, habe schon lange nichts mehr mit Matrizen und Co. gemacht, sich jetzt wieder einzulesen fällt mir echt schwer.
Also das was aus Matrix44f::lookAt rauskommt hat NaN-Werte? Was steckst du den rein? Die Funktion hat drei Parameter: eye, center und up. Der erste Wert ist der Punkt an dem sich die Kamera befindet, der zweite ist der Punkt auf den die Kamera schauen soll. Diese beiden Punkte dürfen nicht identisch sein. Der dritte Wert ist ein Up-Vektor, der dahin zeigt wo "oben" ist. Dieser Vektor darf nicht Null sein und darf nicht in die gleiche oder entgegengesetze Richtung zeigen wie center - eye.
Registriert: Mo Jan 20, 2003 20:10 Beiträge: 424 Wohnort: nähe Starnberg
Ja, View enthält nur NaN Werte. Ich habe die Werte verwendet, die Du angegeben hast. War für mich ja erst mal egal, solange was vernünftiges drin steht. Aber in View steht nach dem Aufruf überall NaN drin.
Mitglieder in diesem Forum: 0 Mitglieder und 10 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.