Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.01.2013, 12:14   #1
GoldBuzz
Новичок
Джуниор
 
Регистрация: 06.01.2013
Сообщений: 2
По умолчанию Вращение камеры вокруг точки

Здравствуйте. Пытаюсь заставить камеру крутиться вокруг точки в пространстве при помощи сферических координат. Вот алгоритм:

phi=atan2(vCameraPos.z,vCameraPos.x );
theta=atan2(vCameraPos.y,sqrt(vCame raPos.x*vCameraPos.x+vCameraPos.z* vCameraPos.z));

vCameraPos.x = vPoinPos.x + dist * cos(phi) * cos(theta);
vCameraPos.y = vPoinPos.y + dist * sin(theta);
vCameraPos.z = vPoinPos.z + dist * cos(phi) * sin(theta);

gluLookAt(vCameraPos.x, vCameraPos.y, vCameraPos.z,
vPoinPos.x, vPoinPos.y, vPoinPos.z,
0, 1, 0);

где dist - это расстояние от камеры до точки, phi и theta - углы.

Таким образом меняя угол, я меняю координаты камеры в пространстве, но они изменяются несколько не правильно (камера движется вообще непонятно как ). В чём ошибка? Прикладываю exe файл проекта.
Вложения
Тип файла: zip proj.zip (61.7 Кб, 14 просмотров)
GoldBuzz вне форума Ответить с цитированием
Старый 08.01.2013, 13:01   #2
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,603
По умолчанию

Цитата:
где dist - это расстояние от камеры до точки
Не нужно. Можно просто убрать.
Цитата:
phi=atan2(vCameraPos.z,vCameraPos.x );
theta=atan2(vCameraPos.y,sqrt(vCame raPos.x*vCameraPos.x+vCameraPos.z* vCameraPos.z));
У вас курсор мыши устанавливается в центр экрана(или в какую-либо другую точку)? Несколько ниже вашей темы есть аналогичная http://programmersforum.ru/showpost....6&postcount=15
Учитывайте направление осей в OpenGL
Код:
vCameraPos.x = vPoinPos.x +  sin(theta) * sin(phi);
vCameraPos.y = vPoinPos.y +  cos(theta);
vCameraPos.z = vPoinPos.z +  sin(theta) * cos(phi);
-----------------------------------------------------------------------
Код:
theta+=(Разница старых координат x и новых)*коэффициент, например 0.01
phi+=(Разница старых координат y и новых)*коэффициент, например 0.01
Реализация есть в приведенном по ссылке сообщение.

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог

Последний раз редактировалось _PROGRAMM_; 08.01.2013 в 13:07.
_PROGRAMM_ вне форума Ответить с цитированием
Старый 08.01.2013, 13:59   #3
GoldBuzz
Новичок
Джуниор
 
Регистрация: 06.01.2013
Сообщений: 2
По умолчанию

Спасибо огромное, _PROGRAMM_! Всё получилось

Если интересно, вот исполняемый файл:
Вложения
Тип файла: zip proj2.zip (61.9 Кб, 28 просмотров)
GoldBuzz вне форума Ответить с цитированием
Старый 08.01.2013, 14:01   #4
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,603
По умолчанию

Да у меня и тот не заработал Я не на Windows.

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог
_PROGRAMM_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вращение многоугольника вокруг заданной точки Mazahacka1 Помощь студентам 10 22.05.2012 19:08
Вращение камеры вокруг точки jetei Gamedev - cоздание игр: Unity, OpenGL, DirectX 2 11.02.2012 12:48
Вращение камеры вокруг своей оси [OpenGL] russian-stalker Gamedev - cоздание игр: Unity, OpenGL, DirectX 4 14.04.2011 21:03
Вращение вокруг произвольно оси mens-evgenij Помощь студентам 3 21.03.2009 15:42
Вращение луны вокруг Земли [LOL] Помощь студентам 4 19.06.2007 21:14