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

Aktuelle Zeit: So Jul 20, 2025 00:30

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



Ein neues Thema erstellen Auf das Thema antworten  [ 20 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Eigene 3D-Engine (Projektionsmatrix)
BeitragVerfasst: So Jan 23, 2005 13:28 
Offline
DGL Member

Registriert: So Jan 23, 2005 13:21
Beiträge: 46
Wohnort: Vietnam
Hat jemand von euch schon eine eigene 3D-Engine programmiert? Eine sehr einfache? Also nur so, das er einen 3D Punkt in 2D darstellen kann?

Will mir nämlich mal den Quellcode dazu anschauen. Wollte selber mal ne Engine machen, aber irgendwie fehlte mir der oben genannte Punkt. Drehen, skaliere, etc ging alles perfekt, nur 3D wars nicht. Wenn vielleicht jemand den code posten könnte oder die File schicken, das wäre nett.

_________________
"As the enemy went to heaven,
we stayed in hell!"


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jan 23, 2005 13:34 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
einen 3D Punkt in 2D darstellen, was meinste damit?

_________________
www.audi32.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: RE
BeitragVerfasst: So Jan 23, 2005 13:42 
Offline
DGL Member

Registriert: So Jan 23, 2005 13:21
Beiträge: 46
Wohnort: Vietnam
Es ist sozusagen eine 3D-Engine.

Man hat einen Punkt mir 3 Koordinaten (x,y,z). Der Bildschirm ist aber eine 2D-Fläche, deswegen muss der Punkt ja auf 2D (x,y) umgerechnent werden. Sowas möchte ich machen.

_________________
"As the enemy went to heaven,
we stayed in hell!"


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jan 23, 2005 13:46 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 02, 2003 12:47
Beiträge: 300
Wohnort: Marburg
Das wäre ja denn ne software Grafik!

Dass macht doch open gl für dich!! (das umrechnen auf Bildschirmcoordinaten)

tutorials einfach einmal durchgehen (dauert nicht lange)... (einsteiger tutorials lektion 1-8 oder so)

EDIT:


Tach erstmal :-) Wo bleibt denn hier die höflichkeit...

_________________
Nothing, oh sweet nothing,
today we are doing nothing at all...
http://www.geo-progs.de


Zuletzt geändert von geo am So Jan 23, 2005 13:50, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jan 23, 2005 13:46 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
OpenGL gibt das doch von alleine so aus :-/
Versteh dein Problem net.
Wenn du das machen willst, damit du testen kannst ob deine Maus darauf zeigt, da gibts andere möglichkeiten.

_________________
www.audi32.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jan 23, 2005 14:00 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Lade dir mal das OpenGL Template von der Seite hier. Da ist ein drehendes Dreieck und alles was man machen muß ist die Koordinaten in 3D und die Drehwinkel richtig anzugeben. Das ganze Zeichnen erledigt ja die Grafikkarte.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: RE
BeitragVerfasst: So Jan 23, 2005 14:21 
Offline
DGL Member

Registriert: So Jan 23, 2005 13:21
Beiträge: 46
Wohnort: Vietnam
Das Thema wird ein bisschen falsch verstanden. Wenn es um OpenGL geht, dann würd ich mir die Sachen einfach downloaden bzw. hätte ich eine andere Rubrik genommen. Genau, was die Grafikkarte macht, möchte ich machen. Ich gebe hier mal ein Beispiel dazu.

Das Beispiel sieht schon richtig aus, aber ist es doch noch nicht. Da, wenn man die Position des Würfels verändert, der Würfel zu einem Rechteck wird.

Beschreibung:

Mit dem Numpadstasten kann man den Würfel drehen und mit der rechten Pfeiltaste wird der Würfel nach rechts geschoben. Beim Verschieben funktioniert meine Formel nicht, deswegen brauch ich eine Richtige (heisst glaube ich Projektionsmatrix).


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

_________________
"As the enemy went to heaven,
we stayed in hell!"


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 24, 2005 00:02 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ahhhh du möchtest die Mathematik dahinter? Gut. Guck mal unter Links -> General -> CompGeo. Dieses Script is von meiner Uni. Dort wurde ganau das behandelt. Da du anscheinend etwas ahnung von Mathe hast, kannst du sicherlich mit der Erklärung und den Matrizen aus dem Script umgehen. :)

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 25, 2005 20:49 
Offline
DGL Member

Registriert: So Jan 23, 2005 13:21
Beiträge: 46
Wohnort: Vietnam
Bei mir funktioniert das nicht. Nachdem ich einige Weile das ausprobiert und herumgebastelt habe, funktionierte das aber nie. Hab auch ein bisschen selbst versucht, ein bisschen zu verändern, aber hat auch nicht geklappt

_________________
"As the enemy went to heaven,
we stayed in hell!"


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jan 25, 2005 21:57 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Was genau geht denn nicht. Es gibt hier einige die bisl Ahnung von mathe haben (ich nicht 8) ) eventuell können die dir helfen. Dafür musst du aber mehr Infos geben.

Wie siehts aus, wie solls aussehen, wie machst du's, welche Möglichkeiten hast du schon probiert, etc.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 26, 2005 13:46 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 28, 2002 19:27
Beiträge: 568
Wohnort: Chemnitz / Sachsen
tja da musste mal in kunst aufpassen ... hab das mal vor 3-4 jahren in pascal gemacht, ne einfache fluchtpunktgrafik .... leider halt nur mit linien, keine flächen ...

_________________
Aktuelles Projekt :
www.PicPlace.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 26, 2005 15:47 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Feb 24, 2003 18:19
Beiträge: 165
Wohnort: Cologne
einen fluchtpunkt zu nehmen ist nicht zwingend notwendig...

ich weiss nicht wie es "richtig" gemacht wird, aber mein versuch zu meinen tp zeiten sah ungefähr so aus:

Code:
  1.  
  2. x_2d := Round ( x * z * 160);
  3. y_2d := Round ( y * z * 100);
  4.  


wobei 160 bzw 100 die hälfte von bildschirmbreite/höhe ist, x,y und z sind gleitkomma... (zu faul für integer-only)

dann kannst du sehr einfach "3d"-linien zeichnen, und mit ein bisschen mathe auch gefüllte dreiecke... zum schluss nur noch die polygone nach z sortieren und zeichnen, fertig.

wie gesagt, weiss nicht ob das eine so gute methode ist.. ist auch ein wenig ungeschickt mit dem z, ich glaube irgendwo hab ich noch einen workarround, aber den hab ich nich mehr im kopf. wenn du willst kann ich ja mal nach meinen alten sources schauen :)

_________________
www.omfg.biz - aktuelles projekt


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 26, 2005 18:52 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 02, 2003 12:47
Beiträge: 300
Wohnort: Marburg
Also ich darf hier auch mal meine Auswürfe loswerden:

Ich würde da so rangehen:

Die Kamera ist durch nen Vektorbasis repräsentieren, verankert durch eine Stützvektor. (Vektoren der Basis haben alle länge=1 und sind Alle parweise senkrecht)

Dann subtrahiert du von jedem Punkt den Stützvektor (Position der Kamera).

Dann transformiert du den Punkt in die Basis. (Oder du erstellst die invertierte Basis und multiplizierst mit dem Punkt)

Dann kannst dir einfach den Tangenz des Winkels des neuen Punktes (den in die Basis transformierten) zur X/Z und zur Y/Z Ebene ausrechnen über gegen durch ankathete (also X/Z-Wehrt und Y/Z-Wehrt).

Und dann sagst du der Bildschirm geht von tan=-0,5 bis tan=0,5 oder so (jeh nach erwünschtem Sichtwinkel) und rechnest in Bildschirmcoordinaten um.

:-)

Müsste so oder so ähnlich gehen... Obs noch viel einfacher geht weiß ich nicht.

P.s. Wenn ich Zeit habe, kann ichs gerne noch mal ausführlich ausführen, einfach melden.

_________________
Nothing, oh sweet nothing,
today we are doing nothing at all...
http://www.geo-progs.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 26, 2005 19:54 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
Prinzipiell brauchst du:
* einen Vektortyp (3D oder 4D) =: V
* einen Matrixtyp (4D) =: M
* Routinen zum berechnen von M*M->M und V*M->V

Sämtliche einfachen 3D-Transformationen (verschieben, rotieren, skalieren) können als Matrizen ausgedrückt werden, die noch dazu zusammenmultipliziert werden können, sodass für die endgültige zusammengesetzte Transformation wiederum eine Matrix verwendet wird (was ja auch der Vorteil des Ganzen ist: man kann beliebig viele grundlegende Transformationen in einer einzigen Matrixmultiplikation zusammenfassen). OpenGL nennt diese Matrix die ModelView Matrix (und diese ist, so nur einfache Transformationen zusammengesetzt wurden, auch immer invertierbar).

Um nun die berechneten 3D-Punkte (in "Welt"-Koordinaten) auf den Bildschirm zu bringen, muss man sie sozusagen auf eine Ebene (den Bildschirm) projizieren. Auch diese Operation (im Trivialfall werden x und y mit einer Konstante multipliziert, anschließend durch z dividiert - der Nullpunkt des 2D-Koordinatensystems auf deinem Bildschirm ist somit logischerweise gleichzeitig der vorher genannte Fluchtpunkt) lässt sich in einer 4x4 Matrix darstellen (und sich zu den vorher genannten Operationen dazumultiplizieren). OpenGL nennt diese Matrix die Projektionsmatrix.
OpenGL unterstützt sowohl perspektive als auch orthogonale Projektionen, im Prinzip kann man aber in die entsprechende Matrix auch selbst reinschreiben was man will (oder ganz darauf verzichten und alles mit der ModelView Matrix machen, oder sämtliche Punkte "händisch" irgendwie transformieren und sowohl auf ModelView und Projektionsmatrix verzichten, d.h. diese Matrizen auf den Einheitsmatrizen belassen).

Schlussendlich kannst du natürlich auch ganz auf OpenGL verzichten, was du ohnehin tun musst, wenn du etwa eine Softwareengine schreibst - Lars hat z.B. unlängst ein entsprechendes Java Projekt präsentiert.

Mehr steckt nicht dahinter (bei der Verwendung von 4D-Vektoren kann man noch einige spezielle Sachen machen - etwa "unendlich lange" Schatten generieren) - die genauen Formeln sind meines Wissens sogar im Red Book angegeben - ansonsten findest du sie in jedem halbwegs brauchbaren Buch über 3D Grafik und/oder lineare Algebra.

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mär 22, 2005 13:19 
Offline
DGL Member

Registriert: Mi Aug 28, 2002 17:03
Beiträge: 37
Wohnort: ABG
Hi!
Ich habe mal eine Wireframe Engine geschrieben. Leider hatte ich damals noch nicht die große Ahnung, wie das ganze richtig abläuft. Jedoch verwende ich schon Matrizen und Vektoren zur berechnung:
http://blitzforum.de/viewtopic.php?t=7078
Ich hoffe du kannst etwas damit anfangen.

mfg olli

_________________
Programmieren beginnt im Kopf und endet im Compiler


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 20 Beiträge ]  Gehe zu Seite 1, 2  Nächste
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:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.017s | 17 Queries | GZIP : On ]