Stencil-Buffer Z-Buffer Zusammenspiel
Ziel: eine Bohrung (Zylinder) in einem Quader
ich schreibe zunächst Kontur "Bohrung" in den Stencilbuffer, ohne zu zeichnen.
Delphi-Quellcode:
glenable (GL_Stencil_Test);
// glStencilFunc (gl_Equal,1,1);
glstencilmask ( $01 );
glStencilFunc ( //Bestimmt die Funktion für den Stenciltest.
gl_never,//func: GL_NEVER, GL_LESS, GL_LEQUAL, GL_GREATER, GL_GEQUAL, GL_EQUAL,
// GL_NOTEQUAL, und GL_ALWAYS
1, // ref: Gibt den Referenzwert für den Stenciltest an.
// ref ist auf das Intervall[0, 2^n-1] beschränkt
1 // mask:Spezifiziert eine Maske die mit den Referenzwert
// und dem gespeicherten Wert UND-Verknüpft wird, bevor der Test durchgeführt wurde.
// Vorgabewert ist eine mit einsen gefüllte Bitmaske.
);
glStencilOp ( // Die Parameter können folgende Konstanten enthalten: GL_KEEP, GL_ZERO,
// GL_REPLACE, GL_INCR, GL_INCR_WRAP, GL_DECR, GL_DECR_WRAP, GL_INVERT
GL_Replace,// fail : Legt fest, was gemacht wird, wenn der Stencil-Test fehlschlägt.
GL_Replace,// zfail : Legt fest, was passiert, wenn der Stencil-Test erfolgreich ist
// aber der Tiefentest fehlschlägt
GL_Replace // zpass : Legt fest, was passiert, wenn sowohl der
// Stenciltest als auch Tiefentest erfolgreich ist. I
// Ist der Tiefentest deaktiviert, so gilt dieser als bestanden
)
über Never erreiche ich dass zunächst nicht gezeichnet wird.
Der Stencilbuffer wird zuerst mit dem Loch gefüllt.
Dann wird der Quader gezeichnet.
bis hierher funktioniert es soweit, dass die Bohrung komplett ausgespart wird,
was aber zuviel ist.
Nun will ich als nächstes den Quader zeichnen und zwar mit folgendem Ziel:
Dort, wo die Quaderanteile in Z-Richtung hinter der Bohrung liegen, soll nichts gezeichnet werden.
Wenn die Quaderanteile in Z-Richtung vor der Bohrung liegen soll gezeichnet werden.
Gibt es hierzu ein Bsp.?