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

Aktuelle Zeit: So Jul 20, 2025 01:17

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



Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Sa Sep 23, 2006 21:54 
Offline
DGL Member

Registriert: Fr Sep 22, 2006 20:43
Beiträge: 3
Hallo Forumsteilnehmer,

Kann mir jemand ein Beispiel für einen Würfel in Schrägrissdarstellung geben ? Ich habe die Ansicht auf Ortho gesetzt und dann versucht mit glRotate die Z-Achse so zu verschieben dass sie sichtbar wird. Der Würfel schaut aber nicht nach einem Schrägriss aus ? Ich bekomme es einfach nicht auf die Reihe, den Würfel so zu verdehen, dass die vordere Seite ein Quadrat bleibt und die Seitenflächen wie bei einem Parallelogramm verschoben dargestellt wird.

:(

Harald


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Sep 24, 2006 03:01 
Offline
DGL Member

Registriert: So Sep 26, 2004 05:57
Beiträge: 190
Wohnort: Linz
Also vorne ein Quadrat und Seitflächen trotzdem zu sehen bekommst du im gluPerspective / glFrustum Modus schon, im Ortho-Modus wirst du da wenig Chancen haben.

Aber nur um das klar zu stellen, Kavalierriss ist das was man häufig in Tafelwerken findet, oder? Also das wo gilt:
X-Achse ist exakt horizontal
Y-Achse ist exakt vertikal
Z-Achse ist irgendwie schräg dazu
Parallele Stricherl bleiben auch Projeziert parallel (was beim gluPerspective nicht der Fall ist)
Das ganze soll im Endeffekt als 2D Bild enden und man soll nicht irgendwie in 3D herumkurven können (denn dann hast du mit dem typischen Tafelwerk ein kleines Problem).

In diesem Fall würde ich die Projektionsmatrix von OGL manuell setzen. Ich kann es zur Zeit leider nicht ausprobieren, da ich gerade keine ordentliche Entwicklungsumgebung zur Verfügung habe (formatieren und so), aber ungefähr so sollte es hin hauen:

Du erstellst dir eine Projektionsmatrix die so aussieht:
Code:
  1.  
  2. 1 0 0.5 0
  3. 0 1 0.5 0
  4. 0 0  1  0
  5. 0 0  0  1
  6.  


Wenn du mit den beiden 0.5 - Werten rum spielst erhältst du eine andere Länge der Z-Achse. Wenn du zwei unterschiedliche Werte nimmst erhältst du eine andere Schräge der Z-Achse. Wenn du mit den Vorzeichen der 0.5-Werte rum spielst sollte sich der Quadrant in den die Z-Achse zeigt ändern, also beide Werte auf -0.5 sollt nach links oben zeigen, beide Werte auf +0.5 nach rechts unten wenn ich mich nicht irre.

Zur Anwendung:
Sichtbar sollten bei dieser Projektionsmatrix X- und Y- Koordinaten im Bereich [-1|+1] sein.
Die Z-Werte müssen ebenfalls im Bereich [-1|1] sein, ansonnste bist du vor bzw. hinter der Near bzw. Far Plane.
KEIN glRotate, es sei denn du willst ... interessante Ergebnisse. Um Z-Achse Rotieren kannst du aber probieren.

Beispielcode (bedenke das ist nur Theorie, ich habe es nicht ausprobiert, noch dazu C-Datentypen :-) ):
Code:
  1.  
  2. float Matrix[16] =
  3. { 1.0, 0.0, 0.0, 0.0,
  4.    0.0, 1.0, 0.0, 0.0,
  5.    0.5, 0.5, 1.0, 0.0,
  6.    0.0, 0.0, 0.0, 1.0 };  // Die Matrix muss transponiert angegeben werden wenn ich mich nicht irre.
  7. glMatrixMode( GL_PROJECTION );
  8. glLoadMatrixf( Matrix );
  9. glMatrixMode( GL_MODELVIEW );
  10.  
  11. // Würfel Zeichnen mit den Koordinaten für X, Y und Z jeweils -0.5 und +0.5 für die Eckpunkte.
  12.  
  13.  


Und hier noch eine kleine Warnung: OGL ist nicht unbedingt ausgelegt für solche Projektionsmatrizen, also nicht erwarten das alles was OGL bietet auch so funktioniert wie es sollte. Wenns nur um ein paar nette Grafiken geht sollte es kein Problem sein, aber wenn du irgendwelche komischen Effekte damit machen willst, dann solltest du auf unerwartete Ergebnisse gefasst sein.

Zur genaueren Erklärung der Matrix (falls es dich interessiert):
X wird mit 1.0 * X + 0.0 * Y + 0.5 * Z + 0.0 * W mulitpliziert, wodurch die X-Achse durch die Z-Achse etwas verschoben wird. Gleiches gilt für die Y-Achse.
Z wird nur mit sich selbst multipliziert, wodurch Dreieckerl die weiter hinten liegen auch (durch den Z-Buffer) verdeckt (nicht) gezeichnet werden. Hierbei bin ich mir nicht ganz sicher ob man Z mit 0 0 1 0 oder mit 0 0 -1 0 multiplizieren sollte um die typische OGL-Funktionalität zu erreichen, aber es sollte hier nur darum gehen ob größere Z-Werte oder kleinere Z-Werte verdeckt werden. Ggf. einfach vertauschen.
W sollte im Endeffekt 1 bleiben, denn durch w wird dividiert (wenn w=1 bleiben alle Werte gleich) und auch entsprechend w wird auch "geclipt" (wenn w immer 1 dann werden immer alle Vertices wo sowohl x, y als auch z-Koordinate im Bereich [-1|1] liegen gezeichnet).


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 14 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.007s | 16 Queries | GZIP : On ]