2010-08-05 3 views

ответ

5

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

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

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

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

Следовательно, необходимо использовать более сложные алгоритмы для отбраковки.

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

+3

Вы можете проверить видимость в OpenGL. Для этого люди используют Occlusion Queries. Но это не доступно в OpenGL ES. – Bahbar

+0

Я думаю, что окклюзионные запросы - это расширение ARB, а не GL spec. В любом случае, в зависимости от приложения, вы можете не хотеть/иметь всю свою геометрию в памяти GPU. – Rui

+0

OQ - это расширение в openGL, а не OpenGLES, даже 2.0 – Calvin1602

1

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

Так вы могли бы сделать следующее:

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

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

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

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

Смежные вопросы