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.z - n_1.z)
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...
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)
Ciao,
Christoph
ch...@cg.tuwien.ac.at
"Martin Grödl" <e022...@student.tuwien.ac.at> schrieb im Newsbeitrag
news:3fdf5e77$0$33210$3b21...@tunews.univie.ac.at...
also ich hab jetzt zwei arrays firstIdx[] und sIdx[] hinzugefügt, die
die analog zu first[] und s[] den Index des Punktes speichern.
funktioniert aber leider immer noch nicht :(
http://stud4.tuwien.ac.at/~e0226538/bsp6.jpg
wenn cross(point, s[edge], edge) in clipPoint true gibt und edge<TOP ist
dann rufe ich clipPoint(iPt, num, edge+1) auf.
ist edge=TOP dann wird ja der Punkt iPt nach clipped[cnt] übernommen.
clippedNormals[cnt] wird dann aus vertices[num], vertices[sIdx[edge]],
vertexNormals[num], vertexNormals[sIdx[edge]] und iPt interpoliert.
wenn inside(point, edge) true gibt dann wird auch clipPoint(point, num,
edge+1) aufgerufen.
sonst wird point übernommen und clippedNormals[cnt] = vertexNormals[num].
in closeClip:
ist cross(s[edge], first[€dge], edge] true und edge<TOP wird
clipPoint(iPt, firstIdx[edge], edge+1) aufgerufen, sonst
wird iPt in clipped aufgenommen und clippedNormals[cnt] aus
vertices[firstIdx[edge]], vertices[sIdx[edge]],
vertexNormals[firsIdx[edge]], vertexNormals[sIdx[edge]] und iPt
interpoliert.
irdendwas passt da noch nicht... vieleicht geht's ja auch ohne
firstIdx[] und sIdx[] aber wie??? das mit dem vertexNormals[num-1] hat
auch nicht geklappt...
bin für hilfe sehr dankbar...
> Probier's mal mit vertexNormals[num-1] (das wär ja der "letzte"
> Normalvektor).
also ich hab jetzt zwei arrays firstIdx[] und sIdx[] hinzugefügt, die
die analog zu first[] und s[] den Index des Punktes speichern.
funktioniert aber leider immer noch nicht
http://stud4.tuwien.ac.at/~e0226538/bsp6.jpg
wenn cross(point, s[edge], edge) in clipPoint true gibt und edge<TOP ist
dann rufe ich clipPoint(iPt, num, edge+1) auf.
ist edge=TOP dann wird ja der Punkt iPt nach clipped[cnt] übernommen.
clippedNormals[cnt] wird dann aus vertices[num], vertices[sIdx[edge]],
vertexNormals[num], vertexNormals[sIdx[edge]] und iPt interpoliert.
wenn inside(point, edge) true gibt dann wird auch clipPoint(point, num,
edge+1) aufgerufen.
sonst wird point übernommen und clippedNormals[cnt] = vertexNormals[num].
in closeClip:
ist cross(s[edge], first[edge], edge] true und edge<TOP wird
clipPoint(iPt, firstIdx[edge], edge+1) aufgerufen, sonst
wird iPt in clipped aufgenommen und clippedNormals[cnt] aus
vertices[firstIdx[edge]], vertices[sIdx[edge]],
vertexNormals[firsIdx[edge]], vertexNormals[sIdx[edge]] und iPt
interpoliert.
irdendwas passt da noch nicht... vielleicht geht's ja auch ohne
firstIdx[] und sIdx[] aber wie??? das mit dem vertexNormals[num-1] hat
auch nicht geklappt...
ich bin mir bei den clipPoint aufrufen in clipPoint und closeClip auch
nicht sicher welches num man da übergeben muss. ist ja wegen des
rekursiven aufbaus nicht grade leicht durchzudenken bzw. zu debuggen :(
bin für hilfe sehr dankbar...
martin