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

gluLookAt (4 стр)

Страницы: 1 2 3 4
#45
20:59, 8 дек. 2011

ну в ogl матрицы column major , то есть просто транспонированы


#46
21:10, 8 дек. 2011

Leshik
Вообще-то я привел пример для правосторонней и левосторонней систем координат (если мы транспонируем правостороннюю, то получим левостороннюю и наоборот)

#47
21:55, 8 дек. 2011

Во первых ты не посчитал basis.y :)
Он у тебя хрен знает какой, и все трансформированные точки улетают в глубокий космос :)
Во вторых, origin = eye - это точка обзора, и твое начало координат новой системы
А это
  origin.x = -Vector3D::dot(basis.x, eye);
  origin.y = -Vector3D::dot(basis.y, eye);
  origin.z = -Vector3D::dot(basis.z, eye);
перевод точки обзора в новую систему координат, это лишнее.
Хотя может я не правильно понимаю что у тебя означает orign :)

#48
22:03, 8 дек. 2011

Tolanay
>Во первых ты не посчитал basis.y :)
>Он у тебя хрен знает какой, и все трансформированные точки улетают в глубокий космос :)
Он рассчитывается в этой строчке кода:

Vector3D::cross(basis.y, basis.z, basis.x);

>Во вторых, origin = eye - это точка обзора, и твое начало координат новой системы
>А это
> origin.x = -Vector3D::dot(basis.x, eye);
> origin.y = -Vector3D::dot(basis.y, eye);
> origin.z = -Vector3D::dot(basis.z, eye);
>перевод точки обзора в новую систему координат, это лишнее.
>Хотя может я не правильно понимаю что у тебя означает orign :)
Пример кода взят из DXSDK9, там у них именно так реализовано, сам не понимаю зачем.

#49
22:34, 8 дек. 2011

Да, проглядел строчку :)
Посмотрел код в direct3d. То, что ты оттуда взял как origin, это не какой не origin.Если у тебя origin это положение камеры, то оно равно eye.

#50
22:39, 8 дек. 2011

Tolanay
origin это грубо говоря элементы матрицы e30, e31, e32, хранящие смещение локальной системы координат вроде.

#51
23:29, 8 дек. 2011

Грубо говоря есть допустим некий объект, его положение задано некоторой матрицей (или базисом и началом координат).
Далее нужно каким-то образом перейти в систему координат этого объекта так, чтобы мы наблюдали из его начала координат в направлении его взгляда.

#52
0:00, 9 дек. 2011

Тогда все верно. Матрицы отличаются только транспонированием. Только что обратил внимание :) Тут тебе уже про это писали.

#53
0:01, 9 дек. 2011

И это, транспонирование матрицы не превращает ее из левой в правую и наоборот.

#54
1:03, 9 дек. 2011

Tolanay
>И это, транспонирование матрицы не превращает ее из левой в правую и наоборот.
Хаха, а ведь точно, спасибо тебе добрый человек )
Двоечник я, все время полагал что транспонирование меняет левостороннюю систему на правостороннюю.

#55
15:04, 9 дек. 2011

Объясню про транспонирование. Если применять его к матрице вращения, то она будет работать как обратная. То есть, переводили из world во view, транспонировали, теперь переводим view to world. Но если в матрице присутствует сдвиг, то так yже делать нельзя. Тогда нужна обратная матрица.
В общем случае для обратного перехода нужна обратная матрица, это как бы вытекает из простого матричного уравнения. Фишка в том, что матрица вращения обладает одной особенностью - транспонированная равна обратной.

Для перехода из левой в правую, и наоборот, как ты уже успел увидеть в примере из dx, достаточно инвертировать одну из осей, в нашем случае это ось z :)

Страницы: 1 2 3 4
ПрограммированиеФорумГрафика

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