Проверьте, виден ли объект - PullRequest
2 голосов
/ 05 августа 2010

Как мне проверить, виден ли объект, нарисованный в openGL-ES?

Ответы [ 2 ]

5 голосов
/ 05 августа 2010

Вы не проверяете IN OpenGL, если объект виден.

Для этого у вас должны быть свои собственные алгоритмы видимости / отбраковки.Это означает BSP Trees, Portals, Octree и другие.В зависимости от сложности мира вы можете отделаться пространственным разделением на основе сетки или чего-то еще.Это действительно зависит от того, что вы делаете.

Помните, OpenGL известен только Draw и Cull.

Вы можете сделать цикл для всех объектов в вашем мире и сказать GL, чтобы они нарисовали их всепо одному.Каждый из них будет обработан и отброшен, если не будет виден.Конечно, это грубая сила и медлительность.

Отсюда необходимость более обширных алгоритмов отбраковки.

Как вы думаете, почему в графических движках есть все эти миллионы строк?: D

1 голос
/ 02 июня 2011

Вы можете использовать вариант комплектации . Идея выбора OpenGL состоит в том, что вы визуализируете небольшую область представления, помещая имена в стек по мере продвижения (чтобы вы могли ссылаться на то, что отображается). OpenGL вернет запись попаданий, чтобы вы знали, что было обработано. Он часто используется, чтобы узнать, что находится под мышью.

Итак, вы бы сделали следующее:

  • настройка небольшой визуализируемой поверхности (только для проверки видимости)

  • рендеринг вашей сцены на эту визуализируемую поверхность (замените ваши модели чем-то простым, например, ограничивающими прямоугольниками; обратите внимание, что вам не нужно отображать реальные треугольники, вы можете просто визуализировать линии или точки)

  • проверьте запись попаданий, чтобы увидеть, что было обработано.

Я еще не пробовал, но думаю, что это сработает; может быть, не очень быстро, но надежно. Вместо этого обычно используются собственные алгоритмы видимости / отбраковки, хотя написание эффективного алгоритма видимости / отбраковки затруднительно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...