Martin Grödl
2003-12-16 19:35:22 UTC
hi,
mein gouraud shading funktioniert schon, nur das clippen der
vertex-normals macht noch probleme:
wenn ich das richtig verstanden habe, muss in den überschriebenen
methoden clipPoint(), und closeClip() immer wenn ein punkt ins
clipped-array aufgenommen wird, auch der geclippte vetex-normalvektor
nach clippedNormals[cnt] geschrieben werden.
den geclippten normalvektor müsste man durch interpolation aus den
endpunkt-normalvektoren der geclippten edge bekommen, etwa durch:
n_clip.x = n_1.x + (v_clip.x - v_1.x)/(v_2.x - v_1.x) * (n_2.x - n_1.x)
n_clip.y = ...
n_clip.z = ...
wobei v_1 und v_2 die endpunkte der edge, n_1 und n_2 die normalen an
den eckpunkten sind.
mein problem ist jetzt die konkrete implementierung in
CG1GouraudShadesPolygon.clipPoint:
der geclippte punkt ist ja iPt
der eine endpunkt ist vertices[num], wenn ich beim aufruf von clipPoint
in clip den index des punktes mit übergebe. (oder einfach point)
der dazugehörige normalvektor ist dann vertexNormals[num].
der zweite punkt ist dann s[edge], aber wie bekomme ich den zugehörigen
normalvektor??
im closeClip hab ich auch das gleiche problem...
mein gouraud shading funktioniert schon, nur das clippen der
vertex-normals macht noch probleme:
wenn ich das richtig verstanden habe, muss in den überschriebenen
methoden clipPoint(), und closeClip() immer wenn ein punkt ins
clipped-array aufgenommen wird, auch der geclippte vetex-normalvektor
nach clippedNormals[cnt] geschrieben werden.
den geclippten normalvektor müsste man durch interpolation aus den
endpunkt-normalvektoren der geclippten edge bekommen, etwa durch:
n_clip.x = n_1.x + (v_clip.x - v_1.x)/(v_2.x - v_1.x) * (n_2.x - n_1.x)
n_clip.y = ...
n_clip.z = ...
wobei v_1 und v_2 die endpunkte der edge, n_1 und n_2 die normalen an
den eckpunkten sind.
mein problem ist jetzt die konkrete implementierung in
CG1GouraudShadesPolygon.clipPoint:
der geclippte punkt ist ja iPt
der eine endpunkt ist vertices[num], wenn ich beim aufruf von clipPoint
in clip den index des punktes mit übergebe. (oder einfach point)
der dazugehörige normalvektor ist dann vertexNormals[num].
der zweite punkt ist dann s[edge], aber wie bekomme ich den zugehörigen
normalvektor??
im closeClip hab ich auch das gleiche problem...