Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Видимая область в пространстве, Камера и массив треугольников 
:(
    Опции темы
DragonFire
Дата 25.1.2007, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 14.8.2005
Где: Москва

Репутация: нет
Всего: 9



Задача вот в чем: У нас есть трехмерное пространство, в котором находится множество треугольников. Где-то в нем установлена камера, вектор направления которой известен. Так же известна предельная видимость камеры.
Вопрос: Как узнать какие треугольники попали в видимую облать камеры, а какие нет? Разумеется, требуется алгоритм, с наименьшей затратой ресурсов. Но главное понятный)

Вообщем вопрос давно решенный многими умными людьми, хотелось бы получить описание приемлемого алгоритма или ссылку на таковое)


--------------------
PM MAIL ICQ   Вверх
DragonFire
Дата 26.1.2007, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 14.8.2005
Где: Москва

Репутация: нет
Всего: 9



Типо на форуме программистов никто об этих алгоритмах незнает? smile
Или тему перекиньте плиз в более подходящий раздел, раз тут 0..


--------------------
PM MAIL ICQ   Вверх
maxim1000
Дата 26.1.2007, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



мне кажется, здесь могут подойти методы обнаружения столкновений объектов
по сути, и там, и там выделяются объекты, расстояние до которых меньше какого-то порога

Добавлено @ 16:56 
вот в этой теме обсуждали:
http://forum.vingrad.ru/topic-128962.html


--------------------
qqq
PM WWW   Вверх
Bikutoru
Дата 26.1.2007, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлекающийся
**


Профиль
Группа: Участник
Сообщений: 522
Регистрация: 24.5.2005
Где: Москва

Репутация: нет
Всего: 22



Как мне подсказывают мои очень скромные познания в области компьютерной графики, здесь нужны алгоритмы отсечения:
http://algolist.manual.ru/graphics/clip_seg.php - отсечение отрезков
http://algolist.manual.ru/graphics/clip_poly.php - отсечение многоугольников


--------------------
Человек, словно в зеркале мир — многолик, 
Он ничтожен — и он же безмерно велик!
Омар Хайям
PM   Вверх
En_t_end
Дата 26.1.2007, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2074
Регистрация: 4.12.2004

Репутация: нет
Всего: 20



DragonFire, У NeHe в уроках(урок №10) рассмотренна эта проблема.
PM MAIL ICQ Skype GTalk Jabber   Вверх
DragonFire
Дата 27.1.2007, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 14.8.2005
Где: Москва

Репутация: нет
Всего: 9



Bikutoru, Смотрел уже... можно конечно на этой основе придумать свой алгоритм, но не думаю что он будет быстр и надежен...

maxim1000, Сылка рульная на деревья, но теперь бы по русски норм описание достать...

En_t_end, я там не нашел)) 
Код

Урок 10. Загрузка и перемещение в трехмерном мире 

Там берется массив треугольником и весь отрисовывается, предварительно перемещается СК, а не камера...


--------------------
PM MAIL ICQ   Вверх
maxim1000
Дата 27.1.2007, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



ну с деревьями я сам особо не разбирался (да и ссылку кинул не я)
но можно упростить всё (в качестве первого шага по построению алгоритма):
1. разделяем всё пространство на слои (например, делим на отрезки ось x), каждому слою сопоставляем массив
2. когда нужно найти множество близких элементов, просто смотрим, в каких слоях они могут лежать (влево и вправо на расстояние радиуса), из них и перебираем
это уже даст некоторое увеличение скорости

ну а дальше уже можно и внутри каждого слоя делить, но это, ИМХО, желательно делать, когда первый шаг сделан, понят и отлажен...


--------------------
qqq
PM WWW   Вверх
DENNN
Дата 27.1.2007, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

Репутация: 1
Всего: 43



Область "видимости камеры" - четырехгранная пирамида. Решаем геометрическую задачу по поиску пересечения пирамиды и наших треугольников в сцене. К тем, что оказались внутри пирамиды применяем алгоритм, аналогичный Z-Buffer чтоб исключить треугольники, закрываемые более близкими к камере.
PM ICQ   Вверх
cardinal
Дата 27.1.2007, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 5
Всего: 99



Цитата(DENNN @  27.1.2007,  13:55 Найти цитируемый пост)
чтоб исключить треугольники, закрываемые более близкими к камере. 

а если два треугольника закрывают друг друга не полностью, а ты смотришь перекрываются ли их центры или нет?


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
DragonFire
Дата 27.1.2007, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 14.8.2005
Где: Москва

Репутация: нет
Всего: 9



Цитата(DENNN @  27.1.2007,  15:55 Найти цитируемый пост)
Область "видимости камеры" - четырехгранная пирамида. Решаем геометрическую задачу по поиску пересечения пирамиды и наших треугольников в сцене. К тем, что оказались внутри пирамиды применяем алгоритм, аналогичный Z-Buffer чтоб исключить треугольники, закрываемые более близкими к камере. 

DENNN, В точку. А теперь этот самый алгоритм - решение геометрической задачи, с максимальными отсечениями, дающий высокую скорость я и пытаюсь тут у вас выспросить smile

maxim1000, На словах вроде все понятно... просто неохото "изобретать велосипед, когда  все уже изобрели до вас".




--------------------
PM MAIL ICQ   Вверх
DENNN
Дата 27.1.2007, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

Репутация: 1
Всего: 43



Цитата(cardinal @  27.1.2007,  18:02 Найти цитируемый пост)
а если два треугольника закрывают друг друга не полностью, а ты смотришь перекрываются ли их центры или нет? 

Я смотрю не "центры", я использую Z-Buffer, в этом случае есть лишь пиксельная погрешность по линии пересечения двух граней smile

Цитата(DragonFire @  27.1.2007,  19:58 Найти цитируемый пост)
я и пытаюсь тут у вас выспросить


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

Если поскрипеть мозгами, то реализацию можно оптимизировать в пользу скорости. Например, если есть граничные условия, перейти от вещественных чисел, к числам с фиксированной запятой, хранящимся как целые.

P.S. проблемы точности вычислений никто не отменял  smile 
PM ICQ   Вверх
cardinal
Дата 27.1.2007, 23:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 5
Всего: 99



Цитата(DENNN @  27.1.2007,  19:15 Найти цитируемый пост)
Я смотрю не "центры"

Понял.


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
DragonFire
Дата 28.1.2007, 00:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 14.8.2005
Где: Москва

Репутация: нет
Всего: 9



DENNN, Может нубский вопрос, но плоскость, это плоскость грани видимой области, а прямая это сторона треугольника? И как построить плоскость грани камеры? Но это моя я сам выведу, а вот как оптимизировать? Все чтоли треугольники тупо перебирать?




--------------------
PM MAIL ICQ   Вверх
DENNN
Дата 28.1.2007, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

Репутация: 1
Всего: 43



Цитата(DragonFire @  28.1.2007,  00:47 Найти цитируемый пост)
прямая это сторона треугольника?

Да. Фактически треугольную грань можно описать либо координатами ее вершин, либо коэффициентами ур-ия прямых, ее образующих. Что лучше - это всегда диллема. В ряде алгоритмов удобнее хранить такие грани в виде прямых, в ряде удобнее как координаты вершин (матричные преобразования уже давно отлажены  smile  ).

Цитата(DragonFire @  28.1.2007,  00:47 Найти цитируемый пост)
И как построить плоскость грани камеры?

А что ее строить? У тебя же есть такая информация, как видимый угол обзора камеры (ну или фокусное растояние, или аппертура - одна суть)? Вектор камеры тебе известен, значит и сможешь найти и все четыре(а вернее пять) грани, образующих конус видимости.
Цитата(DragonFire @  28.1.2007,  00:47 Найти цитируемый пост)
а вот как оптимизировать? В

Надо подумать. У меня в выходной день голова совсем не варит  smile 
PM ICQ   Вверх
DragonFire
Дата 28.1.2007, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 14.8.2005
Где: Москва

Репутация: нет
Всего: 9



Цитата(DENNN @  28.1.2007,  14:14 Найти цитируемый пост)
видимый угол обзора камеры 

Ну и последний нубский вопрос smile 
Как узнать угол обзора, я предполагаю что это будет что-то вроде tg(width/height) видимой области, или что-то вроде этого. Или не так?)



--------------------
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0564 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.