Ich habe eine Klasse, die eine 3D-Form basierend auf Eingaben aus dem aufrufenden Code generiert. Bei den Eingaben handelt es sich um Dinge wie Länge, Tiefe, Bogen usw. Mein Code generiert die Geometrie perfekt, es treten jedoch Probleme bei der Berechnung der Oberflächennormalen auf. Wenn beleuchtet, hat meine Form eine sehr bizarre Färbung / Textur aufgrund der falschen Oberflächennormalen, die berechnet werden. Nach all meinen Nachforschungen glaube ich, dass meine Mathematik korrekt ist. Es scheint, dass etwas mit meiner Technik oder Methode nicht stimmt.
Wie kann man auf hoher Ebene die Oberflächennormalen für eine generierte Form programmatisch berechnen? Ich verwende Swift / SceneKit unter iOS für meinen Code, aber eine generische Antwort ist in Ordnung.
Ich habe zwei Arrays, die meine Form darstellen. Eine ist eine Reihe von 3D-Punkten, die die Eckpunkte darstellen, aus denen die Form besteht. Das andere Array ist eine Liste der Indizes des ersten Arrays, die die Eckpunkte in Dreiecke abbilden. Ich muss diese Daten nehmen und ein drittes Array generieren, das eine Reihe von Oberflächennormalen ist, die die Beleuchtung der Form unterstützen. (siehe SCNGeometrySourceSemanticNormal
in SceneKit` )
Die Liste der Eckpunkte und Indizes ist abhängig von den Eingaben in die Klasse immer unterschiedlich, sodass ich die Oberflächennormalen nicht vorberechnen oder hart codieren kann.