我对此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度。
tl; dr这个代码确实通过它自己的轴移动我的对象,一个接一个,我需要它围绕起点旋转,改变俯仰和滚动而不改变它的标题
除此之外,第二个对象(地板)是旋转到给定的路线,它工作正常。车辆是问题所在。
我已经试过不调用translateF,或者调用rotations和translate f,然后用负值再次调用它们,看起来都不起作用。
编辑:添加了youtube视频,显示了我的问题,或者更确切地说是我试图达到的效果https://www.youtube.com/watch?v=zc8b2Jo7mno
在花了几个小时阅读了关于euler 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);