У меня есть класс, который генерирует трехмерную фигуру на основе входных данных из вызывающего кода. Входными данными являются такие вещи, как длина, глубина, дуга и т. Д. Мой код прекрасно генерирует геометрию, однако у меня возникают проблемы при вычислении нормалей поверхности. Когда горит, моя форма имеет очень странную окраску / текстуру от неправильных нормалей поверхности, которые рассчитываются. Из всех моих исследований я считаю, что моя математика верна, кажется, что что-то не так с моей техникой или методом.
На высоком уровне, как можно программно рассчитать нормали поверхности для сгенерированной фигуры? Я использую Swift / SceneKit на iOS для своего кода, но общий ответ в порядке.
У меня есть два массива, которые представляют мою форму. Одним из них является массив трехмерных точек, представляющих вершины, которые составляют форму. Другой массив представляет собой список индексов первого массива, которые отображают вершины в треугольники. Мне нужно взять эти данные и сгенерировать 3-й массив, который представляет собой набор нормалей поверхности, которые помогают в освещении фигуры. (см. SCNGeometrySourceSemanticNormal
в SceneKit` )
Список вершин и индексов всегда различается в зависимости от входных данных для класса, поэтому я не могу предварительно рассчитать или жестко закодировать нормали поверхности.