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

Aktuelle Zeit: Fr Jul 18, 2025 12:25

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



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Fr Feb 29, 2008 14:09 
Offline
DGL Member

Registriert: Fr Okt 24, 2003 22:26
Beiträge: 120
Wohnort: Mannheim
Programmiersprache: Delphi
Hallo

ich habe vor für meine Application (CAD Viewer) eine perspeektivische Darstellung zu implementieren.
Die Ortho Darstelllung funktioniert bisher Topp und ohne Probleme.

Randbedingungen im Viewer:
- kein Z-clipping (es sollen also nicht einfach Teile verschwinden), beim Zoom möchte ich als dem Teil immer näher kommen es soll aber trotzdem nicht geclippt werden. (also ins innere Schauen darf ich nicht)
- die Z Tiefe sollte optimal sein, aber es muß möglich sein diese anzupassen (ohne daß die ganze Ansicht verspringt), z.B. wenn neue Teile eingefügt oder Teile verschoben werden.

Ich habe dabe einiges mit glFrustum probiert und im Prinzip auch eine perspektivische Darstellung hinbekommen:

glFrustum(-gl_Xmax, gl_Xmax, -gl_Ymax, gl_Ymax, 1 + FMaxDim, 1 + 2 * FMaxDim);
glTranslatef(0, 0, -1 - 1.5 * FMaxDim); //correct the camera distance}

Darstellung ist ok, solage das Objekt an seiner Position bleibt (also Rotation und Zoom gehen).
Aber ich muß erlauben, daß einige Teile dieser Objektes verschoben werden können. Somit müßte ich das Z clipping anpassen, was in perspectivischer Darstellung immer unweigerlich zu einem springen der Ansicht führt (da ja gl_Xmax, gl_Xmax, -gl_Ymax, gl_Ymax bei Z near sind). Außerdem kann die Verschiebung soweit gehen, daß eine Anpassung garnicht mehr geht oder es zu starken Verzerrungen kommt, da das Objekt den EYE Coordinaten sehr nahe kommt oder sogar dahinter verschwindet.
In anderen ähnlichen Viewern, wie eDrawings oder auch 3D-PDF funktioniert es, wie man es sich wünscht, nur wüßte ich gerne, wie man das realisiert?

Im internet habe ich noch folgende Idee gefunden: http://wireframe.doublemv.com/2006/08/1 ... nd-opengl/

oblique projection can be accomplished multiplying the projection matrix, after calling glOrtho,with a shear matrix.
float shear_matrix = { 1, 0, -cot(theta), 0,
0, 1, -cot(phi), 0,
0, 0, 1, 0,
0, 0, 0, 0 };glMultMatrix (shear_matrix);
Where theta is the angle between the x plane and the z plane and phi is the angle between the y plane and the z plane.

Kann das funtionieren? Bei mir hats so noch nicht funtioniert. Diese Shear matrix verschiebt bei mir nur die Z Coordinaten, da fehlt doch noch der scale?
Von Vorteile wäre es natürlich: Ich könnte mein bisheriges glOrtho nutzen und einfach darüber die x und y Werte abhängig von z Scalieren lassen.

Hoffe ihr könnte mir helfen
User69


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Feb 29, 2008 15:06 
Offline
DGL Member
Benutzeravatar

Registriert: So Jun 04, 2006 12:54
Beiträge: 263
Man kann die Near plane definitiv nicht auch null setzten. Beim Zoomen muss man dagegen darauf zurückgreifen, das nur ein Bildausschnitt sicht bar ist. Mit einer echten kammera ist es ja auch so das man spätestens dann nicht mehr weiter zoomen kann wenn die linse das objekt berührt :P Im prinzip muss man nur die ersten 4 Werte von glFrustum mit einem zoomfaktor multipluzieren, die far und near plane können dagegen auf festen werten bleiben.

_________________
Lumina plattform unabhängige GLSL IDE


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Feb 29, 2008 15:18 
Offline
DGL Member

Registriert: Fr Okt 24, 2003 22:26
Beiträge: 120
Wohnort: Mannheim
Programmiersprache: Delphi
Geanau bei den Near und Far Werten liegt aber das Problem.
Diese MÜSSEN von mir verändert werden, da sich Teile bewegen können und ich nicht generell ein Riesenbreich für Near...Far einstellen will und kann (da sonst der Z Buffer nicht ausreicht). Ich weiß ja auch davor nicht, wie weit sich diese Teile bewegen sollen oder können (ist Benutztereingabe).

Möglich muß es laut z.b. 3D-PDF (ok, das nutzt DirectX) und anderen sein! Die haben sowas umgesetzt.

Ich stelle mir vor einach ein Ortho zu nutzen, dazu eine Shear (das geht mit der Gleichung oben), je nachdem von wo ich schaue und dann noch die Scalierung für die weiter weg =x/y Verkleinern (oder näher =x/y Vergrößern) liegenden Punkte. nur, wie mache ich diese Scalierung in opengl (sie ist ja abhängig von z)?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Feb 29, 2008 19:29 
Offline
DGL Member

Registriert: Di Jun 06, 2006 09:59
Beiträge: 474
Also auf deutsch: Du willst einen linearen z-buffer emulieren?

_________________
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Feb 29, 2008 19:47 
Offline
DGL Member

Registriert: Fr Okt 24, 2003 22:26
Beiträge: 120
Wohnort: Mannheim
Programmiersprache: Delphi
Also ein linearer Z-Buffer wäre ein Schritt. (ist ja auch bei Ortho so).

Viel wichtiger aber ist near und far zu ändern ohne, daß dabei die ganze Ansicht sprigt. (also bei konstanten left, right, top, bottom) ein neues near und far zu setzen, so daß die Ansicht dabei exakt gleich aussieht.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Feb 29, 2008 20:14 
Offline
DGL Member

Registriert: Di Jun 06, 2006 09:59
Beiträge: 474
dann multipliziere halt xmax und ymax mit znear oder zfar (ich weiß nicht auf was die bezogen sind)

eine korrekte darstellung von texturen ist in GL-Ortho afaik nicht möglich (zumindest ohne aufwändige shaderseitige korrektur)

_________________
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 01, 2008 10:42 
Offline
DGL Member

Registriert: Fr Okt 24, 2003 22:26
Beiträge: 120
Wohnort: Mannheim
Programmiersprache: Delphi
bezogen sind die auf Znear.
Aber was soll das bringen. Bei mir führt das zu keinem Erfolg.

Gibts keine besseren Ideen oder Umsetzungen, wie man z Near und Z Far ändern kann, ohne, daß sich das Bild ändert?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 01, 2008 19:27 
Offline
DGL Member

Registriert: Di Jun 06, 2006 09:59
Beiträge: 474
Oder du nimmst eine funktion die den öffnungswinkel und das seitenverhältnis festlegt. kA wie die heißt, aber es gibt sie.

_________________
Bild


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


Wer ist online?

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