2015-12-15 5 views
1

У меня есть проблема с этим OpenGL кода:OpenGL, вращающийся объект вокруг глобальной оси, тангажа и крена

 make3D(); 
     GL11.glClear(GL11.GL_COLOR_BUFFER_BIT); 
     GL11.glClearColor(0.5f, 0.55f, 0.55f, 1.0f); 
     GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT); 
     GLU.gluLookAt(camX, camY, camZ, centerX, centerY, centerZ, upX, upY, upZ); 

     // THE PROBLEM IS SOMEWHERE HERE 
     // Rotate and render vehicle 
     GL11.glPushMatrix(); 
     GL11.glTranslatef(0.0f, 0f, 0.0f); 
     GL11.glRotatef(vehicleRoll, 0.0f, 0.0f, 1.0f); 
     GL11.glRotatef(vehiclePitch, 1.0f, 0.0f, 0.0f); 
     GL11.glTranslatef(-0.0f, -0f, -0.0f); 
     scene.render(ObjectType.VEHICLE); 
     GL11.glPopMatrix(); 

     // Render floor 
     GL11.glPushMatrix(); 
     GL11.glRotatef(vehicleCourse, 0.0f, 1.0f, 0.0f); 
     GL11.glClearColor(1.0f, 1.0f, 1.0f, 1.0f); 
     scene.render(ObjectType.ENVIROMENT_FLOOR); 
     GL11.glPopMatrix(); 

     // Draw lights 
     setUpLighting(); 

вращения ролика кажется нормально, объект вращается с его стороны (просто зашкаливает), но вращение основного тона оленья кожа работайте по назначению. Если я скачу свой объект сначала на 30 градусов, а затем поверните шаг на 30 градусов, я бы хотел, чтобы его свернули и повернули вниз на 30 градусов, но он поворачивает мой объект вектором этих двух, в конце концов это выглядит 15 градусов и 15 градусов, а также изменяет заголовок.

Т.Л., д-р делает этот код пошевелить объект по своей оси, один за другим, и мне нужно его вращаться вокруг точки orgin, чейнинга тангаж и крен, не изменяя ее заголовок

Помимо этого второго объекта (пол), является поводом для вращения к заданному курсу, и он отлично работает. Это проблема.

Я уже пробовал не переводить перевод илизывать поворот и переводить f, а затем снова называть их отрицательными значениями, ничего реально не работало.

редактировать: добавлено видео Youtube visualsing моей проблемы, или, скорее, эффект им пытается достичь https://www.youtube.com/watch?v=zc8b2Jo7mno&feature=youtu.be&t=111

ответ

1

Проведя несколько часов на чтение о эйлере agles и кватернионе-х, когда я почти сдался я вдруг осенил. Для того, чтобы получить вещи, работающие в моем случае это было достаточно, чтобы поменять местами две строки кода:

Это:

GL11.glRotatef(vehicleRoll, 0.0f, 0.0f, 1.0f); 
GL11.glRotatef(vehiclePitch, 1.0f, 0.0f, 0.0f); 

к тому, что:

GL11.glRotatef(vehiclePitch, 1.0f, 0.0f, 0.0f); 
GL11.glRotatef(vehicleRoll, 0.0f, 0.0f, 1.0f); 
Смежные вопросы