【发布时间】:2015-12-15 12:04:24
【问题描述】:
我对这个 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 度横滚,并改变其航向。
tl;dr 这段代码确实通过它自己的轴移动我的对象,我需要它围绕原点旋转,改变俯仰和滚动而不改变它的方向
除了第二个对象(地板)之外,它可以旋转到给定的路线,它工作正常。问题是车辆。
我已经尝试过不调用 translateF,或者调用旋转和平移 f,然后用负值再次调用它们,似乎没有任何效果。
编辑:添加了可视化我的问题的 youtube 视频,或者更确切地说是我试图达到的效果 https://www.youtube.com/watch?v=zc8b2Jo7mno&feature=youtu.be&t=111
【问题讨论】:
标签: opengl rotation lwjgl euler-angles