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

Aktuelle Zeit: So Jul 06, 2025 22:28

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



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Stencilbuffer bleibt immer leer
BeitragVerfasst: So Nov 10, 2013 15:23 
Offline
DGL Member

Registriert: Do Dez 29, 2011 19:40
Beiträge: 421
Wohnort: Deutschland, Bayern
Programmiersprache: C++, C, D, C# VB.Net
Ich habe im Moment ein seltsames Problem mit dem Stencilbuffer. Es hat bereits funktioniert. Jetzt jedoch seit einigen Tagen nicht mehr, ohne erkennbaren Grund. Ich möchte mit den Stencilbuffer und dem Fencefill-Algorithmus beliebig komplexe konkave Polygone rendern ohne CPU-Belastung. Davor trage ich für jede Kante des Polygons ein Trapez vom Fence zur Kante ein. Das funktioniert auch. Jedoch weigert sich der StencilBuffer beharrlich seinen Wert zu ändern. Ich möchte jetzt nämlich, wie es der Fencefill-Algorithmus vorsieht, in dem Trapezen zum Fence immer den Stencilwert invertieren.
Erstmal Code:
Code:
  1.  
  2. int Bits;
  3. glGetIntegerv(GL_STENCIL_BITS, &Bits); //Bits ist 8
  4. bool Enable = GL_TRUE == glIsEnabled(GL_STENCIL_TEST); //Enable liefert True zurück.
  5.  
  6. glStencilFunc(GL_ALWAYS, 1, 0xFF);
  7. glStencilMask(0xFF);
  8. glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE); //Nicht mal Replace mit 1 geht. Eigentlich gehört hier natürlich GL_INVERT hin.
  9. glColorMask(GL_FALSE, GL_FALSE, GL_TRUE, GL_FALSE); //Das True beim Blau-Kannal zu Debugzwecken
  10. glDrawArrays(GL_TRIANGLES, 0, 60);
  11.  
  12. glStencilFunc(GL_GREATER, 0, 0xFF); //Ob Equals 1 oder Greater 0 oder sonst irgend etwas, ist völlig wurscht, es wird nie etwas gerendert. Beispielsweise bei Equals 0 wird korrekt gerendert.
  13. glStencilMask(0xFF);
  14. glStencilOp(GL_KEEP, GL_ZERO, GL_ZERO);
  15. glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
  16. glDrawArrays(GL_TRIANGLES, 0, 60); //Von diesem Drawcall bekommt man nichts zu Gesicht, weil kein Fragment durch die Stencilprüfung kommt.
  17.  


Bilder im Anhang. Damit man die Form besser erkennen kann, die gezeichnet werden sollte, habe ich das Linienrendering im zweiten Bild eingschaltet.
Ich habe den Stencilbuffer bereits mit dem gDebugger geprüft. Er ist immer überall 0. Egal was ich bei Stencilop einstelle.
Es treten auch keine OpenGL Fehler auf.

Der Vertexshader sieht so aus:
Code:
  1.  
  2.     uniform mat3x3 ViewTransformMatrix;
  3.     uniform mat3x3 TextureMatrix;
  4.     uniform vec4 Color;
  5.    
  6.     layout(location = 0) in vec2 Position;
  7.     //layout(location = 1) in vec4 Color;
  8.     //layout(location = 2) in vec2 TexCoord0;
  9.  
  10.     smooth out vec2 FragTexCoord0;
  11.     smooth out vec4 FragColor;
  12.    
  13.     vec4 TransformPosition(vec2 PositionVec)
  14.     {
  15.         vec3 NewPositon = ViewTransformMatrix * vec3(PositionVec.x, PositionVec.y, 1.0);
  16.         return vec4(NewPositon.x, NewPositon.y, 0.0, NewPositon.z);
  17.     }
  18.     void main()
  19.     {
  20.         gl_Position = TransformPosition(Position);
  21.         FragTexCoord0 = Position;
  22.         FragColor = Color;
  23.     }
  24.  

Der Fragmentshader sieht so aus:
Code:
  1. uniform sampler2D TexSampler;
  2.  
  3.     in vec2 FragTexCoord0Out;
  4.     in vec4 FragColor;
  5.     out vec4 OutColor;
  6.  
  7.     void main()
  8.     {
  9.         OutColor = FragColor; // * texture2D(TexSampler, FragTexCoord0);
  10.     }
  11.  


Der Stencilbuffer ist wie oben auch im Code steht angeschaltet und hat 8 Bits. Ich bin total überfragt, weshalb er hier nicht funktioniert. Deshalb frage ich jetzt euch um Rat. :)


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Stencilbuffer bleibt immer leer
BeitragVerfasst: Mo Nov 11, 2013 10:37 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
Moinsen, hast du eventuell vergessen den Stencil Test zu aktivieren?

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Stencilbuffer bleibt immer leer
BeitragVerfasst: Mo Nov 11, 2013 13:53 
Offline
DGL Member

Registriert: Do Dez 29, 2011 19:40
Beiträge: 421
Wohnort: Deutschland, Bayern
Programmiersprache: C++, C, D, C# VB.Net
Ja, habe ich überprüft, habe ich auch in den Quelltext geschrieben...
Code:
  1. bool Enable = GL_TRUE == glIsEnabled(GL_STENCIL_TEST); //Enable liefert True zurück.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Stencilbuffer bleibt immer leer
BeitragVerfasst: Mo Nov 11, 2013 16:27 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 14, 2013 21:17
Beiträge: 588
Programmiersprache: C++
Du schreibst in gl_Position.w nicht 1.0, sondern den Wert NewPositon.z. Hat das seine Richtigkeit?

_________________
So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Stencilbuffer bleibt immer leer
BeitragVerfasst: Mo Nov 11, 2013 21:17 
Offline
DGL Member

Registriert: Do Dez 29, 2011 19:40
Beiträge: 421
Wohnort: Deutschland, Bayern
Programmiersprache: C++, C, D, C# VB.Net
Ja, hat seine Richtigkeit. Ich mache den selben Fehler nicht zwei mal. :)
Bei einer 3*3 Matrix mit 2 Komponentenvektor Multiplikation steht der Wert für die perspektivische Transfomation in der Z-Koordinate. Da die Grafikkarte die Division mit W durchführt trage ich sie dort ein.
Du siehst ja an den Bildern das prinzipiell schon richtig gezeichnet.


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 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.015s | 16 Queries | GZIP : On ]