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

Aktuelle Zeit: Fr Jul 18, 2025 15:44

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



Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Alpha Masking
BeitragVerfasst: Mo Feb 20, 2006 15:50 
Offline
DGL Member

Registriert: Mo Feb 06, 2006 14:55
Beiträge: 6
Wohnort: Essen
Ich habe folgendes Problem:
Ich rendere zunächst einige Objekte einer Szene auf herkömmliche Weise in den backbuffer. Anschließend möchte ich mit glColorMask(0,0,0,1) und glColor4f(0,0,0,0) ein weiteres Objekt rendern, so dass nur der alpha-Wert eines Pixels modifiziert wird (meine clear color ist 1,1,1,1). D.h. ich möchte den Inhalt des backbuffers, insb. der RGB Kanäle beibehalten und nur dort den alpha von 1 auf 0 setzen, wo das Objekt den depth Test besteht. Bisher jedoch scheitert diese Idee, da der alpha-Wert nicht auf 0 gesetzt wird. Woran habe ich nicht gedacht? Vielleicht sollte ich alpha blending einsetzen?

Code:
  1. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  2. setPerspective();
  3.    
  4. // render scene
  5. glColor4f(1,1,1,1);
  6. renderNonRefractiveObjects();   // zeichnet opaque Objekte der Szene in color und depth (!) buffer
  7.  
  8. // render alpha mask
  9. glColorMask(0,0,0,1);    // nur alpha manipulieren...
  10.     glColor4f(0,0,0,0);    // ...und zwar auf 0 setzen
  11.     glTranslatef(0.0f,0.0f,2.0f);
  12.     glRotatef(rot,0.0f,1.0f,0.0f);
  13.         renderRefractiveObjects();   // zeichnet ein Quad --> Ziel ist das Update des alpha-Werts betroffener Pixel
  14. glColorMask(1,1,1,1);


Das ganze ist Teil einer Simulation einer gläsernen Oberfläche (siehe GPU Gems 2), die das Licht bricht...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Feb 20, 2006 16:20 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Eventuell macht dir der Tiefenpuffer einen strich durch die rechnung. Lösch mal den Tiefenpuffer direkt vor dem Maskieren des Puffers. Nur um zu sehen, obs dann geht.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Feb 20, 2006 16:23 
Offline
DGL Member

Registriert: Mo Feb 06, 2006 14:55
Beiträge: 6
Wohnort: Essen
Habe das Problem bereits gelöst...war den thread nicht wert :)

Code:
  1.  
  2. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  3. setPerspective();
  4.    
  5. // render scene
  6. glColor4f(1,1,1,1);
  7.        renderNonRefractiveObjects();
  8.  
  9. // render alpha mask
  10. glColorMask(0,0,0,1);
  11. glEnable(GL_BLEND);          // neu
  12. glBlendFunc(GL_ZERO,GL_ZERO);          // neu
  13. glColor4f(0,0,0,0);
  14. glTranslatef(0.0f,0.0f,2.0f);
  15. glRotatef(rot,0.0f,1.0f,0.0f);
  16.     renderRefractiveObjects();
  17. glDisable(GL_BLEND);          // neu
  18. glColorMask(1,1,1,1);


Habe alpha masking verwendet und sowohl source als auch destination factors auf GL_ZERO gesetzt. Damit resultiert ein
Fragment, das den depth test besteht, in einer Veränderung des alpha Kanals von 1 nach 0, RGB bleiben aufgrund der color mask
unbeeinflusst.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Feb 20, 2006 16:24 
Offline
DGL Member

Registriert: Mo Feb 06, 2006 14:55
Beiträge: 6
Wohnort: Essen
Naja, um den Tiefenpuffer gehts mir ja gerade, weil ich Teile, die durch opaque Objekte verdeckt werden, ausschließen will. Aber besten Dank für die Antwort!


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 4 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.010s | 15 Queries | GZIP : On ]