Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Stencil-Buffer Z-Buffer Bohrung in Quader (https://www.delphipraxis.net/181453-stencil-buffer-z-buffer-bohrung-quader.html)

luisk 16. Aug 2014 13:38

Stencil-Buffer Z-Buffer Bohrung in Quader
 
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.?

Jens01 16. Aug 2014 13:43

AW: Stencil-Buffer Z-Buffer Bohrung in Quader
 
Ist das Reintriangulierens eines Loches in die Quaderfläche eine Lösung? In der GLU-Lib gibt es eine Möglichkeit zum Triangulieren.

luisk 16. Aug 2014 13:51

AW: Stencil-Buffer Z-Buffer Bohrung in Quader
 
Zitat:

Zitat von Jens01 (Beitrag 1268838)
Ist das Reintriangulierens eines Loches in die Quaderfläche eine Lösung? In der GLU-Lib gibt es eine Möglichkeit zum Triangulieren.

Die Lösung soll über den Stencil- und Z-Buffer erfolgen ohne Dreieckszerlegung.

Dort, wo die Z-Koordinate des Bohrungszylindes vor den Quader-Pixeln liegt ist die Bohrung sichtbar. An diesen Stellen darf der Quader nicht gezeichnet werden.
Dort, wo die Bohrung unsichtbar ist, liegen die Quaderpixel über der Bohrung und müssen gezeichnet werden.

Ist eigentlich einfach, (wenn mans´s selber in ein Bitmap schreiben würde)
Aber wie kann man die Stencil-Fnktionen hierzu parametrieren ?

Hier wurde das Thema auch diskutiert, leider ohne Erfolg:
http://www.opengl.org/discussion_boa...fer-is-working


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:49 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz