PDA

View Full Version : [FRAGE] - calcFaceNormals Bsp 5


Lizzy
29-10-2004, 10:21
Hallo,

also was genau wird in dieser Fkt. verlangt?

Ich versteh das so, dass man den normalvektor auf eine fläche berechnen muss. Nur in welche Richtung soll das gehen? Is das mit denk Punkten so gedacht:

wenn man auf die fläche schaut und die Punkte verlaufen gegen den Uhrzeigersinn, dann schaut der Normalvektor nach oben?

Peter
29-10-2004, 12:06
Das ist Definitionsache. Lade zum Beispiel die Teekanne; da sollte man's erkennen koennen; Wenn's nicht passt muss man ja nur die Reihenfolge der Punkte richtig veraendern.

fscan
29-10-2004, 16:47
Hallo,

also was genau wird in dieser Fkt. verlangt?

Ich versteh das so, dass man den normalvektor auf eine fläche berechnen muss. Nur in welche Richtung soll das gehen? Is das mit denk Punkten so gedacht:

wenn man auf die fläche schaut und die Punkte verlaufen gegen den Uhrzeigersinn, dann schaut der Normalvektor nach oben?
das sollte stimmen ... steht soweit ich weiss auch so im kommentar der funktion.

hab dazu noch eine frage: reicht es für die übung, wenn ich die ersten 3 punkte beachte ? die berechnung mit 3 punkten liefert ja nur für konvexe polygone sicher richtige ergebnissse.

ChrisChiu
29-10-2004, 17:48
das sollte stimmen ... steht soweit ich weiss auch so im kommentar der funktion.

hab dazu noch eine frage: reicht es für die übung, wenn ich die ersten 3 punkte beachte ? die berechnung mit 3 punkten liefert ja nur für konvexe polygone sicher richtige ergebnissse.

Ja, es reicht, nur die ersten 3 Punkte zu beachten.

Flowyes
08-11-2004, 01:42
Verständnisfrage:

Sollen wir hier bei jeder Fläche aus irgend 3 Punkten 2 Geraden bilden und das Kreuzprodukt dieser beiden nehmen, damit wir eine Normale auf die Ebene finden, die diese 2 Geraden aufspannen? Diese Normale ist dann die gesuchte faceNormal für diese Fläche.

Stimmt's?

ChrisChiu
08-11-2004, 09:33
Verständnisfrage:

Sollen wir hier bei jeder Fläche aus irgend 3 Punkten 2 Geraden bilden und das Kreuzprodukt dieser beiden nehmen, damit wir eine Normale auf die Ebene finden, die diese 2 Geraden aufspannen? Diese Normale ist dann die gesuchte faceNormal für diese Fläche.

Stimmt's?

Stimmt. Nur soll man nur 2 Vektoren bilden aus den 3 Punkten, aber du meinst eh das richtige. Das Kreuzprodukt liefert ja den Vektor, der normal auf zwei andere Vektoren steht (d.h. man kann sich's zwar mit Geraden und Ebenen verständnisweise vorstellen - konkret mathematisch kommen bis auf die Bildung des Vektors selbst, der ja jeweils zwei Punkte erfordert, nur Vektoren vor).

Baccus
09-11-2004, 21:13
Ja, es reicht, nur die ersten 3 Punkte zu beachten.
Mit dem Erfolg, daß ich jetzt Stern.atoff und Dreieck.attof nicht mehr gleichzeitig anzeigen kann (wie result_task4_1.png):
Das Dreieck ist konvex und dreht rechtsrum, der Stern dreht auch rechtsrum, ist aber konkav (zumindest bei den ersten 3 punkten: vertices[0], [1] und [2]).
Ergebnis: der Normalvektor schaut bei den beiden jeweils in die andere Richtung. :bounce: Das kann's ja wohl nicht sein!?
Ideen?

ChrisChiu
09-11-2004, 22:19
Mit dem Erfolg, daß ich jetzt Stern.atoff und Dreieck.attof nicht mehr gleichzeitig anzeigen kann (wie result_task4_1.png):
Das Dreieck ist konvex und dreht rechtsrum, der Stern dreht auch rechtsrum, ist aber konkav (zumindest bei den ersten 3 punkten: vertices[0], [1] und [2]).
Ergebnis: der Normalvektor schaut bei den beiden jeweils in die andere Richtung. :bounce: Das kann's ja wohl nicht sein!?
Ideen?

Meinst du mit vertices das vertexTable[] array? In diesem Fall fehlt dir etwas... vertexTable[0], [1] und [2] sind nicht die ersten Vertizes... du mußt mit Hilfe von faceTable[] hineinindizieren.

Wir sind übrigens in calcFaceNormals()... warum verschwindet bei dir was? calcFaceNormals() und Backface-Culling sind seperat und haben mal grundsätzlich nichts miteinander zu tun.

Ach ja, welche Vektoren bildest du aus den drei Punkten genau?

fscan
10-11-2004, 01:42
stimmt schon, dass es mit (teilweisen) konkaven polygonen nicht funktioniert .. aber das ist ja auch egal .. ich würde backface culling nur mit 3d files machen, dann hast du das problem nicht.

ChrisChiu
10-11-2004, 02:10
stimmt schon, dass es mit (teilweisen) konkaven polygonen nicht funktioniert .. aber das ist ja auch egal .. ich würde backface culling nur mit 3d files machen, dann hast du das problem nicht.

Sagen wir, P1, P2, und P3 sind die ersten Punkte jedes Polygons.

Ihr macht - vermute ich mal - einen Vektor V1 = P1 - P2 (also von P2 nach P1) und V2 = P3 - P2 (also von P2 nach P3).

Probiert einmal, den Vektor V1 = P2 - P1 (also von P1 nach P2) sowie V2 = P3 - P1 (also von P1 nach P3) zu nehmen.

Die Faces könnt ihr ruhig als planar annehmen, deswegen funktioniert das auch so.

fscan
10-11-2004, 02:42
Sagen wir, P1, P2, und P3 sind die ersten Punkte jedes Polygons.

Ihr macht - vermute ich mal - einen Vektor V1 = P1 - P2 (also von P2 nach P1) und V2 = P3 - P2 (also von P2 nach P3).

Probiert einmal, den Vektor V1 = P2 - P1 (also von P1 nach P2) sowie V2 = P3 - P1 (also von P1 nach P3) zu nehmen.

Die Faces könnt ihr ruhig als planar annehmen, deswegen funktioniert das auch so.
nein,nein .. ich mach das schon so (p2-p1,p3-p1) ... aber denk einmal zb an einen stern und fang an einer spize an. die punkte werden im uhrzeigersinn gesetzt. laut berechnen läuft das ganze aber gegeb den uhrzeigersinn. korrekt währe es zb den flächeninhalt des polygons zu berechnen (mit vorzeichen) .. oder die summer der anschlusswinkel (auch mit vorzeichen) der einzelnen geradenstücke.

ChrisChiu
10-11-2004, 03:08
nein,nein .. ich mach das schon so (p2-p1,p3-p1) ... aber denk einmal zb an einen stern und fang an einer spize an. die punkte werden im uhrzeigersinn gesetzt. laut berechnen läuft das ganze aber gegeb den uhrzeigersinn. korrekt währe es zb den flächeninhalt des polygons zu berechnen (mit vorzeichen) .. oder die summer der anschlusswinkel (auch mit vorzeichen) der einzelnen geradenstücke.

Ja, das ist mir schon klar. Nur, Stern.atoff sollte mit der Methode trotzdem funktionieren. Einige andere 2D-Atoffs allerdings nicht. Wobei Backface-Culling bei den 2D-Atoffs eigentlich wenn ich's mir recht überlege eh recht sinnlos ist (bin wohl schon zu müde, das hätte mir eigentlich gleich einfallen sollen anstatt irgendwo nach möglichen Fehlerquellen zu suchen :). Bei den 3D-Atoffs geht's ohne Probleme (da gibt's auch nur konvexe Polygone).

fscan
10-11-2004, 14:55
Ja, das ist mir schon klar. Nur, Stern.atoff sollte mit der Methode trotzdem funktionieren. Einige andere 2D-Atoffs allerdings nicht. Wobei Backface-Culling bei den 2D-Atoffs eigentlich wenn ich's mir recht überlege eh recht sinnlos ist (bin wohl schon zu müde, das hätte mir eigentlich gleich einfallen sollen anstatt irgendwo nach möglichen Fehlerquellen zu suchen :). Bei den 3D-Atoffs geht's ohne Probleme (da gibt's auch nur konvexe Polygone).
das ist ja genau das, was ich vor 3 posts gesagt habe...

Baccus
14-11-2004, 07:41
Meinst du mit vertices das vertexTable[] array?
Ach ja, welche Vektoren bildest du aus den drei Punkten genau?
Nonono.
Es geht mir um CG1Object.draw(), Abschnitt "// let's do backface culling to speed things up", der da bei mir so ähnlich heißt wie:
if( CG1Vector.Kreuzprodukt(
CG1Vector.Differenz(vertices[1],vertices[0]),
CG1Vector.Differenz(vertices[2], vertices[0])).z >=0 )
continue;

"Stern" und "Dreieck" können aus o.gG. also garnicht gemeinsam dargestellt werden?

ChrisChiu
14-11-2004, 17:27
Nonono.
Es geht mir um CG1Object.draw(), Abschnitt "// let's do backface culling to speed things up", der da bei mir so ähnlich heißt wie:
if( CG1Vector.Kreuzprodukt(
CG1Vector.Differenz(vertices[1],vertices[0]),
CG1Vector.Differenz(vertices[2], vertices[0])).z >=0 )
continue;

"Stern" und "Dreieck" können aus o.gG. also garnicht gemeinsam dargestellt werden?

Wie schon gesagt, Backface-Culling macht für die 2D Objekte gar keinen Sinn.