Как бы проверить, видится ли объект, нарисованный в openGL-ES?Проверьте, не видна ли объект
ответ
Вы не проверяете IN OpenGL, если объект виден.
Для этого у вас должны быть свои собственные алгоритмы видимости/отбраковки. Это означает BSP Trees, Portals, Octree и другие. В зависимости от сложности мира вы можете уйти с разделением пространства на основе сетки или чего-то еще. Это действительно зависит от того, что вы делаете.
Помните, что OpenGL известен только Draw и to Cull.
Вы можете сделать цикл на всех объектах вашего мира и сказать GL, чтобы нарисовать их все по одному. Каждый из них будет обрабатываться и отбрасываться, если не смотреть. Конечно, это грубая сила и медленная.
Следовательно, необходимо использовать более сложные алгоритмы для отбраковки.
Почему, по-вашему, у графических двигателей есть все эти миллионы линий? : D
Вы можете использовать вариант picking. Идея выбора OpenGL заключается в том, что вы визуализируете небольшую область представления, нажимая имена в стеке, когда вы идете (чтобы вы могли ссылаться на то, что отображается). OpenGL вернет запись о хите, чтобы вы знали, что было сделано. Он часто используется, чтобы узнать, что находится под мышкой.
Так вы могли бы сделать следующее:
установки небольшой визуализируемых поверхность (только, чтобы сделать видимость проверки)
отрендерить сцену на этой визуализируемых поверхности (заменить модели чем-то простым , например, ограничивающие прямоугольники, обратите внимание, что вам не нужно отображать фактические треугольники, вы можете просто визуализировать линии или точки)
- проверить запись хита, чтобы увидеть, что было визуализировано.
Я еще не пробовал, но я думаю, что это сработает; может быть, не очень быстро, но надежно. Вместо этого обычно используются пользовательские алгоритмы видимости/отбраковки, хотя писать эффективный алгоритм видимости/отбраковки сложно.
- 1. проверьте, видна ли группа групп
- 2. Проверьте, является ли объект
- 3. Проверьте, действителен ли объект?
- 4. Unity Проверьте, не щелкнули ли объект
- 5. Проверьте, не создан ли объект: хороший стиль?
- 6. Проверьте, не удален ли объект объекта.
- 7. Проверьте, не является ли объект Ruby логическим.
- 8. Проверьте, не был ли объект создан
- 9. Проверьте, не задал ли объект свойства
- 10. Mongoid: Проверьте, не изменился ли внедренный объект?
- 11. Проверьте DIV видна с помощью JavaScript
- 12. Проверьте, является ли объект UIKeyboard
- 13. Hibernate: проверьте, существует ли объект
- 14. Проверьте, является ли объект класса
- 15. Проверьте, является ли объект логическим
- 16. Проверьте, объявлен ли объект const
- 17. Проверьте, существует ли объект Realm
- 18. Проверьте, отменен ли прокси-объект
- 19. Проверьте, привязан ли объект linq
- 20. Проверьте, имеет ли объект тип
- 21. Проверьте, имеет ли объект фокус
- 22. Проверьте, не содержит ли объект объект, соответствующий строке
- 23. Как определить, видна ли SKSpriteNode
- 24. Entity Framework: проверьте, существует ли объект и проверьте, есть ли у него связанный объект.
- 25. Проверьте, не является ли объект не базовым типом?
- 26. Проверьте, не совместим ли объект с интерфейсом (не реализует)
- 27. Проверьте, существует ли объект в дереве объектов
- 28. Django: проверьте, существует ли объект перед добавлением
- 29. Проверьте, имеет ли объект метод в Java?
- 30. Проверьте, существует ли объект/свойство javascript
Вы можете проверить видимость в OpenGL. Для этого люди используют Occlusion Queries. Но это не доступно в OpenGL ES. – Bahbar
Я думаю, что окклюзионные запросы - это расширение ARB, а не GL spec. В любом случае, в зависимости от приложения, вы можете не хотеть/иметь всю свою геометрию в памяти GPU. – Rui
OQ - это расширение в openGL, а не OpenGLES, даже 2.0 – Calvin1602