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

Aktuelle Zeit: Fr Jul 18, 2025 04:21

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



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Mo Jan 18, 2010 15:19 
Offline
DGL Member

Registriert: Do Jun 22, 2006 19:13
Beiträge: 52
Wohnort: Lübeck
Hallo zusammen,

ich habe ein Problem beim Umschalten von einer Projektion auf die andere.
Also z.B: von glPerspective nach glOrtho.

Wenn ich meine Applikation starte, befinde ich mich im glPerspective Modus.
Ich sehe z.B. in der mitte des Bildschirms einen Würfel.
Nun bewege ich die Camera ganz nah an den Würfel heran.

Wenn ich nun auf glOrtho umschalte, dann ist der Würfel immer noch ganz weit weg.
Der Grund ist mir klar. Im Ortho-Modus kann ich die Camera hin und her bewegen (hinein- und hinauszoomen) ohne das sich die größe des Würfels auf dem Bildschirm verändert.

Ich muss also die größe der Sichtfläche verändern. Aber wie weis ich wie groß dieses Sichtfenster zu sein hat wenn ich mich z.B 100 in glPerspective vom Objekt weg bewegt habe?

Code:
  1.  
  2. OrthoLeft := Round(Width / 2 * -1 - AENDERUNG);
  3. OrthoRight := -OrthoLeft;
  4. OrthoBottom := Round(OrthoLeft * Height / Width);
  5. OrthoTop := -OrthoBottom;
  6. glOrtho(OrthoLeft, OrthoRight, OrthoBottom, OrthoTop, OrthoNear, OrthoFar);
  7.  


Wenn ich nun in AENDERUNG einen entsprechenden Wert für die Veränderung von 100 in der glPerspective Ansicht hätte, dann müsste das doch funktionieren.

Wie komme ich auf solch einen Wert?

Oder wird sowas ganz ander gemacht?


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Jan 18, 2010 18:43 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Im Orthomodus musst du dann auf glScale setzen. Allerdings kann ich dir nicht direkt sagen, wie du auf den passenden Faktor kommst.

Viel Erfolg ;)

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Jan 18, 2010 20:10 
Offline
DGL Member

Registriert: Di Okt 13, 2009 17:25
Beiträge: 365
Programmiersprache: C++
Naja, es gilt der Strahlensatz. Wenn du von einer Entferung weißt, wie groß der Skalierungsfaktor sein muss, dann nimm diesen und lass ihn proportional mit der Entfernung steigen.

Also:
fScale = fNormScale / fNormDistance * fDistance

hope it helps

mrtrain


Zuletzt geändert von mrtrain am Mi Aug 31, 2011 18:01, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Jan 19, 2010 10:42 
Offline
DGL Member

Registriert: Do Jun 22, 2006 19:13
Beiträge: 52
Wohnort: Lübeck
Also,

wenn ich das richtig verstanden habe, muss ich nun herausfinden um welchen Faktor sich das Bild optisch vergrößert hat, wenn ich mich 100 Einheiten auf das Objekt im Perspective Modus zu bewegt habe.

Diesen Faktor kann ich dann dazu verwenden um mit der aktuellen Camera entfernung und glScale im Ortho Modus die Viewmatrix so zu manipulieren, das beim Umschalten das Object optisch imer die gleiche Entfernung hat.

Ist das so richtig?


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Jan 19, 2010 11:37 
Offline
DGL Member

Registriert: Do Mär 05, 2009 20:17
Beiträge: 284
Wohnort: Kaiserslautern
Naja ich bin ja selbst kein profi aber ich hab in meinem projekt auch nen schalter zum switchen von perspektivisch nach orthologisch...

bei mir geht das so: ATZ ist bei mir der zoomfaktor wenn die maus sich um Y bewegt...

Code:
  1.     end else
  2.      begin
  3.       radiobutton2.Checked:=true;    // wir zoomen
  4.       ATZ := ATZ - (Y-MTZ)/2;
  5.       MTZ:=Y;
  6.      end;

und danach hab ich dann durch rumprobieren gemerkt das das hier perfekt funktioniert:
Code:
  1. procedure TForm1.orthologisch(Sender:TObject);
  2.   begin
  3.  
  4.      if ATZ<0 then //damit nur bis zum nearclipping gezoomt wird, sonst gibts lustige effekte mit der Steuerung....
  5.  
  6.      glortho(2*(ATZ),-2*(ATZ),2*(ATZ),-2*(ATZ),nearclipping,farclipping)
  7.      else
  8.  
  9.  
  10.   end;

im ergebnis siehts dann so aus:
perspektivisch: Bild
orthologisch:Bild

vielleicht bringt dich das ja auf ne idee...
*Edit* achso was ich vielleicht noch dazusagen muß: ich rendere in ein quadratisches panel, wenn ich das panel rechteckig mache verzerrt mir orthologisch die geometrie... also ist das "2*(ATZ) wohl irgendwie abhängig vom Seitenverhältnis des Panels... aber ich wills ja eh quadratisch.


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


Wer ist online?

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