Hallo, ich bin ein absoluter Neuling in der Computergraphik. Tut mir leid, wenn es eine dumme Antwort ist. Ich versuche, eine einfache 3D-Engine von Grund auf neu zu erstellen, eher für Bildungszwecke als für den realen Gebrauch.
im Moment berechne ich nur Gesichtsnormalen. auf diese Weise:
Ich habe ein Oberflächenobjekt mit in der Liste eines Dreiecks. Ich berechne Normalen innerhalb der Triangle-Klasse auf folgende Weise:
triangle.computeFaceNormals() {
Vec3D u = v1.sub(v3)
Vec3D v = v1.sub(v2)
Vec3D normal = Vec3D.cross(u,v)
normal.normalized()
this.n1 = this.n2 = this.n3 = normal
}
und beim Bauen von Oberflächen:
t = new Triangle(v1,v2,v3)
t.computeFaceNormals()
surface.addTriangle(t)
und ich denke, das ist der beste Weg, das zu tun ... nicht wahr?
jetzt .. das funktioniert, ok. aber leicht ist es nicht geglättet. Ich versuche auch Vertex-Normalen zu berechnen. (Ich teste meinen Motor mit tubolaren Oberflächen, so dass ich fast den gesamten Scheitelpunkt mit mehr als einem Dreieck geteilt habe.)
Ich habe diesen einfachen Algorithmus gefunden: Flipcode Vertex normal aber .. hei dieser Algorithmus hat .. exponentielle Komplexität? (Wenn mein Gedächtnis meinen Informatik-Hintergrund nicht verfehlt ..) (Übrigens .. es hat 3 verschachtelte Schleifen .. Ich denke nicht, dass es der beste Weg ist, dies zu tun ..)
irgendein Vorschlag?
t
es das Ergebnis voncomputeFaceNormals
(was nichts zurückgibt), kein Dreieck.