Webgl - при смене точки обзора части треугольника исчезают

Я привожу примеры из вступления в книгу по webgl (Руководство по программированию WebGL: программирование интерактивной 3D-графики с помощью WebGL), и мне трудно понять, почему ортографическая проекция помогает решить эту конкретную проблему.

В одном из примеров мы меняем "точку зрения" того, как мы видим 3 треугольника, применяя некоторое матричное преобразование. Они показывают, что если мы изменим точку зрения достаточно вправо (+X), треугольник начнет исчезать. Вот точный пример webgl с сайта книги (нажмите клавишу со стрелкой вправо, чтобы повернуть треугольник): http://www.magic.ubc.ca/webgl-pg/uploads/examples/ch07/LookAtTrianglesWithKeys.html

В книге говорится, что это происходит потому, что "это потому, что вы не указали видимый диапазон (границы того, что вы можете видеть) правильно".

Чтобы решить эту проблему, они сначала применяют матрицу ортографической проекции к каждой вершине, а затем проблема решается. Почему это решает проблему, как матричное преобразование может вызвать то, что раньше не существовало, чтобы быть видимым? Где я могу найти полное объяснение того, почему webgl решил больше не отображать треугольник?

1 ответ

Решение

Система координат, в которой отображаются объекты в OpenGL (пространство экрана), имеет диапазон [-1,1] за x, y, а также z,

С viewMatrix.setLookAt(g_eyeX, g_eyeY, g_eyeZ, 0, 0, 0, 0, 1, 0); В вашем примере создается матрица преобразования, которая используется для преобразования координат треугольников из мирового пространства в пространство камеры (направление, в котором вы смотрите на этот объект).

Поскольку это преобразование изменит координаты треугольников, они могут не находиться в диапазоне [-1,1] больше, в вашем примере это происходит для z координата (двигаясь за вашим экраном).

Чтобы решить эту проблему, вы можете использовать орфографию для изменения диапазона z координаты без изменения внешнего вида, только текущий z Значения экранных пространств масштабируются.

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