Мне поставили задачу создать сцену OpenGL, реализующую такие идеи, как простое перемещение и интерфейс Arcball. Проблема, с которой я сталкиваюсь, имеет дело с матрицей вращения, которую вычисляет класс Arcball NeHe (http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=48).Матрицы вращения OpenGL и ArcBall
Что я до сих пор представляю собой очень простую солнечную систему (просто землю, луну и солнце), которая отлично смотрится. Я хочу, чтобы камера следила за той планеткой, которую выбирает пользователь (нажав на желаемую), и чтобы они могли вращаться вокруг планеты на фиксированном расстоянии, используя мышь (arcball). Как я сказал в начале, класс NeHe создает матрицу вращения, основанную на щелчке мышью и перетаскивании. Я хочу применить матрицу к позиции камеры. Однако, когда я делаю это, моя камера просто шатается, не вращаясь вокруг планеты. Поэтому я предполагаю, что я либо пропустил какой-то шаг, либо у меня есть ужасное понимание того, что я пытаюсь сделать.
Вот код из моего класса камеры в хруст на: не
// transform is the matrix from NeHe's arcball interface
void camera::update(Matrix4fT transform) {
glm::mat4 transform_m = glm::mat4(0.0f);
// convert nehe's matrices to GLM matrix
for(int i=0; i < 4; i++)
for(int j=0; j < 4; j++)
transform_m[i][j] = transform.M[i*4+j];
// apply matrix to the position
glm::vec4 pos4 = glm::vec4(this->pos, 1.0f);
pos4 = transform_m * pos4;
this->pos = glm::vec3(pos4);
}
void camera::apply(planet *target) {
// called at the beginning of GLPaint
gluLookAt(this->pos.x,this->pos.y,this->pos.z, // cam->position
target->pos.x,target->pos.y,target->pos.z, // moving
this->up.x,this->up.y,this->up.z); // (0,1,0)
}
Кроме того, функции Nehe, называются в нужных местах (во время мыши и перетащить) ... Так что на самом деле, у меня нет Идея, куда идти отсюда. Надеюсь, кто-то может мне помочь, и если вы хотите увидеть всю базу кода (ее запрограммированную на C++ и вставляемую в QTPanel), просто отправьте мне электронное письмо.
Спасибо,
Карл Сверре (Carl в carlsverre точка ком)
Что именно преобразует матрицу в камере :: update точно? –
Насколько я понимаю, матрица преобразования должна представлять требуемое вращение сферы в соответствии с классом arcball. Следовательно, если пользователь нажимает одну точку на x, y, z на сфере и перемещает мышь в x2, y2, z2, матрица будет представлять требуемое вращение сферы для перемещения x, y, z в x2, y2, z2. Надеюсь, что имеет смысл. –