Ich verstehe nicht, warum diese beiden Codes nicht das gleiche Ergebnis liefern. Ich habe eine gründlichere Prüfung freigegeben und Schablonentests und meine Hauptschleife sieht wie folgt aus:Stencil Puffer Verhalten im einfachen Fall (GL_ALWAYS, GL_LEQUAL)
myShader.Use() // Use shader program
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
// define model, projection, view, ....
glBindVertexArray(VAO[0]);
glStencilMask(0xFF); // Enable stencil buffer writing
glStencilFunc(GL_ALWAYS, 1, 0xFF);
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
drawCube(&myShader, model, projection, view);
glBindVertexArray(0);
Offensichtlich mein Würfel macht in diesem Fall.
Allerdings, wenn ich diesen Code verwenden, macht nichts:
myShader.Use() // Use shader program
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
// define model, projection, view, ....
glBindVertexArray(VAO[0]);
glStencilMask(0xFF); // Enable stencil buffer writing
glStencilFunc(GL_LEQUAL, 1, 0xFF);
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
drawCube(&myShader, model, projection, view);
glBindVertexArray(0);
Mit nur einem Objekt in meiner Szene, sollten beide Code die gleiche Art und Weise verhalten. Aber es tut es nicht.
Ich dachte, es hatte etwas mit dem Standardwert im Stencil-Puffer zu tun. Da ich aber vor dies zu tun, den Stencilbuffer bin löschen, soll der Standardwert 0.
Durch die Art und Weise sein, mit diesem Code, macht der Würfel auch:
myShader.Use() // Use shader program
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
// define model, projection, view, ....
glBindVertexArray(VAO[0]);
glStencilMask(0xFF); // Enable stencil buffer writing
glStencilFunc(GL_LEQUAL, 0, 0xFF);
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
drawCube(&myShader, model, projection, view);
glBindVertexArray(0);
ich nicht verstehe was passiert.