Модераторы: Rickert
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Определение видимости точки в пространстве 
:(
    Опции темы
Kero
  Дата 27.4.2010, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 10.5.2006
Где: Винница,Украина | | Реал

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



Привет!
1. Есть точка x y z
2. Есть матрица проекции Matrix3D которая состоит из матрицы камеры, перспективы и трансляции, тоесть матрица готовая к проектированию
3. Это всё работает в сильверлайте поэтому прошу всякие методы с directx не предлагать

Вобщем вопрос:
Имея п.2 и п1. как определить являеться ли точка видимой для камеры?
PM MAIL ICQ MSN   Вверх
Rpahut
Дата 28.4.2010, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


0xdeadbeef
*


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

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



Если применить матрицу проекции к точке, получатся координаты проекции точки на экран. Так оно в принципе все и работает. Останется только проверить, попадает ли точка в собственно экран или нет.
Реально ИМХО быстрее посчитать угол между вектором направления камеры и вектором камера->точка.
--------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею?
PM MAIL   Вверх
Kero
Дата 28.4.2010, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 10.5.2006
Где: Винница,Украина | | Реал

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



Да. Угол посчитать действительно проще  smile 

Но остаёться непонятным как анализируя угол между векторами направления и точки определить входит ли точка в видимый диапазон или нет.


Это сообщение отредактировал(а) Kero - 28.4.2010, 16:18
PM MAIL ICQ MSN   Вверх
Rpahut
Дата 29.4.2010, 06:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


0xdeadbeef
*


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

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



Ну...
Если посчитанный угол больше угла обзора камеры, точка не видна.
--------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею?
PM MAIL   Вверх
Kero
Дата 29.4.2010, 09:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 10.5.2006
Где: Винница,Украина | | Реал

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



А как посчитать угол обзора камеры? 
PM MAIL ICQ MSN   Вверх
Rpahut
Дата 29.4.2010, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


0xdeadbeef
*


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

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



Угол обзора выбирается программистом, параметры камеры/матрицы проекции задаются исходя из желаемого угла обзора. Т.е. угол этот по идее известен заранее. Ну, там может быть два угла обзора - по вертикали и по горизонтали, использовать нужно бо'льший из них, обычно это угол обзора по горизонтали. А еще лучше посчитать угол "по диагонали" - корень_из(угол_по_Х_вквадрате + угол_по_Y_вквадрате).

Не знаю как в силверлайте устанавливаются параметры камеры, но "истина где-то там".
--------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею?
PM MAIL   Вверх
Kero
Дата 2.5.2010, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 10.5.2006
Где: Винница,Украина | | Реал

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



Цитата(Rpahut @ 29.4.2010,  13:44)
Угол обзора выбирается программистом, параметры камеры/матрицы проекции задаются исходя из желаемого угла обзора. Т.е. угол этот по идее известен заранее. Ну, там может быть два угла обзора - по вертикали и по горизонтали, использовать нужно бо'льший из них, обычно это угол обзора по горизонтали. А еще лучше посчитать угол "по диагонали" - корень_из(угол_по_Х_вквадрате + угол_по_Y_вквадрате).

Не знаю как в силверлайте устанавливаются параметры камеры, но "истина где-то там".

В сильверлайте никак не устанавливаються...
Мне пришлось писать класс камеры самому.
Как и классы простейших обьектов...

Сделал так как ты порекомендовал:
*А еще лучше посчитать угол "по диагонали" - корень_из(угол_по_Х_вквадрате + угол_по_Y_вквадрате).

Проблема в том что когда точка уходит за верхний или нижний край экрана обьект всё ещё видим некоторое время. Каким образом посчитать горизонтальный и вертикальный углы чтобы более точно определить видимость?
PM MAIL ICQ MSN   Вверх
Rpahut
Дата 2.5.2010, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


0xdeadbeef
*


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

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



Точный способ - проецирование точки на экран (см. выше). Можно добавить эту проверку после первой, чтобы применять не к каждой точке.

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

--------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование игр, графики и искуственного интеллекта"
Rickert

НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.

  • Литературу, связанную с программированием графики, обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы связанные с программированием графики и мультимедии на языках С++ и Delphi
  • Вопросы по реализации алгоритмов рассматриваются здесь

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

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


 




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


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

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