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

Aktuelle Zeit: Fr Jul 18, 2025 00:26

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



Ein neues Thema erstellen Auf das Thema antworten  [ 21 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Autor Nachricht
BeitragVerfasst: Di Feb 02, 2010 21:53 
Offline
DGL Member

Registriert: Mo Okt 15, 2007 18:30
Beiträge: 74
Wohnort: Berlin
Zitat:
Warum genau musst du den Geometrieausschnitt kennen der innerhalb des Viewing-Frustum liegt? Pixel außerhalb des Viewing-Frustum werden von der Grafikkarte sowieso nicht gerendert. Die Geometrie wird im "Clipping"-Schritt vorher passend zurecht geschnitten. Das macht aber auch die feste Funktionspipeline so


Habe mich vielleicht etwas unglücklich ausgedrückt. Ich meine nicht das Viewing Volume welches auf dem Bildschirm ausgegeben wird. Erdbeobachtende Satelliten haben ja ebenfalls Kameras an Bord, und deren Sichtfeld kann ja gewissermaßen auch durch ein Frustum beschrieben werden. Stell dir vor diese Pyramide schneidet die Erdoberfläche, dann begrenzen die Schnittlinien die von der Kamera eingefangene Oberfläche. Und dieses Oberflächenstück möchte ich nun in eine Textur zeichnen. Mit zunehmenden Erdumläufen wird auch mehr Oberfläche aufgenommen, und den Bereich möchte ich darstellen bzw. in eine 2D-Textur rendern.

Ohne das Thema jetzt in diesem Thread zu sehr zu vertiefen, seht ihr da Potential für Shader?

_________________
Just do it!


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Feb 03, 2010 00:12 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Und dieses Oberflächenstück möchte ich nun in eine Textur zeichnen.

Also du willst genau das was die Kamera sieht in der Textur haben? Du kannst statt auf den Bildschirm auch in ein FramebufferObject (FBO) rendern? Mit Shadern hat das nichts zu tun.

Ich vermute aber das ich immer noch nicht verstanden habe was du willst. Willst du vielleicht in der Planetentextur (die um den Planeten gewickelt ist) sehen welche Texel der Textur sichtbar waren? In dem Fall ist das tatsächlich ein klarer Fall für den Shader. Das vorgehen wäre in etwa so:

Rendern eines 2D-Quads das die Planetentextur überdeckt, einfach nur um den Fragmentshader für jeden Texel der Textur auszuführen. Im Fragmentshader hast du Zugriff auf die Texturkoordinaten. Du weißt also welcher Texel gerade gerendert wird. Da du (hoffentlich) auch weißt wie die Textur um den Planeten gewickelt wurde kannst du aus den Texturkoordinaten die 3D-Position im Raum berechnen. Also z.B. ist x der Winkel und y die Höhe, dann wäre das irgendwie so etwas:
Code:
  1. vec3 position = vec3(sin(x), 2.0*y-1.0, cos(x)) * radiusDesPlaneten;

Die 3D-Position multiplizierst du mit der ModelViewProjection-Matrix die du zum rendern des Planeten verwendest.
Code:
  1. vec4 projected = uModelViewProjection * vec4(position, 1.0); // Achtung: NICHT gl_ModelViewProjectionMatrix
  2. projected /= projected.w; // nach einer Projektionsmatrix muss man durch w teilen

Nun musst du nur noch für X,Y und Z prüfen ob sich der Punkt im Einheitswürfel (von -1 bis 1) befindet. Wenn ja ist der Punkt sichtbar, wenn nicht dann nicht. Das geht z.B. so:
Code:
  1. if (all(lessThanEqual(abs(projected.xyz), vec3(1,1,1) ))) {
  2.     // sichtbar
  3. }
  4. else {
  5.     // nicht sichtbar
  6. }

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Feb 03, 2010 01:03 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Wieso kannst du nicht einfach 6 Halbtransparente, ineinandergeschachtelte Kugeln Rendern. Jede mit einer Textur?

So bekommst du auch etwas Räumliche Tiefe (Satellit vs. Erdboden)

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


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Feb 03, 2010 09:30 
Offline
DGL Member

Registriert: Mo Okt 15, 2007 18:30
Beiträge: 74
Wohnort: Berlin
@Flash: Die Möglichkeit habe ich auch schon in Betracht gezogen, allerdings will ich die Räumliche Tiefe gar nicht. Alles soll auf 'Meeresspiegel' liegen. Ziel ist es gewissermaßen die Coverage des bereits fotografierten Bereichs darzustellen. Wenn also der Nordamerikanische Raum abgedeckt wurde, sollen diese Texel auch andersfarbig erscheinen. Bei dem Multi-Kugel-Prinzip mit leicht unterschiedlichen Radien hätte ich aber auch Parallaxefehler drin (wenn man aus einem anderen Winkel draufschaut).

@Coolcat:
Zitat:
Willst du vielleicht in der Planetentextur (die um den Planeten gewickelt ist) sehen welche Texel der Textur sichtbar waren?


Genau! Und ich will in einer deckungsgleichen Textur eben diese Texel einfärben. Die neue Textur kann dann auf Wunsch darüber gelegt und verblendet werden.

_________________
Just do it!


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Feb 03, 2010 10:49 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Bei dem Multi-Kugel-Prinzip mit leicht unterschiedlichen Radien hätte ich aber auch Parallaxefehler drin

Was spricht dagegen identische Kugeln zu benutzen? Solange die Kugeln wirklich identisch sind und auf identische Art (*) gerendert werden gibt das auch keine Probleme mit dem Z-Buffer. Wenn der Z-Buffer zum Problem wird kann man glDepthRange benutzen.

(*) wirklich identisch, eine andere eigentlich äquivalente Reihenfolge von Operationen kann bereits kleine Rundungsfehler verursachen.

Zitat:
Genau!

Ja, dann geht das mit Shadern....die 5 Zeilen von mir da oben sind schon alles.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Feb 03, 2010 17:20 
Offline
DGL Member

Registriert: Mo Okt 15, 2007 18:30
Beiträge: 74
Wohnort: Berlin
Danke für eure Hilfe! Damit wären meine Fragen erst mal beantwortet. Mittelfristig werde ich mich sicher mit Shadern beschäftigen müssen. :lol:

_________________
Just do it!


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 21 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Foren-Übersicht » Programmierung » OpenGL


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 ]