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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Алгоритм движения камеры вокруг объекта, Элементарная алгебра или в DX всё уже е? 
V
    Опции темы
EgoBrain
Дата 24.11.2008, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Здравствуйте. Вопрос по стандартному алгоритму, использующемуся во многих 3-D приложениях. В общем задача следующая:
При движении мыши вращать камеру по сфере вокруг объекта. Ну я так понимаю тут проблема только одна - вычислять положение камеры в пространстве, как это сделать? Если можно, код в C#  smile   smile 

Это сообщение отредактировал(а) EgoBrain - 24.11.2008, 15:13
PM MAIL ICQ Skype   Вверх
Bitter
Дата 29.11.2008, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

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



Координаты камеры вычислить очень просто. 

x = TargetX + sin(Angle)*Radius
y = TargetY + cos(Angle)*Radius

где TargetX, TargetY - координаты объекта, вокруг которово надо крутиться, Angle - угол поворота, Radius - расстояние, на котором надо находиться от объекта

Это сообщение отредактировал(а) Bitter - 29.11.2008, 17:08
PM MAIL ICQ Skype   Вверх
EgoBrain
Дата 30.11.2008, 08:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



После недолгих размышлений я сделал вывод что лучше и проще вращать всетаки мир, а камера пусть стоит. Как опытные люди посоветуют? В моем случае имеется параллелепипед, в котором будут находится другие объекты, и за его область зайти они не могут, так что лучше, вращать мир или камеру, результат же наверное один?
PM MAIL ICQ Skype   Вверх
EgoBrain
Дата 30.11.2008, 13:52 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Bitter @ 29.11.2008,  17:07)
Координаты камеры вычислить очень просто. 

x = TargetX + sin(Angle)*Radius
y = TargetY + cos(Angle)*Radius

где TargetX, TargetY - координаты объекта, вокруг которово надо крутиться, Angle - угол поворота, Radius - расстояние, на котором надо находиться от объекта

Ты наверное забыл, что в трехмерном пространстве точка задается 3-мя координатами smile z чему равно? tan(Angle) * Radius?
PM MAIL ICQ Skype   Вверх
ValLer
Дата 3.12.2008, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

Ты наверное забыл, что в трехмерном пространстве точка задается 3-мя координатами  z чему равно? tan(Angle) * Radius?


Как я понимаю вращение происходит в плоскости XY, т.е. вращение вокруг оси Z.  Одним углом в данном случае, координаты точки в 3D задать нельзя. Нужно ещё один угол ввести (например Theta к оси OX, который изменяется от -п/2 до п/2). Тогда можно описать движение по сфере  smile :

x = sin(Angle)*Radius
y = cos(Angle)*Radius
z = sin(Theta)*Radius
Это вокруг начала координат на расстоянии Radius.
PM MAIL WWW ICQ   Вверх
ValLer
Дата 3.12.2008, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А вообще эта тема из аналитической геометрии, понятие сферических координат. Если alpha - угол с осью OX в плоскости XY, theta -  угол с осью OZ и R - растояние точки от начала координат, то декатровы координаты координаты точки:

x = R * sin(theta) * cos(alpha)
y = R * sin(theta) * sin(alpha)
z = R * cos(alpha)
Причём для однозначного соответствия сферической и декартовой системы координат R>=0,   0 <= theta <= 2п
PM MAIL WWW ICQ   Вверх
Lamak
Дата 2.1.2009, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Если тема ещё актуальна
то
Цитата

После недолгих размышлений я сделал вывод что лучше и проще вращать все таки мир, а камера пусть стоит. 


Абсолютно несогласен, ибо сам на такие грабли уже наступал.
Вращай камеру вокруг мира!

А по поводу: 
Цитата

При движении мыши вращать камеру по сфере вокруг объекта.


Тебе нужен  arcball или trackball - поищи в гугле  

 
в коде к этой статье есть реализация через кватернионы правда на C++

Добавлено через 6 минут и 49 секунд
есть ли в DX не знаю но в OpenGL вот 
--------------------
Роботы - это интересно и увлекательно! 
PM MAIL   Вверх
EgoBrain
Дата 5.1.2009, 07:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Lamak @ 2.1.2009,  22:46)
Абсолютно несогласен, ибо сам на такие грабли уже наступал.
Вращай камеру вокруг мира!

Можно подробнее в чем опасность грабель? Пока придерживаюсь концепции вращения мира...
PM MAIL ICQ Skype   Вверх
Lamak
Дата 8.1.2009, 21:52 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата

Можно подробнее в чем опасность грабель?


Попробую объяснить.

Конечно многое зависит от:
  насколько большой у тебя проект 
  и  планируется ли его рост дальше!

Просто потом могут возникнуть задачи: реализовать функциональность типа

1)вращение выделенного 3D объекта
2)вращение всей сцены  вокруг точки
3)перемещение по осям  выделенного 3D объекта
.......
и тд и тп

И везде тебе надо учитывать - что весь мир уже как-то повёрнут.
Плюс  довольно таки сложная отладка.

Цитата

Пока придерживаюсь концепции вращения мира... 


Когда я начинал писать аналогичную  функциональность в проекте, умные ребята мне говорили(споры были долгими  smile ), что:
вращения мира - "вселенское зло"
а вращение именно самой камеры - "вселенское добро" smile 

Но мне их доводы ,на тот момент, показались неубедительны.
Я им, конечно-же, не поверил и стал писать код: "придерживаясь концепции вращения мира"
И только через год я признал что: "вращать камеру вокруг мира" - было бы удобней!

Кстати до сих пор всё работает на модели "вращения мира", потому как на рефакторинг просто не хватает времени :-(

В общем ИМХО:если ещё не много кода и есть время, перейди на модель "вращать камеру вокруг мира"!
  

 

 
--------------------
Роботы - это интересно и увлекательно! 
PM MAIL   Вверх
arilou
Дата 14.1.2009, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


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

Репутация: 6
Всего: 61



Цитата(Lamak @  8.1.2009,  21:52 Найти цитируемый пост)
Когда я начинал писать аналогичную  функциональность в проекте, умные ребята мне говорили(споры были долгими  smile ), что:
вращения мира - "вселенское зло"
а вращение именно самой камеры - "вселенское добро" smile 


Правильно камдары говорили. 
Цитата(Lamak @  8.1.2009,  21:52 Найти цитируемый пост)
Но мне их доводы ,на тот момент, показались неубедительны.

А вот это зря. Они же умные были, нет? 


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование игр, графики и искуственного интеллекта"
Rickert

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

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

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

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


 




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


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

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