OpenGl - Tiefenbufferproblem



  • Hallo

    Ich hab ein kleines Problem mit den Tiefenbuffer in Opengl.

    Folgende Situation:
    Ich habe in meiner Szene ein Partikelsystem und andere 3D Objekte.
    Die Partikel selbst sollen sich gegenseitig nicht verdecken, wohl aber von den anderen Objekten verdeckt werden.

    Ich versuch mal die Kernelemente meines bisherigen Codes zusammenzufassen:

    int DrawGLScene(GLvoid){
     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
     glLoadIdentity(); 
    
     glEnable( GL_DEPTH_TEST );	  //Tiefenpuffer test aktivieren		   
     glDepthMask(GL_TRUE);       //Tiefenpuffer writeable
     glDepthFunc(GL_LEQUAL);     //kleiner oder gleich, besteht test
    
     glDisable(GL_BLEND);        //Blending an
    
     3D-Objektzeichnen();
    
     //Nun das Partikelsystem....
     glDepthMask(GL_FALSE);  //Writeable aus
    
     glEnable(GL_BLEND);  //Blending an
     glBlendFunc(GL_SRC_ALPHA,GL_ONE); 
    
     DiePartikelzeichnen();
    
     glend();
     return TRUE; 
    }
    

    Nun, soweit klappt alles ganz gut, die Partikel sehen gut aus (dank blending und ohne Tiefentest) und werden auch vom Objekt verdeckt. Nur hab ich jetzt das Problem das wenn ich die Scene drehe, Teile meines 3D-Objektes plötzlich verschwinden (und zwar die die nach hinten gedreht werden) und erst wieder auftauchen wenn ich die Z Achse hinein zum Objekt zoome.

    Ich vermute also ich hab irgendwas beim Tiefenpuffer nicht bedacht (progammiere auch noch nicht lange mit opengl).

    Ich hoffe jemand kann mir helfen 🙂



  • clipping planes (gluPerspective) anpassen?



  • Danke für die Antwort aber ich denke daran liegts nicht.

    Es ist irgendwas zwichen den beiden Objekten (3D objekt und Partikelsystem).

    Wenn ich das "glDepthMask(GL_FALSE); //Writeable aus" bei den Partikelsystem rausnehme sieht das Objekt wunderbar aus, auch beim drehen, nur sehen die Partikel dann komisch aus, weil sie nicht miteinander "verschmelzen", wegen den Tiefenbuffertest.



  • Falls du rausfindest, an was das liegt, dann bitte hier posten!!
    Ich hatte/hab da auch ein Problem. Ich habe einen Algorithmus aus Gems 1 übernommen(etwas um Bezug auf transparent), und der Haut auch nicht wirklich hin. Der Algorithmus erscheint logisch, aber mir fehlen dann einfach Dreiecksseiten.
    Auch da wird mit Tiefenpuffer schreiben an/aus rumgespielt.



  • Hallo nochmal,

    Ja habs jetzt hinbekommen, eigentlich mehr durch probieren...

    Ich mußte die DepthMask genau vor dem zeichnen jedes einzellnen partikels deaktivieren (und nicht vor dem ganzen partikelsystem) und dazu, sie dannach sofort wieder anwerfen (und nicht erst beim nächten frame),in etwa so:

    glDepthMask(GL_FALSE);
    particle[loop]->draw();
    glDepthMask(GL_TRUE);

    Jetzt sieht alles perfekt aus 🙂

    Edit: Ich denke es war nur der letzte Punkte wichtig, also die glDepthMask(GL_TRUE) noch am Ende der DrawGLScene.


Anmelden zum Antworten