PMG

Форумы по созданию игр
Текущее время: 23 окт 2017 03:04

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: Камера на кватернионах
СообщениеДобавлено: 05 ноя 2009 15:20 
Не в сети
Новичок

Зарегистрирован: 05 ноя 2009 15:17
Сообщения: 4
Приветствую всех! Такая проблема. Есть класс камеры на кватернионах. Вроде всё правильно работает, кроме одной штуки – координата z с обратным знаком. Т. е., например, камера находиться в первом октанте декартовой системы координат, координата x и y отрицательны, а вот координата z с положительным знаком. Достало уже, не знаю, как с этим справиться. API - OpenGL с вытекающими отсюда последствиями. Система координат правосторонняя – синяя линия ось z, зелёная – ось y, красная – ось x.

Функция, обновляющая видовую матрицу:

inline GLvoid Cam::SetPrespective()
{
static GLfloat qx2, qy2, qz2, qxx, qyy, qzz, qxy, qyz, qxz, qwy, qwx, qwz;

qSide.CreateFromAxisAngle(ecVector3f(1.0f, 0.0f, 0.0f), CamPitchDegs);
qHead.CreateFromAxisAngle(ecVector3f(0.0f, 1.0f, 0.0f), CamHeadingDegs);

Q = qHead * qSide;
Q.CreateMatrix(m);

Q = qSide * qHead;

qx2 = Q.q[1] + Q.q[1];
qy2 = Q.q[2] + Q.q[2];
qz2 = Q.q[3] + Q.q[3];

qxx = Q.q[1] * qx2; qxy = Q.q[1] * qy2; qxz = Q.q[1] * qz2;
qyy = Q.q[2] * qy2; qyz = Q.q[2] * qz2; qzz = Q.q[3] * qz2;
qwx = Q.q[0] * qx2; qwy = Q.q[0] * qy2; qwz = Q.q[0] * qz2;

vSide.v[0] = 1.0f - qyy - qzz;
vSide.v[1] = qxy - qwz;
vSide.v[2] = qxz + qwy;

vHead.v[0] = qxy + qwz;
vHead.v[1] = 1.0f - qxx - qzz;
vHead.v[2] = qyz - qwx;

vView.v[0] = qxz - qwy;
vView.v[1] = qyz + qwx;
vView.v[2] = 1.0f - qxx - qyy;

m[12] = vSide.GetInner(vLoc);
m[13] = vHead.GetInner(vLoc);
m[14] = -vView.GetInner(vLoc);

glMultMatrixf(m);
}

Само приложение: http://islandengine.ucoz.ru/Camera.rar.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Камера на кватернионах
СообщениеДобавлено: 05 ноя 2009 17:48 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2686
Откуда: Кирово-Чепецк
И все-таки в чем проявляется проблема?

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Камера на кватернионах
СообщениеДобавлено: 05 ноя 2009 17:53 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2686
Откуда: Кирово-Чепецк
Спасибо за твой сайт. Приятно такое увидеть....

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Камера на кватернионах
СообщениеДобавлено: 05 ноя 2009 18:46 
Не в сети
Новичок

Зарегистрирован: 05 ноя 2009 15:17
Сообщения: 4
Мой сайт - это ерунда полная, пока не разберусь с камерой постить ничего нового не буду (хотя материала уже достачно накопилось). Проблема в том, что меня не устраивает то, что координата z камеры, всегда получается с противоположным знаком по сравнению с координатами x и y. Единственное, что удерживает меня в дальнейшем изучении OpenGL - просто кошмар, какой-то...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Камера на кватернионах
СообщениеДобавлено: 05 ноя 2009 19:13 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2686
Откуда: Кирово-Чепецк
Урок "Класс камеры на основе кватернионов" (http://pmg.org.ru/nehe/nehe_camera.htm) не смотрел???

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Камера на кватернионах
СообщениеДобавлено: 05 ноя 2009 20:19 
Не в сети
Новичок

Зарегистрирован: 05 ноя 2009 15:17
Сообщения: 4
Даже не представить сколько я этих статей-уроков прочитал - ужас... У меня камера почти так же реализована, как Джефа, да вот беда - у него такая же ерунда - координата z с обратным знаком.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Камера на кватернионах
СообщениеДобавлено: 06 ноя 2009 13:48 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2686
Откуда: Кирово-Чепецк
Все равно не могу тебя понять. Ну координата z отрицательна, ну и что? Что в этом плохого? Ну в первом октанте? Не важно где она находятся, важно куда смотрит.

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Камера на кватернионах
СообщениеДобавлено: 06 ноя 2009 14:22 
Не в сети
Новичок

Зарегистрирован: 05 ноя 2009 15:17
Сообщения: 4
Захочу, например, на координатах камеры забиндить глобальный источник света, типа так - glLightfv(GL_LIGHT0, GL_POSITION, &Camera.vLoc.v[0]); - то у меня получиться, что освещенная сторона будет всегда с противоположной стороны от от взглдяа камеры. Да и много ещё не удобоств. Вот на матрицах всё работает, кроме ограничения взгляда по вертикали - трясется чего-то - но не нравятся мне матрицы, хотя кватернионы это почти тоже самое.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Камера на кватернионах
СообщениеДобавлено: 07 ноя 2009 11:28 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2686
Откуда: Кирово-Чепецк
Н-да гнусно получается. Тогда можно делать не который пересчет, чтобы освещение было правильным.

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: Bing [Bot] и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB