Flowyes
07-11-2004, 15:09
Ich hab wieder Probleme: Mit z buffering.
In CG1Canvas das Z-Buffer initialisieren und in CG1Canvas.setPixel(int x,int y,Color c, double z) schauen, ob ich einen Z-Wert hab, der größer ist als der aktuelle Wert an der entsprechenden Stelle im Z-Buffer, funktioniert.
In CG1FlatShadedPolygon buildEdgeList() und fillScan() um zIntersect und dzPerScan erweitern müsste an sich auch funktionieren bei mir. In CG1FlatShadedPolygon.buildEdgeList() speichere ich einfach zu jedem xIntersect den entsprechenden zIntersect und dzPerScan krieg ich einfach mit:
(z2 - z1) / (x2 - x1)
wobei ich die Z-Werte aus dem array depth[] lese und z1, x1 die Anfangspunkte, und z2, x2, die Endpunkte dieser Kante sind.
In CG1FlatShadedPolygon.fillScan() setze ich ein Pixel und erhöhe dann den Wert von zIntersect um dzPerScan, gleich nachdem ich den x-Wert in dieser Scanlinie erhöht habe (ist das vielleicht ein Schwachsinn? Mir machts irgendwie Sinn aber sagt bitte ob das falsch ist oder nicht). Sonst hab ich bis jetzt nichts gemacht. Meiner (wahrscheinlich falschen) Meinung nach müsste die Z-Buffer-Methode funktionieren aber dieser screenshot z.B. schaut sehr fr33ky aus :) (Hier liegen alle Flächen der Kugel hinter der Teekanne) Also müsste nur der kleine Teil unten sichtbar sein eigentlich)
Wo könnte mein Fehler liegen, ich komm echt nicht dahinter...
In CG1Canvas das Z-Buffer initialisieren und in CG1Canvas.setPixel(int x,int y,Color c, double z) schauen, ob ich einen Z-Wert hab, der größer ist als der aktuelle Wert an der entsprechenden Stelle im Z-Buffer, funktioniert.
In CG1FlatShadedPolygon buildEdgeList() und fillScan() um zIntersect und dzPerScan erweitern müsste an sich auch funktionieren bei mir. In CG1FlatShadedPolygon.buildEdgeList() speichere ich einfach zu jedem xIntersect den entsprechenden zIntersect und dzPerScan krieg ich einfach mit:
(z2 - z1) / (x2 - x1)
wobei ich die Z-Werte aus dem array depth[] lese und z1, x1 die Anfangspunkte, und z2, x2, die Endpunkte dieser Kante sind.
In CG1FlatShadedPolygon.fillScan() setze ich ein Pixel und erhöhe dann den Wert von zIntersect um dzPerScan, gleich nachdem ich den x-Wert in dieser Scanlinie erhöht habe (ist das vielleicht ein Schwachsinn? Mir machts irgendwie Sinn aber sagt bitte ob das falsch ist oder nicht). Sonst hab ich bis jetzt nichts gemacht. Meiner (wahrscheinlich falschen) Meinung nach müsste die Z-Buffer-Methode funktionieren aber dieser screenshot z.B. schaut sehr fr33ky aus :) (Hier liegen alle Flächen der Kugel hinter der Teekanne) Also müsste nur der kleine Teil unten sichtbar sein eigentlich)
Wo könnte mein Fehler liegen, ich komm echt nicht dahinter...