z-Buffer Artefakte


  • Mod

    vielleicht könnten wir dir wenn wir einen screenshot sehen besser helfen (falls wir da fehler sehen oder so)

    die einfachste methode um die umrandung um objekte zu bekommen war glaube ich, wenn man das objekt leicht scaled (vergrößter) und nur die backfaces rendert (in schwarz z.B. fogcolor schwarz und volle intensität, oder lighting an und keine lichtquellen)

    damit schaut es gut aus, wenn man es richtig eingestellt hat.

    kann es vielleicht sein dass du vertexshader und TnL kombinierts?

    rapso->greets();



  • Hi,

    Ja der zBuffer ist D3DFMT_D24X8.

    Ich bin grad in der Firma und der Scrennshot kommt deswegen später.

    Angenommen ich würde die Objekte leicht vergrößert, schwarz rendern, dann hätte ich aber noch keine schwarzen Kanten bei z.B. Ausschnitten aus einer Fläche. da ja "Löcher" sozusagen verkleinert werden müssten. Nichtsdestotrotz ein guter Gedanke. Aber ob das auch das Problem mit nach hinten aufeinandertreffenden Kanten lösen würde? Ich glaubs nicht, da die z-Werte ja geringe seien müssten als vorher...

    Probieren werd ichs aber...


  • Mod

    naja, am besten läuft das wohl im vertexshader wo man pro vertex die normale (skaliert) aufaddiert.

    und wie schaut es nun mit vertexshadern aus, nutzt du die nun vielleicht in kombination mit TnL?

    rapso->greets();



  • Nö, keine VertexShader, nur FVF. Ansonsten ist eine HAL-Device mit wahlweise Softwarevertexprocessing. GK ist eine Geforce4 Ti-42000.



  • illuminator schrieb:

    Nö, keine VertexShader, nur FVF. Ansonsten ist eine HAL-Device mit wahlweise Softwarevertexprocessing. GK ist eine Geforce4 Ti-42000.

    GeForce 4 Ti-42000 ?? - WOW!! 😉



  • Kann man die Linien nicht vor den eigentlichen Objekten mit zwrite disabled rendern?



  • leider nicht. aber auch umgekehrt würde das leider nichts bringen, da man dann ja auch die umrandungs-linien der wände, die vom betrachter weg weisen sehen würde. die möglichkeit eine art line-width einzustellen müßte aber doch irgendwie möglich sein.



  • ZBias == 16? Wirklich 16 oder was meinst Du? Das ist aber schon recht viel....

    Normalerweise macht man es in etwa so:

    fBias = -0.00002f;
    g_pDev->SetRenderState( D3DRS_DEPTHBIAS, *((DWORD*)&fBias));
    

    So müsste das dann eigentlich auf funktionieren.

    P.S: Falls Du auf diese '16' über die SDK-Doku gekommen bist, dann ist es Dir genauso gegangen wie mir am Anfang. Die Stelle ist irgendwie net so verständlich...



  • etwas umständlicher gehts auch: doch mit scaling.
    wenn man die weltmatrix um das kamera-zentrum (vFrom) etwas größer skaliert, dann die wände zeichnet, dann die unskalierte (1,1,1) matrix setzt und anschließend die linien zeichnet klappts auch ganz gut!



  • Hi "mac_bu" 😃 ,

    sieht so aus als hättest du dass schon ausprobiert 🙂 😉

    btw.: wie siehts am Freitag/Wochenende zeitlich bei dir aus?



  • Wenn man da 16 angibt, dann interpretiert er den DWORD-Wert 16 auf Bit-Ebene als float, und dabei wird garantiert totaler Mist rauskommen.



  • TomasRiker schrieb:

    Wenn man da 16 angibt, dann interpretiert er den DWORD-Wert 16 auf Bit-Ebene als float, und dabei wird garantiert totaler Mist rauskommen.

    Totaler Mist nicht, sondern irgendeine Zahl. 😉


Anmelden zum Antworten