Поверните вид камеры (3 аргумента центра) вокруг оси X в gluLookAt.

Я нашел свою камеру внутри 3D-куба -

public void display(GLAutoDrawable drawable) {
        ...
        glu.gluLookAt(eyeX, eyeY, eyeZ, centerX, centerY, centerZ, upX, upY, upZ);
        ...
}

Это выглядит так - (каждый цвет - боковой замок) -

введите здесь описание изображения

Теперь я пытаюсь повернуть, и камера смотрит (три centerX, centerY, centerZ ) вокруг оси X - в соответствии с этой формулой вращения -

введите здесь описание изображения

Он работает хорошо, пока не достигнет состояния, когда значение Z станет отрицательным, и после этого взгляд камеры начнет вращаться в другую сторону оси X.

Я показываю вам значения (centerX,centerY,centerZ) в диапазоне этой ошибки -

1.0 -1.2817129 0.59767246 //ok
1.0 -1.3289262 0.4836895 // ok
1.0 -1.3660256 0.36602536 //ok
1.0 -1.3927287 0.24557555 // ok
1.0 -1.4088323 0.12325676 //ok
1.0 -1.4142138 -9.784749E-8 // ok for last time
1.0 -1.4088323 -0.12325695 // rotate to other side of X
1.0 -1.3927287 -0.24557574  // so on ... 

Как вы рекомендуете мне исправить это и заставить его вращаться на все 360 градусов?

Изменить:

Должен ли (upX,upY,upZ) вращаться и в этом случае?


person URL87    schedule 26.05.2013    source источник


Ответы (1)


Вам нужно повернуть вектор направления вокруг оси X, то есть center - eye, а не center. Общее вычисление должно быть center = eye + Rot(center - eye).

person Marcelo Cantos    schedule 26.05.2013
comment
Это операция поворота, которую вы описываете в своем вопросе. - person Marcelo Cantos; 26.05.2013
comment
Итак, вы имеете в виду, что только center должны быть изменены, но как вы описываете? - person URL87; 26.05.2013
comment
Я так благодарю вас !! это работает! :) еще один маленький вопрос, пожалуйста - для того, чтобы вращаться вокруг других осей (Y или Z), это также с center = eye + Rot(center - eye) (изменить на Rot в зависимости от) ? - person URL87; 26.05.2013
comment
@URL87: Извините, я только что заметил комментарий/вопрос выше. Гниль может представлять любые извилистые вещи, которые вы хотите сделать вокруг центра. Это может быть вращение вокруг X, умноженное на вращение вокруг Y, или что-то еще. - person Marcelo Cantos; 05.06.2013
comment
Так как я уточнил вопрос еще немного в другом посте и мне никто не ответил. вы приветствуете - stackoverflow.com/questions/16758944/ - person URL87; 05.06.2013