Тоже как-то стояла такая задача :) Тут же на форуме спрашивал, как сейчас помню. И тоже пол-инета облазил. Информации - чуть. Но задачу решил. Вот, держи готовый универсальный класс камеры Универсальный класс камеры. Как пользоваться, если нужно, чтобы камера на героя смотрела:
if ( myCamera == NULL) myCamera = new MYCAMERA (MYCAMERA::TARGET, mshObject[1]-> getPosition());
где mshObject[1]-> getPosition() возвращает указатель на вектор позиции объекта
nomid
этот индус известный мужик, а также он получил награду от сиграфа за серьезный вклад в КГ в последнем десятилетии
evirus
Пример орбитальной камеры. Это тебе и нужно.
http://www.dhpoware.com/demos/d3dCamera3.html
Andrey
> evirus
> Пример орбитальной камеры. Это тебе и нужно.
> http://www.dhpoware.com/demos/d3dCamera3.html
Да, это то что мне нужно)
Всем большое спасибо, буду теперь разбираться)
Andrey
мне он точно не нужен)
автору нужен Crystal Ball Interface всего-то
Ну вы и напридумывали. Какие-то классы юзать, какие-то доки читать... делов-то...
Достаточно знать, что после всех преобразований все объекты в сцене упорядочены по Z. То есть, матрица переноса на вектор (0, 0, -D) при домнажении в самом конце справа (DirectX) или слева (OpenGL) отодвинет камеру на D попугаев назад. Теперь все повороты, передвижения и прочую лабуду на камеру начинай с матрицы переноса на (0, 0, D) и заканчивай (0, 0, -D). А если захочешь изменить D, то предварительно умножь на (0, 0, D_old), а потом на (0, 0, -D_new) и запиши куда-нибудь D_new. Разжевал как мог....
evirus
evirus
> мне он точно не нужен)
> автору нужен Crystal Ball Interface всего-то
ой, не тот ник вставил.
Поддерживаю, тот же вопрос, сорри за копание, но наболело, кто может привести формулу "одновременно поворота вокруг своей оси и вокруг заданой точки" для матриц? Без кватернионов и "скалярных плясок".
Cyber_Wanderer
хотел сказать матрица поворота вокруг вектора на определенный угол ?
вот есть пример :
mat3 Transform::rotate(const float degrees, const vec3& axis) { float radians = degrees * pi / 180; float cosT = cos( radians); float sinT = sin( radians); vec3 vec = axis; mat3 identity( 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0); mat3 a( vec.x * vec.x, vec.x * vec.y, vec.x * vec.z, vec.x * vec.y, vec.y * vec.y, vec.y * vec.z, vec.x * vec.z, vec.y * vec.z, vec.z * vec.z); mat3 dual( 0.0, vec.z, -vec.y, -vec.z, 0.0, vec.x, vec.y, -vec.x, 0); return cosT * identity + ( 1 - cosT) * a + sinT * dual; }
Тема в архиве.