OpenSceneGraph und tranzparente Objekte
-
hi
ich habe ein Problem mit osg und transparenten Texturen. Die Objekte an sich werden richtig geordnet aber innerhalb eines Objektes kommt es zu Problemen.
siehe : http://www.aucb.de/user/RON/tmp/neu.jpgGLint i = textures[tTexCount_activ]->getImage()->getInternalTextureFormat(); if(i==6408){ // transparente Texture TexEnv* blendTexEnv = new TexEnv; blendTexEnv->setMode(TexEnv::BLEND); state->setTextureAttribute(1,blendTexEnv); state->setRenderBinDetails( 11, "DepthSortedBin"); state->setRenderBinDetails( 2, "RenderBin" ); state->setMode(GL_BLEND,osg::StateAttribute::ON); //state->setMode(GL_DEPTH_TEST,osg::StateAttribute::OFF); state->setRenderingHint( StateSet::TRANSPARENT_BIN ); AlphaFunc* alphaFunc = new AlphaFunc; alphaFunc->setFunction(AlphaFunc::GEQUAL,0.05f); state->setAttributeAndModes( alphaFunc, StateAttribute::ON); } else { // normale Texture state->setRenderingHint( StateSet::STATIC ); state->setRenderBinDetails( 1, "DepthSortedBin" ); state->setRenderBinDetails( 1, "RenderBin" ); state->setMode(GL_BLEND,osg::StateAttribute::OFF); state->setMode(GL_DEPTH_TEST,osg::StateAttribute::ON); state->setRenderingHint( StateSet::OPAQUE_BIN ); state->setMode( GL_CULL_FACE, osg::StateAttribute::OVERRIDE | osg::StateAttribute::ON ); } state->setTextureAttributeAndModes(0, textures[tTexCount_activ], StateAttribute::ON);danke
Mr.Betatester
-
Bei Alpha-Blending wird jede zu zeichnende Pixelfarbe mit dem Hintergrund gemischt.
Das setzt aber voraus, dass der Hintergrund bereits gezeichnet ist. Du musst Deine transparenten Polygone also von hinten nach vorne sortieren.
Wenn die Blaetter des Baumes nur aus zwei ueberlappenden Polygonen bestehen, ist es unmoeglich diese zu sortieren; Du musst sie dann in 4 Quads unterteilen die sich im Zentrum treffen.
Auf Deinem Screenshot blockiert ausserdem der ZBuffer dahinterliegende Pixel, am besten schaltest Du das Schreiben des ZBuffers fuer transparente Objekte ab.
Nicht-transparente Objekte werden in einem vorherigen Durchgang gezeichnet.
-
jap sowas hab ich schon befürchtet ^^. das ausschalten des ZBuffers geht leider nicht, da dann transparente Objekte, welche hinter statistischen sind,davor gezeichnet werden.
-
Und deswegen schaltet man auch nur das *Schreiben* in den Z-Buffer ab.
Der Z-Test wird weiter ausgefuehrt und der Z-Buffer enthaelt bereits die Tiefinformationen nicht-transparenter Objekte.
-
kann mir jemand zufällig sagen, wie ich das Schrieben in den ZBuffer verhindern kann mit osg? ich finde nur Beispiele, wie man den Test deaktivieren kann.
Danke
Mr.Betatester
-