Martin Grödl
2003-12-06 14:09:05 UTC
mein backface culling liefert etwas komische ergebnisse:
Loading Image...
an rand der kugel werden einige polygone gezeichnet die eigentlich vom
betrachter wegschauen, also backfaces.
das ganze wird noch deutlicher, wenn man eine extremere perspektive
einstellt:
Loading Image...
das backface-culling hab ich so gemacht:
face-normals werden berechnet indem ich die ersten 3 punkte jedes
polygons betrachte (vertexTable[faceTable[i][2]] = erster punkt usw).
dann bilde ich einfach das kreuzprodukt von (punkt2 - punkt1) und
(punkt3 - punkt1) und das ist der normalvektor.
in CG1Object.draw() werden dann jene faces deren normalvektor ein z<=0
hat übersprungen.
außerdem musste ich CG1Object.transform() so ändern, dass die
faceNormals immer transformiert werden und nicht nur im render-mode
flatshaded. das weicht aber von der musterlösung ab, deshalb muss das
auch irgendwie anders gehn...
mein fehler muss wohl etwas damit zu tun haben, dass die face-normals
nur bis ins viewing-system transformiert werden...
bei den beispiel screenshots schauts jedenfalls nicht so aus
mich irritiert auch, dass im kommentar steht man soll das backface
culling im device-koord.system durchführen...wie soll das gehn?
Loading Image...
an rand der kugel werden einige polygone gezeichnet die eigentlich vom
betrachter wegschauen, also backfaces.
das ganze wird noch deutlicher, wenn man eine extremere perspektive
einstellt:
Loading Image...
das backface-culling hab ich so gemacht:
face-normals werden berechnet indem ich die ersten 3 punkte jedes
polygons betrachte (vertexTable[faceTable[i][2]] = erster punkt usw).
dann bilde ich einfach das kreuzprodukt von (punkt2 - punkt1) und
(punkt3 - punkt1) und das ist der normalvektor.
in CG1Object.draw() werden dann jene faces deren normalvektor ein z<=0
hat übersprungen.
außerdem musste ich CG1Object.transform() so ändern, dass die
faceNormals immer transformiert werden und nicht nur im render-mode
flatshaded. das weicht aber von der musterlösung ab, deshalb muss das
auch irgendwie anders gehn...
mein fehler muss wohl etwas damit zu tun haben, dass die face-normals
nur bis ins viewing-system transformiert werden...
bei den beispiel screenshots schauts jedenfalls nicht so aus
mich irritiert auch, dass im kommentar steht man soll das backface
culling im device-koord.system durchführen...wie soll das gehn?