У меня есть ортогональная перспектива, которую я инициализирую следующим образом:
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);
, это будет работать нормально только если мой квадратный стартat (0,0, z) - в этом случае он будет двигаться вниз и вращаться вокруг своей осиnter.
Если, однако, я начну с любого положительного или отрицательного значения, отличного от 0, для x или y, он все равно будет двигаться вниз, но совершит странное спиральное движение, вместо вращения против своего центра.