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

Aktuelle Zeit: Mo Jul 14, 2025 09:06

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



Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: clipping, viewport :)
BeitragVerfasst: Di Dez 09, 2008 00:36 
Offline
DGL Member

Registriert: Do Okt 30, 2008 00:59
Beiträge: 30
hi!

arbeite mich grad durch die superbible 4th edition durch und habe einige verständnisfragen zum thema clipping, viewport und der window client area.


clippingarea:
------------------------------
soweit ich verstanden habe, ist das der logische ausschnitt im kartesischen koordinaten system, z.b. (640,480). hier "beginnt" die fläche im ursprung (0,0). dieser bereich kann natürlich auch beliebig verschoben werden. z.b. zentriert, indem man nach (-320,-240) verschiebt, usw.


viewport:
------------------------------
das ist der sichtbereich, auf den im fenster (vom logischen ausschnitt, (640,480)) skaliert wird. bei einem fenster von 800x600 und einem viewport von 640x480 wären demnach oben und rechts ränder zu sehen, da der viewport kleiner ist, als die dimension des fensters. bei einem viewport von 1600x1200 würde man nur den III. quadranten der fläche zu sehen bekommen.


habe ich noch was übersehen? über weitere erklärungen wäre ich dankbar.

gruß
sNIk


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 10, 2008 12:55 
Offline
DGL Member

Registriert: Do Okt 30, 2008 00:59
Beiträge: 30
kann den niemand bestätigen, obs richtig ist oder auch kritisieren? ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 10, 2008 15:06 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Beim Viewport sollten unten und rechts die Ränder zu sehen sein, da oben links der Ursprung sein sollte.
Im Prinzip stimmt es.

Die ClippingArea sagt dann wie der Viewport intern skaliert werden soll, also wo der Ursprung sein soll und ob eine Vergrösserung/Verkleinerung stattfindet.

_________________
Steppity,steppity,step,step,step! :twisted:
❆ ❄ ❄ ❄ ❅ ❄ ❆ ❄ ❅ ❄ ❅ ❄ ❅ ❄ ❄
❄ ❄ ❄ ❅ ❄ ❄ ❄ ❅ ❄ ❄ ❆ ❄ ❄


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 10, 2008 15:43 
Offline
DGL Member

Registriert: Do Okt 30, 2008 00:59
Beiträge: 30
i0n0s hat geschrieben:
Beim Viewport sollten unten und rechts die Ränder zu sehen sein, da oben links der Ursprung sein sollte.
Im Prinzip stimmt es.


rechts ist klar aber wieso unten? der ursprung im kartesischen ko-system ist doch unten links ... bei dir ist dieser oben links und man arbeitet deswegen im negativen y-bereich. das verwirrt mich grad. ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 10, 2008 15:50 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Ok, hast recht. Der Ursprung ist unten links.

_________________
Steppity,steppity,step,step,step! :twisted:
❆ ❄ ❄ ❄ ❅ ❄ ❆ ❄ ❅ ❄ ❅ ❄ ❅ ❄ ❄
❄ ❄ ❄ ❅ ❄ ❄ ❄ ❅ ❄ ❄ ❆ ❄ ❄


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 10, 2008 18:34 
Offline
DGL Member

Registriert: Do Okt 30, 2008 00:59
Beiträge: 30
OK! .für weitere posts wäre ich dankbar. :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 10, 2008 19:22 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Öhm... denke nicht das das beim Viewport stimmt.

Nehmen wir mal an, du renderst auf ein panel. Das Panel hat eine gewissen Größe (640x480).
Jetzt sagst du, dass dein Viewport die Dimension 10000x5000 haben soll.
Das ist kein problem. Denn dann wird der Inhalt der Szene der als "sichtbar" gilt, in die 640x480 hineingepresst.
Wenn du z.B. das mit glOrtho machen würdest, dann würden sich 10000/640= 15,625 OpenGL-Einheiten, 1Pixel teilen (jedenfalls in der Breite).

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 10, 2008 21:37 
Offline
DGL Member

Registriert: Do Okt 30, 2008 00:59
Beiträge: 30
Flash hat geschrieben:
Denn dann wird der Inhalt der Szene der als "sichtbar" gilt, in die 640x480 hineingepresst.
Wenn du z.B. das mit glOrtho machen würdest, dann würden sich 10000/640= 15,625 OpenGL-Einheiten, 1Pixel teilen (jedenfalls in der Breite).


das verstehe ich nicht. :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Dez 11, 2008 09:21 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Hmm... ich hab mir gerade nochmal glViewport und gluPerspective durchgelesen. Eventuell war ich gerade falsch unterwegs.

Das doofe ist, dass ich mich mit OpenGL und vor allem OpenGL-Theorie lange nicht mehr auseinander gesetzt habe. Ich hab ein Template das geht, und das reicht für mich.


glViewport dient dem letzten Schritt der Projektion. Bis dahin hat OpenGL ermittel wie die normalisierten Gerätekoordinaten sind (Stimmt das?). glViewport wird dann benutzt um diese Koordinaten in Koordinaten auf deinem z.B. Panel umzurechnen. Dazu benötigt OpenGL die Angaben von glViewport.

Wenn du bei glViewport die Position und höhe und breite änderst, kannst du die Ausabe im letzten Schritt quasi nochmal ändern.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Dez 11, 2008 18:10 
Offline
DGL Member
Benutzeravatar

Registriert: Di Nov 26, 2002 22:12
Beiträge: 259
Wohnort: Dresden
Hallo sNIk,

damit deine gerenderten Primitive letztlich sichtbar werden musst Du nach den Transformationen mit deiner Modelview- und Projektionsmatrix noch eine Viewporttransformation durchführen.
Durch die Viewporttransformation werden also letztlich die gerenderten Primitive in deine Fensterkoordinaten umgerechnet.
Einfach gesagt legst du mit glViewport die Größe deines Ausgabebildes fest.
Wenn du z.B. in eine 512x512 Pixel große Textur rendern möchtest, setzt du den Viewport auf 512x512. Dann renderst du dein Bild und speicherst das Ergebnis in der Textur ab.
Für das Rendern an sich macht es natürlich Sinn die Größe des Viewports an die Größe deines Fensters/Panels anzupassen. In gewisser Weise bestimmst du so also die Auflösung deines Ausgabebildes und damit die Anzahl der Pixel/Fragmente.

Die Clippingarea dient dazu Primitive die gar nicht auf deinem Bild liegen würden zu entfernen (zu clippen). Die Clippingarea bildet typischerweise die Begrenzung deines Sichtfrustums. Die bekanntesten Clippingplanes sind wohl die Near- und Far-clippingplane, die du typischerweise beim setzen deiner Projektionsmatrix angibst (z.B. bei gluPerspective). Die 4 anderen Clippingplanes (links, rechts, oben, unten) werden von gluPerspective durch den Öffnungswinkel bestimmt.

Wenn du statt gluPerspective auf glFrustum zurückgreifst kannst du die Clippingarea direkt angeben.

_________________
Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jederman ist überzeugt, dass er genug davon habe.
Rene Descartes, frz. Mathematiker u. Philosoph, 1596-1650


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Dez 25, 2008 22:26 
Offline
DGL Member

Registriert: Sa Aug 09, 2008 09:07
Beiträge: 112
Also könnte man mit einem Viewport der größer ist als das Fenster/Panel einen AA-Effekt erzielen?
Oder wird der Rest des Framebuffers am Fenster/Panel einfach abgeschnitten?


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 8 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.009s | 15 Queries | GZIP : On ]