Обнаружение того, отражает ли матрица объект в OpenGL

Когда объект зеркально отражается (произведение каждой оси вектора масштаба < 0), режим отбраковки должен быть инвертирован, чтобы предотвратить визуальный артефакт. (Видна только обратная сторона)

Куб выглядит нормально, если scaleX > 0: Отбраковка нормальная, если scaleX равно 1

Но это выглядит странно, если scaleX < 0: Отбраковка прекращается, если scaleX равно -1

Мы можем инвертировать режим отбора, чтобы решить эту проблему.

gl.cullFace(gl.FRONT)

Тем не менее, я хотел бы проверить матрицу, следует ли инвертировать отбраковку или нет. Но из-за поворота я не уверен, как я могу это сделать.

Есть ли способ определить, отражает ли матрица объект?

1 ответ

Решение

Вы можете просто проверить, является ли определитель вашей матрицы трансформации отрицательным. Это также можно интерпретировать как изменение "руки" вашего координатного пространства.

Другие вопросы по тегам