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

Aktuelle Zeit: Fr Jul 18, 2025 11:47

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



Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: SDL und Stencilbuffer
BeitragVerfasst: Mi Okt 26, 2005 22:13 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ich woltle gerade mal was mit dem Stencil test machen, und hab schon alles mögliche Versucht. Aber OpenGL ignoriert meine Stencilmaske und rendert weiter wie bisher.

Da hab ich folgenden Befehl im SDL Wiki gefunden: http://www.libsdl.org/cgi/docwiki.cgi/SDL_5fGLattr

Hat SDL Standardwerte für die Stencilbuffergröße definiert, oder ist der 0Bit groß, und deshalb funktioniert mein Test nicht? Welche größe sollte ich für den Stencilbuffer angeben?

Vielleicht liegts aber auch an meinem Code, deshalb hier mal der interessante Teil:

So ist mein OpenGL beim Rendervorgang eingestellt:

Code:
  1. void TUIManager::SetupOpenGL()
  2. {
  3.     glColor3f(1,1,1);
  4.    
  5.     glDisable(GL_LIGHTING);
  6.    
  7.     glDisable(GL_DEPTH_TEST);
  8.    
  9.     glShadeModel(GL_FLAT);
  10.    
  11.     glEnable(GL_TEXTURE_2D);
  12.    
  13.     glEnable(GL_BLEND);
  14.     glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
  15. };



Und hier kommt die Maske ins Spiel.
Ich will eine rechteckige Maske in der Größe meiner GUI-komponente rendern, um zu verhindern, dass Schrift darüber raus gerendert wird.

Code:
  1.         //Paint components
  2.         glEnable(GL_STENCIL_TEST);
  3.         for (i = 0; i < components.size(); i++)
  4.         {
  5.             component = components[i];
  6.             if (component == NULL) continue;
  7.        
  8.             //build the stencil mask for this component
  9.             glClear(GL_STENCIL_BUFFER_BIT);
  10.             glColorMask(GL_FALSE,GL_FALSE,GL_FALSE,GL_FALSE);
  11.             glStencilFunc(GL_ALWAYS, 1, 1);
  12.             glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
  13.             glDisable(GL_TEXTURE_2D);
  14.             glDisable(GL_BLEND);
  15.            
  16.             int blX = component->getPosX();
  17.             int blY = component->getPosY();
  18.             int urX = blX + component->getWidth();
  19.             int urY = blY + component->getHeight();
  20.            
  21.             //draw stencil mask
  22.             glBegin(GL_QUADS);
  23.               glVertex2f(blX,urY);
  24.               glVertex2f(blX,blY);
  25.               glVertex2f(urX,blY);
  26.               glVertex2f(urX,urY);
  27.             glEnd();
  28.            
  29.             glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
  30.             glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_TRUE);
  31.             glEnable(GL_TEXTURE_2D);
  32.             glEnable(GL_BLEND);
  33.            
  34.             result = result && component->OnDraw(uimanager);
  35.         }
  36.         glDisable(GL_STENCIL_TEST);


Läuft hier irgendwas verkehrt? Ich hab das mit der Maske aus dem Stencilspiegel-Tutorial von Sascha... :wink:

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Okt 27, 2005 07:32 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Für eine rechteckige Maske solltest du wohl eher den Scissor Test verwenden. Der ist genau für so etwas ausgelegt und dürfte woh schneller und Speicherschonender sein. Wenn du allerdings "runde Ecken" haben möchtest kannst du damit nicht viel anfangen.

Ach ja. Zu deinem Stencilproblem. Üblicherweise ist ein Stencilbuffer von 8 Bit üblich. (Meine ich zu mindest) Denke auch mal, dass es daran liegt.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 2 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:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.007s | 14 Queries | GZIP : On ]