![]() |
|
Модераторы: Rickert |
![]()
|
|
| EgoBrain |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 23.3.2008 Где: Комната Репутация: 1 Всего: 2 |
Здравствуйте. Вопрос по стандартному алгоритму, использующемуся во многих 3-D приложениях. В общем задача следующая:
При движении мыши вращать камеру по сфере вокруг объекта. Ну я так понимаю тут проблема только одна - вычислять положение камеры в пространстве, как это сделать? Если можно, код в C# Это сообщение отредактировал(а) EgoBrain - 24.11.2008, 15:13 |
|||
|
||||
| Bitter |
|
|||
![]() Опытный лентяй ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 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 |
|||
|
||||
| EgoBrain |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 23.3.2008 Где: Комната Репутация: 1 Всего: 2 |
После недолгих размышлений я сделал вывод что лучше и проще вращать всетаки мир, а камера пусть стоит. Как опытные люди посоветуют? В моем случае имеется параллелепипед, в котором будут находится другие объекты, и за его область зайти они не могут, так что лучше, вращать мир или камеру, результат же наверное один?
|
|||
|
||||
| EgoBrain |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 23.3.2008 Где: Комната Репутация: 1 Всего: 2 |
Ты наверное забыл, что в трехмерном пространстве точка задается 3-мя координатами |
|||
|
||||
| ValLer |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 30.11.2008 Где: Ростов-на-Дону Репутация: нет Всего: нет |
Как я понимаю вращение происходит в плоскости XY, т.е. вращение вокруг оси Z. Одним углом в данном случае, координаты точки в 3D задать нельзя. Нужно ещё один угол ввести (например Theta к оси OX, который изменяется от -п/2 до п/2). Тогда можно описать движение по сфере x = sin(Angle)*Radius y = cos(Angle)*Radius z = sin(Theta)*Radius Это вокруг начала координат на расстоянии Radius. |
|||
|
||||
| ValLer |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 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п |
|||
|
||||
| Lamak |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 204 Регистрация: 8.5.2005 Где: Украина,Одесса Репутация: нет Всего: 7 |
Если тема ещё актуальна
то
Абсолютно несогласен, ибо сам на такие грабли уже наступал. Вращай камеру вокруг мира! А по поводу:
Тебе нужен arcball или trackball - поищи в гугле в коде к этой статье есть реализация через кватернионы правда на C++ Добавлено через 6 минут и 49 секунд есть ли в DX не знаю но в OpenGL вот --------------------
Роботы - это интересно и увлекательно! |
||||
|
|||||
| EgoBrain |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 23.3.2008 Где: Комната Репутация: 1 Всего: 2 |
Можно подробнее в чем опасность грабель? Пока придерживаюсь концепции вращения мира... |
|||
|
||||
| Lamak |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 204 Регистрация: 8.5.2005 Где: Украина,Одесса Репутация: нет Всего: 7 |
Попробую объяснить. Конечно многое зависит от: насколько большой у тебя проект и планируется ли его рост дальше! Просто потом могут возникнуть задачи: реализовать функциональность типа 1)вращение выделенного 3D объекта 2)вращение всей сцены вокруг точки 3)перемещение по осям выделенного 3D объекта ....... и тд и тп И везде тебе надо учитывать - что весь мир уже как-то повёрнут. Плюс довольно таки сложная отладка.
Когда я начинал писать аналогичную функциональность в проекте, умные ребята мне говорили(споры были долгими вращения мира - "вселенское зло" а вращение именно самой камеры - "вселенское добро" Но мне их доводы ,на тот момент, показались неубедительны. Я им, конечно-же, не поверил и стал писать код: "придерживаясь концепции вращения мира" И только через год я признал что: "вращать камеру вокруг мира" - было бы удобней! Кстати до сих пор всё работает на модели "вращения мира", потому как на рефакторинг просто не хватает времени :-( В общем ИМХО:если ещё не много кода и есть время, перейди на модель "вращать камеру вокруг мира"! --------------------
Роботы - это интересно и увлекательно! |
||||
|
|||||
| arilou |
|
|||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: 6 Всего: 61 |
Правильно камдары говорили. А вот это зря. Они же умные были, нет? |
|||
|
||||
![]()
|
| Правила форума "Программирование игр, графики и искуственного интеллекта" | |
|
|
НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |