Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: So Jul 06, 2025 22:51

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Autor Nachricht
BeitragVerfasst: So Sep 05, 2010 16:36 
Offline
DGL Member

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.

Gruß
Thomas

_________________
http://www.seban.de


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Sep 05, 2010 19:28 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 11, 2009 08:02
Beiträge: 532
Programmiersprache: pascal (Delphi 7)
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.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Sep 05, 2010 20:18 
Offline
Guitar Hero
Benutzeravatar

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


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Sep 05, 2010 21:42 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
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));
}

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Sep 06, 2010 06:54 
Offline
DGL Member

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.

@Coolcat
Danke, werde ich mir ansehen.

Gruß
Thomas

_________________
http://www.seban.de


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Sep 06, 2010 08:43 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Sorry, kleine Korrektur. Nach der Projektion liegen die Koordinaten zwischen -1 und 1. Daher muss das natürlich so aussehen:
Code:
point.x = (point.x*0.5+0.5) * (viewport.x-1.0);
point.y = (point.y*0.5+0.5) * (viewport.y-1.0);
setPixel(round(point.x), round(point.y));

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Sep 06, 2010 14:43 
Offline
DGL Member

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.

Gruß
Thomas


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Sep 06, 2010 15:09 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
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.

(Matrix44f::lookAt ist äquivalent zu gluLookAt)

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Sep 06, 2010 16:02 
Offline
DGL Member

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.

Gruß
Thomas


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Sep 06, 2010 16:03 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Liegt daran das coolcats beispiel vektoren schon falsch sind... ;)
In seinem letzten post steht aber schon wie sie richtig gehören.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Sep 06, 2010 16:38 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Liegt daran das coolcats beispiel vektoren schon falsch sind... ;)

Richtig...die Werte sind einfach nur irgendein Blödsinn damit man sieht wie es gemeint is, siehe auch meine Signatur ;)

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

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.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 15 Queries | GZIP : On ]