| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Программирование игр, графики и искусственного интеллекта > Определение видимости точки в пространстве |
| Автор: Kero 27.4.2010, 22:18 |
| Привет! 1. Есть точка x y z 2. Есть матрица проекции Matrix3D которая состоит из матрицы камеры, перспективы и трансляции, тоесть матрица готовая к проектированию 3. Это всё работает в сильверлайте поэтому прошу всякие методы с directx не предлагать Вобщем вопрос: Имея п.2 и п1. как определить являеться ли точка видимой для камеры? |
| Автор: Rpahut 28.4.2010, 15:16 |
| Если применить матрицу проекции к точке, получатся координаты проекции точки на экран. Так оно в принципе все и работает. Останется только проверить, попадает ли точка в собственно экран или нет. Реально ИМХО быстрее посчитать угол между вектором направления камеры и вектором камера->точка. |
| Автор: Kero 28.4.2010, 16:16 |
| Да. Угол посчитать действительно проще Но остаёться непонятным как анализируя угол между векторами направления и точки определить входит ли точка в видимый диапазон или нет. |
| Автор: Rpahut 29.4.2010, 06:47 |
| Ну... Если посчитанный угол больше угла обзора камеры, точка не видна. |
| Автор: Kero 29.4.2010, 09:04 |
| А как посчитать угол обзора камеры? |
| Автор: Rpahut 29.4.2010, 13:44 |
| Угол обзора выбирается программистом, параметры камеры/матрицы проекции задаются исходя из желаемого угла обзора. Т.е. угол этот по идее известен заранее. Ну, там может быть два угла обзора - по вертикали и по горизонтали, использовать нужно бо'льший из них, обычно это угол обзора по горизонтали. А еще лучше посчитать угол "по диагонали" - корень_из(угол_по_Х_вквадрате + угол_по_Y_вквадрате). Не знаю как в силверлайте устанавливаются параметры камеры, но "истина где-то там". |
| Автор: Kero 2.5.2010, 11:16 | ||
В сильверлайте никак не устанавливаються... Мне пришлось писать класс камеры самому. Как и классы простейших обьектов... Сделал так как ты порекомендовал: *А еще лучше посчитать угол "по диагонали" - корень_из(угол_по_Х_вквадрате + угол_по_Y_вквадрате). Проблема в том что когда точка уходит за верхний или нижний край экрана обьект всё ещё видим некоторое время. Каким образом посчитать горизонтальный и вертикальный углы чтобы более точно определить видимость? |
| Автор: Rpahut 2.5.2010, 21:27 |
| Точный способ - проецирование точки на экран (см. выше). Можно добавить эту проверку после первой, чтобы применять не к каждой точке. Вот http://www.geeks3d.com/20090729/howto-perspective-projection-matrix-in-opengl/ код построения матрицы проекции из параметров камеры. Можно вычислить углы из матрицы, но лучше иметь их сразу. |