Что не так с моим поворотом матрицы? - PullRequest
1 голос
/ 05 декабря 2010

Я пытаюсь повернуть модель на

(float) Math.atan2(-camX.getXf() * padX, -camDir.getZf() * padY)

Y

и

-MathUtils.HALF_PI

Z

Но

model.setRotation(new Matrix3(1,0,0,
                              0,(float) Math.atan2(-camX.getXf() * padX, -camDir.getZf() * padY),0,
                              0,0,-MathUtils.HALF_PI));

Он вращается вокруг оси y (хотя он и вбок, потому что это модель md2), но вращение оси Z не делает его правой стороной вверх.Любая идея, почему?

Каждая переменная находится в соответствующей области матрицы.

РЕДАКТИРОВАТЬ: хорошо, теперь я использую этот код:

float x = 0;
            float y = (float) Math.atan2(-camX.getXf() * padX, -camDir.getZf() * padY);
            float z = (float) -MathUtils.HALF_PI;

            float a = (float) Math.sin(x);
            float A = (float) Math.cos(x);
            float b = (float) Math.sin(y);
            float B = (float) Math.cos(y);
            float c = (float) Math.sin(z);
            float C = (float) Math.cos(z);

            Matrix3 m = new Matrix3(A*b, -(B*a),b,
                                   (C*a)+(A*b*c), (A*C)-(a*b*c), -(B*c),
                                   (a*c)-(A*C*b), (A*c)+(C*a*b), B*C); 

Но сейчасни одна из осей не вращается правильно.

Вот как настроена матрица:

xx, xy, xz, 
yx, yy, yz, 
zx, zy, zz

Ответы [ 3 ]

3 голосов
/ 05 декабря 2010

Матрицы вращения не работают таким образом.Углы не входят в матрицы!Вместо этого я предполагаю, что Java обрабатывает матрицу вращения точно так же, как любая другая матрица преобразования в декартовых координатах.Поскольку я думаю, что вы не хотите вводить матрицу вращения вручную, вам, вероятно, лучше начать с новой Matrix3 (надеюсь, она автоматически инициализируется в единичной матрице), а затем последовательно поворачивать ее с помощью rotateX (float x), rotateY (float y) и rotateZ (float z), где x, y, z - углы, на которые вы хотите повернуть.(Если вы используете com.threed.jpct.Matrix, по крайней мере.) Обратите внимание, что результат зависит от последовательности трех поворотов.

1 голос
/ 05 декабря 2010

Вот типичное руководство по использованию матриц вращения http://www.euclideanspace.com/maths/algebra/matrix/orthogonal/rotation/index.htm. Порядок применения поворотов вокруг трех осей является критическим.В качестве альтернативы вы можете вращаться вокруг произвольной оси.Также вы можете изучить кватернионов .

0 голосов
/ 05 декабря 2010

Так выглядит матрица вращения в 2D;он вращает точку в (x, y) пространстве вокруг оси z в направлении против часовой стрелки.

http://en.wikipedia.org/wiki/Rotation_matrix

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...