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:
int Bits;
glGetIntegerv(GL_STENCIL_BITS, &Bits);//Bits ist 8
bool Enable = GL_TRUE == glIsEnabled(GL_STENCIL_TEST);//Enable liefert True zurück.
glStencilFunc(GL_ALWAYS, 1, 0xFF);
glStencilMask(0xFF);
glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE);//Nicht mal Replace mit 1 geht. Eigentlich gehört hier natürlich GL_INVERT hin.
glColorMask(GL_FALSE, GL_FALSE, GL_TRUE, GL_FALSE);//Das True beim Blau-Kannal zu Debugzwecken
glDrawArrays(GL_TRIANGLES, 0, 60);
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.
glStencilMask(0xFF);
glStencilOp(GL_KEEP, GL_ZERO, GL_ZERO);
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
glDrawArrays(GL_TRIANGLES, 0, 60);//Von diesem Drawcall bekommt man nichts zu Gesicht, weil kein Fragment durch die Stencilprüfung kommt.
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 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.
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)
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.
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.