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

Aktuelle Zeit: Mi Jul 09, 2025 14:43

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Fr Jul 14, 2006 12:10 
Offline
DGL Member

Registriert: Mo Mai 22, 2006 16:33
Beiträge: 9
Hallo,

ich habe ein eingelesenes Modell mit berechneten Min-, Max- und Center-Werten der Boundingbox.
Nun möchte ich von links, von rechts, von vorne und von hinten auf das Modell mit glOrtho schauen, dabei soll das Modell im Blickfeld zentriert werden und immer komplett sichtbar sein. Je nach Modell fehlen nur ein paar Vertices, manchmal ist aus einer Perspektive das Bild nur schwarz. :-(

initialisierung der 4 Positionen:
Code:
  1.  
  2.  
  3.     // von rechts
  4.     LightPositions[0][0] = model->BBox->Max.x * 10.0f;
  5.     LightPositions[0][1] = model->BBox->Center.y;
  6.     LightPositions[0][2] = model->BBox->Center.z;
  7.    
  8.     // von vorne
  9.     LightPositions[1][0] = model->BBox->Center.x;
  10.     LightPositions[1][1] = model->BBox->Center.y;
  11.     LightPositions[1][2] = model->BBox->Min.z * 10.0f;
  12.  
  13.     // von hinten
  14.     LightPositions[2][0] = model->BBox->Center.x;
  15.     LightPositions[2][1] = model->BBox->Center.y;
  16.     LightPositions[2][2] = model->BBox->Max.z * 10.0f;
  17.  
  18.     // von links
  19.     LightPositions[3][0] = model->BBox->Min.x * 10.0f;
  20.     LightPositions[3][1] = model->BBox->Center.y;
  21.     LightPositions[3][2] = model->BBox->Center.z;
  22.  


Berechnen der Clippingplanes und abwechselnde Sicht auf die Szene:
Code:
  1.  
  2.     // calc clipping planes
  3.     leftcp = model->BBox->Min.x * 3;
  4.     rightcp = model->BBox->Max.x * 3;
  5.     lowercp = model->BBox->Min.y * 3;
  6.     uppercp = model->BBox->Max.y * 3;
  7.  
  8.     // enable orthographic projection
  9.     glOrtho(leftcp, rightcp, lowercp, uppercp, 1 , 1000);
  10.  
  11.     if (zeit%4 == 0) {
  12.         gluLookAt(LightPositions[0][0], LightPositions[0][1], LightPositions[0][2], model->BBox->Center.x, model->BBox->Center.y, model->BBox->Center.z, 0.0f,1.0f,0.0f);
  13.     } else if (zeit%4 == 1) {
  14.         gluLookAt(LightPositions[1][0], LightPositions[1][1], LightPositions[1][2], model->BBox->Center.x, model->BBox->Center.y, model->BBox->Center.z, 0.0f,1.0f,0.0f);
  15.     } else if (zeit%4 == 2) {
  16.         gluLookAt(LightPositions[2][0], LightPositions[2][1], LightPositions[2][2], model->BBox->Center.x, model->BBox->Center.y, model->BBox->Center.z, 0.0f,1.0f,0.0f);
  17.     } else if (zeit%4 == 3) {
  18.         gluLookAt(LightPositions[3][0], LightPositions[3][1], LightPositions[3][2], model->BBox->Center.x, model->BBox->Center.y, model->BBox->Center.z, 0.0f,1.0f,0.0f);
  19.     }
  20.  


Kann mir jemand erklären, warum das nicht funktioniert? Ich setze doch die Clippingplanes außerhalb des Modells und schaue in die Mitte ???

P.S.: Wenn ich die Szene auch noch von oben oder unten sehen will, klappts gar nicht mehr. Muss ich den Up-Vektor von gluLookAt anpassen?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jul 14, 2006 12:31 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also ich weiß nicht warum du dir das an der Stelle so kompliziert machst.

Gehen wir einmal von der Standardansicht aus, dann ist diese gleich "von Vorne". Und von da aus brauchst du lediglich um 90° deine Ansicht drehen. Und zwar mit der entsprechende Achsen. Diese Rotation musst du als erstes durchführen und anschließend verschiebst du den Mittelpunkt (In die Tiefe). Das solltes es eigentlich gewesen sein.

Zum Zeichnen er einzelnen Bereiche könntest du entweder 4 Kontexte benutzen oder du setzt den ViewPort etsprechend. Mittels glOrtho kannst du dann noch recht einfach dafür sorgen, dass dein Objekt "automatisch" in der Mitte des Bildbereiches verschoben wird. Und zwar in dem du bei glOrtho -HalbeHöhe und +HalbeHöhe für die Höhenwerte einträgst. Das gleich für die Breite dann ist der Punkt 0,0 genau in der Mitte des Bereiches.

PS: Alle Angaben ohne gewähr, da ich mir nicht sicher bin ob ich deine Frage richtig verstanden habe.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jul 14, 2006 12:52 
Offline
DGL Member

Registriert: Mo Mai 22, 2006 16:33
Beiträge: 9
Ziel des ganzen ist es, auf einer gedachten Kugel um die Szene z.B. 50 gleichverteilte Betrachtungspositionen zu berechnen, wo von jeder Position aus auf die zentrierte Szene geschaut wird. Diese Positionen werde ich über x, y und z-Werte berechnen, so dass ich nicht mit einer Rotation der Szene arbeiten kann.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jul 14, 2006 14:25 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Okay. Irgendwie hast du mich jetzt komplett verwirrt. Das Letzte klingt nicht mal Ansatzweise so wie ich es zum Anfang verstanden habe. :?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jul 14, 2006 14:46 
Offline
DGL Member

Registriert: Mo Mai 22, 2006 16:33
Beiträge: 9
Ok, ich versuch mal den kompletten Ansatz zu erklären, vielleicht wirds dadurch deutlicher.

Stell dir ein beliebiges Model vor. Um dieses Model wird eine Kugel gelegt. Auf dieser Kugel werden ganz viele, auf das Model gerichtete Lichter, gleichmäßig verteilt gesetzt, so dass die Szene aus allen Richtungen ausgeleutet wird (eine Lightsphere, siehe Attachment, gelber Punkt = Position einer Lichtquelle).
Jetzt setze ich die Kamera auf die erste Lichtquelle, rendere die Szene im orthogonalen Projektionsmodus und kann somit feststellen, wieviele Pixel aus der Sicht dieser einen Lichtquelle zu sehen sind. Das mache ich mit allen Lichtquellen und kann somit die Beleuchtungsintensität jedes Dreiecks berechnen und erhalte somit Schattierungen.

Da ich aber ein absoluter Anfänger in OpenGL bin, fange ich erstmal mit den o.g. 4 Lichtquellen an. Ich will "nur" ein zentriertes orthogonales Abbild des Modells aus Sicht der 1. Lichtquelle, danach aus Sicht der 2. Lichtquelle usw. haben.


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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jul 14, 2006 15:22 
Offline
DGL Member

Registriert: Mo Mai 22, 2006 16:33
Beiträge: 9
Danke, Lossy eX!!

durch deine Hinweise hab ichs nun für meine paar Modelle hinbekommen, das sollte erstmal reichen! :D
Mit folgender Clippingplaneberechnung und Lichtpositionen hats geklappt:

Code:
  1.  
  2.     leftcp = -((abs(model->BBox->Min.x) + abs(model->BBox->Max.x)));
  3.     rightcp = ((abs(model->BBox->Min.y) + abs(model->BBox->Max.y)) );
  4.     lowercp = -((abs(model->BBox->Min.y) + abs(model->BBox->Max.y)));
  5.     uppercp = ((abs(model->BBox->Min.y) + abs(model->BBox->Max.y)));
  6.  

und
Code:
  1.  
  2. LightPositions[0][0] = model->BBox->Max.x * 2.0f; // anstatt 10
  3.  


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


Wer ist online?

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