Для этой проблемы у меня есть: а) упорядоченный список точек б) перечень точек, которые составляют каждый полигонOpenGL вычисление правильных нормалей заданных список точки
Например
point1 = (1, 2, 2)
point2 = (1, 2, 3)
point3 = (1, 3, 3)
polygon1 = [ point1, point2, point3 ]
=> polygon1 - это треугольник, который может быть частью внешней модели.
Мне нужно вычислить правильные нормали для освещения в OpenGL.
Я знаю, что я могу рассчитать векторы на плоскости из точек данных, а также кросс-продукта, чтобы получить нормали к плоскости, но OpenGL требует нормалей, чтобы указывать в правильном направлении (т.е. наружу).
Процесс должен быть автоматизирован, потому что у меня много полигонов.
Если я выбираю два вектора на плоскости, я не могу сказать, как я могу быть уверен, что нормальный я вычислил точки в правильном направлении для освещения (т.е. находится на внешней стороне модели.)
I предположил, что я мог бы добавить рассчитанную нормаль к точке на плоскости и посмотреть, если ее дальше от начала координат, чтобы увидеть, правильно ли она, но модель довольно сложна, и некоторым нормалям может потребоваться указать на начало координат (ish)
Если это помогает, оказывается, что все полигоны являются треугольниками (не см., Как это помогает, но должны быть способны абстрагироваться для любого полигона)
Если есть треугольник, плавающий в пространстве сам по себе, что такое «правильная» сторона? Кажется, единственный правильный ответ - двухстороннее освещение. – Ani
Не можете ли вы просто использовать порядок передних лиц (по часовой стрелке или против часовой стрелки), чтобы определить порядок выполнения креста? – user1118321
@ananthonline - это не треугольник, плавающий в пространстве, у меня много полигонов, которые все соединяются, чтобы сформировать хороший закрытый объект. – Blue42