我有一个正交的视角,我像这样初始化:
gl.glViewport(0, 0, Constants.SCREEN_WIDTH, Constants.SCREEN_HEIGHT);
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
gl.glOrthof(0,Constants.GAME_AREA_WIDTH, Constants.GAME_AREA_HEIGHT, 0, 1, 10);
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
我在这里要做的是从屏幕顶部开始一个正方形(在 (x,-100,z) 处),并且该正方形应该下降(在 y 上)同时旋转(在 z 上)。
正方形的左上角是我用作正方形位置的参考。
好的,现在,我想我知道如何围绕它自己旋转了。我将这个东西翻译成(-squareSize/2,-squareSize/2,z),沿z旋转,然后翻译回来。事实上,如果我只测试这种旋转,它就可以了:
gl.glLoadIdentity();
angle = angle + 3;
if(angle>360) {
angle = angle - 360;
}
gl.glTranslatef(xCurrent+size/2, yCurrent+size/2,0);
gl.glRotatef(angle, 0, 0, 1);
gl.glTranslatef(-(xCurrent+size/2), -(yCurrent+size/2),0);
//omitted: enable client state, draw elements, disable client state.
就这样,无论我将正方形放在哪里(即使是 x 和 y 的小负值,也只会使其部分显示在屏幕上),它都会围绕其中心旋转。
但是我不知道如何在 y 上添加向下平移。如果我做这样的事情:
angle = angle + 3;
if(angle>360) {
angle = angle - 360;
}
gl.glTranslatef(xCurrent+size/2, yCurrent+size/2,0);
gl.glRotatef(angle, 0, 0, 1);
gl.glTranslatef(-(xCurrent+size/2), -(yCurrent+size/2),0);
yCurrent = yCurrent + realSpeed;
if(yCurrent>Constants.GAME_AREA_HEIGHT+size) {
yCurrent=-size;
}
gl.glTranslatef(0f, yCurrent,0f);
只有当我的正方形从 (0,0,z) 开始时它才会正常工作 - 在这种情况下,它会向下移动并围绕它的中心旋转。
但是,如果我从 x 或 y 的任何正或负非 0 值开始它,它仍会向下移动,但会做一个奇怪的螺旋运动,而不是绕其中心旋转。