Прежде всего, нормали поверхности не имеют ничего общего с отбраковкой задней поверхности , по крайней мере для части OpenGL.Лицевая или обратная сторона грани определяется порядком ее вершин при проецировании в пространство экрана, которое по умолчанию (которое можно изменить с помощью glFrontFace
) является лицевым, когда вершины упорядочены против часовой стрелки и обратно- при заказе по часовой стрелке.
Так что вам не нужно никаких нормалей.Они используются только для расчета освещения и ничего больше.Как нормаль одной вершины должна влиять на ориентацию окружающих граней?Взять среднее по вершинам нормали?Что, если они полностью противоположны или что-то более странное (поскольку пользователь может указать любые нормали, которые он хочет)?
При этом вы также не нуждаетесь в отбраковке задней поверхности для своей сферы, так как изнутри вы всегдавсе равно смотрите на лицевую сторону.Но также не повредит включить его, так как вы также не видите никаких задних лиц (и вы можете предположить, что выбраковка лица бесплатна).Но в этом случае обратите внимание на ориентацию или лица, возможно, вам нужно включить отбраковку лицевой стороны (glCullFace(GL_FRONT)
) вместо отбраковки лицевой стороны, когда вы находитесь внутри сферы, так как большинство объектовтесселяция, чтобы их треугольники были обращены наружу.Или вы можете просто переключиться на glFrontFace(GL_CW)
.