Выбор объектов в пространстве.

Подскажите пожалуйста алгоритм выбора объектов в пространстве. Рендер - OpenGL ES; платформа - Android.
Знаю о таких методах, как задействовать стенсил, либо просчитать ход луча от камеры сквозь объекты.
Платформа для меня новая, так что есть просто сомнения о целесообразности таких алгоритмов.
Знаю, что у нас тут есть человек =), который делает Юнити - может вы чем сможете помочь?
Достаточно будет хотя бы ссылки (ru, en - неважно).

Заранее спасибо.

Последняя правка: чт, 02/06/2011 - 13:07
Submitted by MaxImuS on

Комментарии

Обычно рей-трейс до объекта (сфера, бокс, меш). Достаточно недорого, если в сцене не тысячи объектов. Рендер ни при чём, чистая математика.

Когда-то делали путём рендера каждого объекта своим цветом и потом просто проверяли цвета пикселей. Подозреваю, на андроиде это будет очень небыстро (лишний рендер и доступ к пикселям фрейм-буфера).

Submitted by BLK Dragon on
>> Обычно рей-трейс до объекта (сфера, бокс, меш). Достаточно недорого, если в сцене не тысячи объектов.
"либо просчитать ход луча от камеры сквозь объекты" - это и имелось ввиду)

>> Рендер ни при чём, чистая математика.
Согласен. Упомянул про рендер, думая, что может есть какая-нибудь фича для этого в gl.

>> Когда-то делали путём рендера каждого объекта своим цветом и потом просто проверяли цвета пикселей. Подозреваю, на андроиде это будет очень небыстро (лишний рендер и доступ к пикселям фрейм-буфера).

Да, было и такое Smile выбирал так еще во времена DDraw.

Submitted by MaxImuS on

Возможно вам поможет этот пример. Он реализован под ES но для Nokia. Вообще сам OpenGL ES универсален и на текущий момент используется во всех платформах от BADA до iOS. Реально в Вашей задаче есть еще подзадача - выбрать полигон. Смотрите класс CPickSelect. Я думаю вам что-то похожее надо сделать(перенести).

Submitted by Necro on

>>Подозреваю, на андроиде это будет очень небыстро (лишний рендер и доступ к пикселям фрейм-буфера).

Интересно это где-то быстро бывает [имеется в виду современность]? ;-)

ну и да - учитывая TBDR на powerVR совсем-совсем не взлетит

>>Достаточно недорого, если в сцене не тысячи объектов.

Ну если тысячи - spatial partitioning - и опять недорого

Submitted by discouraged_one (не проверено) on
> Интересно это где-то быстро бывает [имеется в виду современность]?
Чисто для поддержания разговора, софтварный рендер на SPU (или даже обычном CPU) с уменьшенным резолюшном думаю будет весьма быстр :P

А на самом деле, сильно подозреваю, что прокатит такой наивный подход:
проецируем bound-сферу объектов на экран и дальше пересечения кружочков объектов с кружочком курсора (пальца) -- дёшево и сердито :)

>>>Достаточно недорого, если в сцене не тысячи объектов.

> Ну если тысячи - spatial partitioning - и опять недорого

Ну я не хотел с разбегу пугать всякими ужасами типа "space partitioning".

Submitted by BLK Dragon on
Угу, спасибо всем за отзывы. Решил пойти по пути дровосека Smile : реализую два три подхода и выберу более оптимальный. Думаю - это и будет верным решением.

>> Ну я не хотел с разбегу пугать всякими ужасами типа "space partitioning".

"Волков бояться - в лес не ходить", так что пугай, со страхами надо бороться Smile

Submitted by MaxImuS on

>> Чисто для поддержания разговора, софтварный рендер на SPU (или даже обычном CPU) с уменьшенным резолюшном думаю будет весьма быстр

принимается Dirol Ибо да. Просто для raycast супротив cферы overkill - а так да Dirol

>> проецируем bound-сферу объектов на экран и дальше пересечения кружочков объектов с кружочком курсора (пальца) -- дёшево и сердито

Да ладно - можно уже k-dop построить (помойму так называется - вечно буквы путал в таких вещах) - не сильно дороже и сильно сердитей Wink

Submitted by discouraged_one (не проверено) on

GameDev.by