ПрограммированиеФорумГрафика

вращение камеры вокруг заданной точки (2 стр)

Страницы: 1 2
#15
8:57, 2 дек 2012

Тоже как-то стояла такая задача :) Тут же на форуме спрашивал, как сейчас помню. И тоже пол-инета облазил. Информации - чуть. Но задачу решил. Вот, держи готовый универсальный класс камеры Универсальный класс камеры. Как пользоваться, если нужно, чтобы камера на героя смотрела:

if ( myCamera == NULL) myCamera = new MYCAMERA (MYCAMERA::TARGET, mshObject[1]-> getPosition());

где mshObject[1]-> getPosition() возвращает указатель на вектор позиции объекта

#16
10:42, 2 дек 2012

nomid
этот индус известный мужик, а также он получил награду от сиграфа за серьезный вклад в КГ в последнем десятилетии

#17
12:17, 2 дек 2012

evirus
Пример орбитальной камеры. Это тебе и нужно.
http://www.dhpoware.com/demos/d3dCamera3.html

#18
13:38, 2 дек 2012

Andrey
> evirus
> Пример орбитальной камеры. Это тебе и нужно.
> http://www.dhpoware.com/demos/d3dCamera3.html
Да, это то что мне нужно)

Всем большое спасибо, буду теперь разбираться)

#19
20:12, 2 дек 2012

Andrey
мне он точно не нужен)
автору нужен Crystal Ball Interface всего-то

#20
21:21, 2 дек 2012

Ну вы и напридумывали. Какие-то классы юзать, какие-то доки читать... делов-то...

Достаточно знать, что после всех преобразований все объекты в сцене упорядочены по Z. То есть, матрица переноса на вектор (0, 0, -D) при домнажении в самом конце справа (DirectX) или слева (OpenGL) отодвинет камеру на D попугаев назад. Теперь все повороты, передвижения и прочую лабуду на камеру начинай с матрицы переноса на (0, 0, D) и заканчивай (0, 0, -D). А если захочешь изменить D, то предварительно умножь на (0, 0, D_old), а потом на (0, 0, -D_new) и запиши куда-нибудь D_new. Разжевал как мог....

#21
12:41, 3 дек 2012

evirus
evirus
> мне он точно не нужен)
> автору нужен Crystal Ball Interface всего-то
ой, не тот ник вставил.

#22
22:17, 22 янв 2013

Поддерживаю, тот же вопрос, сорри за копание, но наболело, кто может привести формулу "одновременно поворота вокруг своей оси и вокруг заданой точки" для матриц? Без кватернионов и "скалярных плясок".

#23
22:31, 22 янв 2013

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;
}
Страницы: 1 2
ПрограммированиеФорумГрафика

Тема в архиве.