Можно ли получить индекс 'невидимых' вершин в python -opengl как gloo, glumpy? - PullRequest
1 голос
/ 25 мая 2020

Можно ли получить индекс 'невидимых' вершин в python -opengl как gloo, glumpy? Например, когда я рисую трехмерную сферу в графе сцены и вращаю объект с помощью поворотной камеры, половина вершин невидима, но индекс будет изменяться всякий раз, когда я вращаюсь.

Если я включаю ' cull_face ', OpenGL не будет их отрисовывать, но есть ли возможность получить индексы этих вершин, «невырисованные» или невидимые из-за блокировки другими вершинами?

1 Ответ

2 голосов
/ 25 мая 2020

, но есть ли возможность получить индексы этих вершин, «невырисованные» или невидимые из-за того, что они заблокированы другими вершинами?

OpenGL не будет предлагать такую ​​функциональность напрямую . Конечно, этого еще можно достичь. Но вам нужно реализовать это самостоятельно. Вот несколько идей:

  • После рисования объекта используйте OpenGL запросы окклюзии путем рендеринга каждой вершины как отдельно запрашиваемой точки - я бы не рекомендовал это с точки зрения производительности, но это можно было бы сделать.
  • Так как вы в основном заинтересованы в отбраковке лиц, просто вычислите отбраковку лиц самостоятельно. Для каждого треугольника вам просто нужно вычислить вектор нормали, который является просто перекрестным произведением двух ребер, а затем просто проверить, находится ли угол между вектором направления взгляда и нормалью больше или меньше 90 градусов, так что это простой точечный продукт. Этот подход можно легко перенести на вычислительные шейдеры графического процессора, и он будет тривиально работать параллельно, поскольку каждый треугольник может быть протестирован независимо - и его также следует реализовать на графическом процессоре, потому что вы можете использовать его мощность также для преобразования вершин с точно такими же матрицами. как и раньше, и поскольку это приводит к направлению обзора, которое является постоянным (0,0,1) в пространстве окна, скалярное произведение даст только координату z скалярного произведения, которая является просто областью со знаком 2D проекции координат вершины в оконное пространство.
  • Вы также можете выполнить простое преобразование лучей, проверив луч от камеры к каждой вершине на предмет пересечения. Здесь вы можете легко применить матрицу проекции, чтобы каждый луч вида стал ортогональным, и тогда вы можете просто протестировать против z-буфера. Этот подход также можно реализовать на GPU.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...