WebGL - вращение объекта в направлении движения - PullRequest
0 голосов
/ 02 сентября 2011

В этом примере: http://deeplogic.info/project/webGL/

Как я могу повернуть объект в направлении, в котором он движется?

Ответы [ 2 ]

3 голосов
/ 03 сентября 2011

Скажем, ваш объект движется в направлении D, тогда все, что вам нужно сделать, это найти вектор, перпендикулярный этому направлению. Если ваше движение происходит только в одной плоскости, вы можете найти этот вектор E, взяв перекрестное произведение D с плоскостью, нормальной N.

E = D × N

Это дает вам 3 вектора D, E и N. После нормализации они образуют основу повернутой системы координат. Вы можете поместить их в столбцы матрицы 3 × 3

D_x E_x N_x
D_y E_y N_y
D_z E_z N_z

расширить эту матрицу до 4 × 4 однородной

D_x E_x N_x 0
D_y E_y N_y 0
D_z E_z N_z 0
  0   0   0 1

и вы можете передать его в OpenGL с помощью glMultMatrix, чтобы применить его к стеку матриц.

1 голос
/ 03 сентября 2011

Чтобы получить вращение вокруг z для объекта, движущегося в направлении (x, y), вы можете использовать метод Math.atan2(y,x).Это вернет угол в радианах.Соглашение OpenGL до ES 2 должно было работать в градусах, но в настоящее время все зависит от того, какой код вы должны выдвигать преобразования в вершинный шейдер.Вы, вероятно, захотите конвертировать, но в этом случае просто умножьте результат на 180 (полукруг в градусах) и разделите на pi (полукруг в радианах).

...