Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вращение камеры вокруг объекта 
:(
    Опции темы
coach
Дата 3.11.2006, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Как определить камеру с помощью gluLookAt() для готового 3D объекта.
PM MAIL   Вверх
cipher
Дата 3.11.2006, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А поточнее можно. Что необходимо?

Добавлено @ 16:58 
Что значит "определить"?
PM MAIL   Вверх
coach
Дата 3.11.2006, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



cipher
Создан объект, необходимо относительно неподвижного объекта вращать камеру.
PM MAIL   Вверх
Rickert
Дата 4.11.2006, 08:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


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

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



Есть два варианта: первый через векторы работать с камерой, а воторой, он проще и конкретно для тебя подходит - надо работать по уровнениям сферы из тригонометрии. Есть точка неподвижная - центр сферы, а ты вокргу неё описываешь полёт по формуле сферы, задавая положения в полярной системе координат двумя углами.


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
coach
Дата 6.11.2006, 00:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо!

PM MAIL   Вверх
Arks
Дата 16.11.2006, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Кстати, в OpenGL Programming Guide есть пример работы с камерой в полярных координатах. В инете можно найти эту книгу при желании.
PM MAIL ICQ Skype MSN   Вверх
Rickert
Дата 16.11.2006, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


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

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



да чего там работать-то? Три переменных для каждой по формуле из двух составляющих(для z - одна) и всё.



--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
evilguard
Дата 19.11.2006, 00:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



У меня проблема. Делаю обзор объекта мышью по окружности. Объект находится в точке с координатами x0,y0,z0 положение камеры вычисляю с помощью полярных координат: c_r - расстояние от камеры до объекта, c_a - горизонтальный угол, c_b - угол между вектором камеры и осью z. Вот код функции OnDraw:
Код

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    x1=x0+c_r*cos(c_b)*cos(c_a);
    y1=y0+c_r*sin(c_b);
    z1=z0+c_r*cos(c_b)*sin(c_a);
    gluLookAt(x1, y1, z1, x2, y2, z2, 0, 1, 0);

    glCallList(1);
    SwapBuffers(m_hdc);

Так вот, при изменении угла c_b, то есть вращения в плоскости yz(допустим зафиксировав угол c_a) при прохождении углом значения пи/2,(при этом смотришь на объект сверху вниз), объект резко разворачивается на 180 градусов в горизонтальной плоскости(или же камера разворачивается).
Подскажите как поправить код, пожалуста. Или может быть лучше с использованием функций glTranslate и glRotate?
PM MAIL   Вверх
Rickert
Дата 19.11.2006, 07:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


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

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



У тебя вроде углы неправильно расчитываются.
Код

x1 = x0 + c_r*cos(ATOR(c_a))*sin(ATOR(c_b)) * speed;
y1 = y0 + c_r*sin(ATOR(c_a))*sin(ATOR(c_b)) * speed;
z1 = z0 + c_r*cos(ATOR(c_b)) * speed;

Где ATOR():
Код

#define ATOR(x) x * PI/180.0f

А speed - скорость(возьми 0.01 для начала)


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
evilguard
Дата 19.11.2006, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Rickert, Понимаешь, вращается все нормально во всех плоскостях, углы у меня в радианах, никакие пересчетные коэффициенты не нужны. Проблема возникает при прохождении углом значения пи/2 сверху вниз когда смотришь на объект.
PM MAIL   Вверх
Rickert
Дата 19.11.2006, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


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

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



А! Ну так естественно! получается ведь что ты начинаешь смотреть на объект вверх ногами smile Всё верно, представь себе и поймёшь.


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
evilguard
Дата 19.11.2006, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Вот exe-шник программы, 77 кб, там все понятно будет:
http://myfriends.jino-net.ru/OG.exe
PM MAIL   Вверх
Sandrick
Дата 8.1.2007, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Если не использовать функцию gluLookAt, то у меня получился такой вполне работоспособный код вращения:
Код

    glRotatef(dXAngle,mmatrix[0,0],mmatrix[1,0],mmatrix[2,0]);
    glRotatef(dYAngle,mmatrix[0,1],mmatrix[1,1],mmatrix[2,1]);

Где mmatrix - матрица GL_MODELVIEW. А dXAngle и dYAngle - углы вращения.
PM MAIL   Вверх
Rickert
Дата 8.1.2007, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


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

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



evilguard, твой файл не запускается. Говорит, что некорректно настроено приложение.
Ты с помощью МФЦ пишешь чтоли?


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
EvgenZ
Дата 8.1.2007, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Freedom in me
**


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

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



У меня открылось в окошке МФЦ.


--------------------
<удалено администрацией форума>
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




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


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

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