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

Aktuelle Zeit: Fr Jul 18, 2025 15:43

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



Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Ausschnitt im 3D vergrößern?
BeitragVerfasst: Mi Jun 28, 2006 13:24 
Offline
DGL Member

Registriert: Di Feb 01, 2005 15:59
Beiträge: 14
Wohnort: nähe Stuttgart
Hallo Community :)

Ich steh vor dem Problem, ich würde gerne eine Zoom Funktion in meine Anwendung einbauen, in der Form das ich ein 2D-Rechteck aufziehe, und beim loslassen der Maus die 3D Ansicht sich an der aufgezogenen Fläche orientiert und möglichst genau den Ausschnitt anzeigt der hinter dem 2D-Rechteck liegt. (Ist das 2D-Rechteck höher als das es in das ViewPortfenster mit richtiger aspektratio reinpassen würde, soll der Viewport das 2D-Rechteck und links und rechts mehr anzeigen, ist das 2D-Rechteck breiter als das Viewportfenster, soll oben und unten mehr zu sehen sein.
Ähnlich wie wenn ich in einem 2D-Fenster einen Ausschnitt vergrößern möchte.
Hat jemand damit schon rumexperimentiert oder ne idee wie ich vorgehen könnte?

Danke schonmal im Vorraus,
Peter Laube


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jun 30, 2006 08:19 
Offline
DGL Member

Registriert: Mo Dez 20, 2004 08:58
Beiträge: 442
Wohnort: Mittweida (Sachsen)
Ich, aber das war was ganz spezielles.
Ich hatte ein Überblickfenster, das die gesamte Szene darstellt. (Die Kameraposition wuerde hier über die Ausmaße der 'Welt' und den Blickwinkel der Kamera berechnet).
Das Selektionsrechteck hab ich dann ganz normal mit MouseMove und so gemacht, aber mit OGL on ortho-Modus gezeichent, weil sonst flackerts.
Aufgrund der Lage und Größe des Auswahlrechtecks bezüglich der Totalansicht habe ich dann die Berechnung der Kameraposition angeglichen:
- größe Totale/Größe Rechteck = Abstand Totale/Abstand Vergrößerung
- (Mitte Totale minus Mitte Rechteck) / Größe Totale = (Mitte Welt minus Kamera)/Größe Welt

Wobei das nur vereinfacht auf die drei Hauptachsen so leicht funktioniert. als Ausmaße der Welt habe ich immer die der Kamera zugeordnete Fläche der Bounding-Box genutzt. Zusätzlich musst Du noch die Seitenverhältnisse der Totale zur Welt und der Welt zum Zoomfenster einbeziehen.

Code kann ich Dir leicer keinen posten, ist nicht freigegeben.

_________________
Manchmal sehen Dinge, die wie Dinge aussehen wollen, mehr wie Dinge aus, als Dinge.
<Esmerelda Wetterwax>
Es kann vorkommen, dass die Nachkommen trotz Abkommen mit ihrem Einkommen nicht auskommen und umkommen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jun 30, 2006 16:30 
Offline
DGL Member

Registriert: So Sep 26, 2004 05:57
Beiträge: 190
Wohnort: Linz
Bei perspektivischer Projektion stellt sich grundlegend die Frage ob du die Perspektive (die Kameraposition) ändern möchtest oder nicht. Wenn du die Kameraposition nicht ändern möchtest, so sollte dir klar sein dass du dann keine normale Viewfrustum mehr hast sondern einen "windschiefen" Pyramidenstumpf. Eine derartige Projektion kannst du natürlich nicht mit gluPerspective machen, hierfür benötigst du glFrustum, dafür gehts damit umso einfacher.

Um diesen windschiefen Pyramidenstumpf zu erstellen, brauchst du eigentlich nur die Koordinaten des Rechtecks auf der Near-Plane. Diese sind ja halbwegs leicht zu berechnen, ggf. verwendest du einfach:

gluUnProject( FensterX, FensterY, 0, einheitsmatrix, projectionmatrix, viewport, @NearX, @NearY, @NegativeNearZ );
0 als Fenster Z weil du den Punkt auf der Near-Plane haben willst.
einheitsmatrix statt modelview-matrix weil du kein rum gedrehe und geschiebe in der Welt berücksichtigen willst.

Danach verwendest du die Coordinaten aus NearX und NearY für dein nächstes glFrustum als left, right, top bzw. bottom.

Das wäre der korrekte Zoom bei perspektivier Projektion, also das wo sich am Bild nichts ändert sondern der Bildausschnitt nur größer wird.

Wenn du lieber eine schöne, gerade Pyramide haben möchtest, so gibt es ziemlich viele Möglichkeiten das zu lösen, einige davon können sehr Aufwändig werden ... einfacher wäre es wenn du etwa wüsstest in welcher Entfernung sich das Objekt befindet. Wenn es nicht nur ein Objekt sondern eine komplexere Szene ist, dann hast du verhältnismäßig wenig Chancen das wirklich ordentlich hin zu bekommen würde ich meinen, also so dass du wenn du gleichzeitig einen weiter entfernten Berggipfel und ein ziemlich nahes Blümchen einrahmst im Ergebnis noch beides zu sehen bekommst und das möglichst ohne allzu viel an der Perspektive zu ändern.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jul 06, 2006 09:06 
Offline
DGL Member

Registriert: Di Feb 01, 2005 15:59
Beiträge: 14
Wohnort: nähe Stuttgart
Danke für eure Antworten.
Wir haben das mit dem Ausschnitt auswählen jetzt wieder fallengelassen und haben nun einen modus mit dem man einen vertex eines objektes als zentrum definieren kann, um welches dann gedreht und gezoomt werden kann. War einfacher und ergibt letztendlich den gleichen Effekt


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 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 ]