Skydome Beispiel Flipcode
-
Hallo,
Ich habe eine Frage zum Quelltext auf:
http://www.flipcode.com/archives/Sky_Domes.shtml
http://www.flipcode.com/archives/article_skydomes.zipUnd zwar wird die Position eines Himmelskörpers (in SkyBody.h) so angegeben:
void SetPosition (const CVector3 vPosition) { m_vNormal = vPosition; m_fDistance = m_vNormal .Normalize (); }
Leider liegt keine CVector oder CMatrix Klasse bei, kA wo die herkommt(?). Die Funktion verstehe ich aber auch nicht wirklich... Weiß jemand, warum ich "normalize" von der Normalen (sollte ja immer 1 sein, oder?) and die Distance übergebe? (CVector => float; Ist das die Länge?)
Danke, langeweile...
// @cmember Normal vector of the object CVector3 m_vNormal; // @cmember Distance of the object float m_fDistance;
-
Ich verstehe nicht ganz was dein Problem ist. Die Vektor-Klasse wird wohl in etwa so aussehen:
class CVector3 { public: int x, y, z; public: CVecto3(): x (0), y (0), z (0) {} CVector3(int nX, int nY, int nZ) { x = nX; y = nY; z = nZ; } CVector3 operator+(const CVector3 &vec) { return CVector3(vec.x + x, vec.y + y, vec.z + z); } //Hier kämen jetzt natürlich noch Operatoren wie: %, /, *, = - blablabla };
Leider liegt keine CVector oder CMatrix Klasse bei, kA wo die herkommt(?).
Code steht oben, leg ne neue Header an und schmeiss das Ding mit vernünftigen Include-Guards da rein. Dann klappt's.
Die Funktion verstehe ich aber auch nicht wirklich
Naja, der Normalen-Vektor soll einfach die Werte des Positions-Vektor's erhalten.
Sprich:m_vNormal = vPosition;
ist genau dasselbe wie:
m_vNormal.x = vPosition.x; m_vNormal.y = vPosition.y; m_vNormal.z = vPosition.z;
Das klappt natürlich nur, wenn der Operator "=" in der Klasse definiert wurde.
Normalen (sollte ja immer 1 sein, oder?)
Zwischen 0-1, ansonsten richtig.
Und du übergibst die Distanz auch nicht an die Normale, sondern die Normale an die Distanz. Bzw. wird der Wert von der Normalen übernommen.
Mfg.
way
-
Ne vektor3d Klasse hab ich selber, ist auch etwas umfangreicher...
Ein Vektor hat nach dem Normalize() Call doch immer die Länge 1, wieso 0-1? Ich teile ihn doch durch seine Länge, dadurch bekommt er die Länge 1?
Nun kopiere ich diesen Vektor in eine float-Variable. Hier liegt das Problem: Wie? Einfach die Länge kopieren? Oder Soll ich z.B. nur die erste Koordinate kopieren?
Das einzig sinnvolle ist doch die Länge, aber wie sieht das in der im Bsp. verwendeten Klasse aus? Außerdem kann ich dann doch direkt "distance=1" schreiben!?m_vNormal wird doch erst normalisiert, dann zugewiesen?