В настоящее время я слежу за книгой, в которой подробно описывается OpenGL ES 1.1 на android. В одном примере мы перемещали по экрану множество различных текстурированных объектов. Когда мы использовали glTranslatef () для перемещения объектов, я ожидал, что мы будем использовать постоянное количество (например, 50, чтобы объект имел одинаковую скорость). Однако мы берем текущие координаты объекта (которые постоянно увеличиваются на 50). Разве это не должно сделать объект быстрее? Когда координаты (5,5), мы перемещаемся на 5 пикселей по каждой оси. Когда это станет (55,55), объект будет перемещаться на 55 пикселей по каждой оси. Однако я не вижу увеличения скорости со временем. Почему это?
gl.glClearColor(1, 0, 0, 1);
gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
gl.glOrthof(0, 320, 0, 480, 1, -1);
gl.glEnable(GL10.GL_TEXTURE_2D);
bobTexture.bind();
gl.glMatrixMode(GL10.GL_MODELVIEW);
for (int i = 0; i < NUM_BOBS; i ++){
gl.glLoadIdentity();
gl.glTranslatef(bobs[i].x, bobs[i].y, 0);
gl.glRotatef(45, 0, 0, 1);
gl.glScalef(2, 0.5f, 0);
bobModel.draw(GL10.GL_TRIANGLES, 0, 6);
}
Bob. java
public float x, y;
float dirX, dirY;
public Bob() {
x = rand.nextFloat() * 320;
y = rand.nextFloat() * 480;
dirX = 50;
dirY = 50;
}
public void update(float deltaTime) {
x = x + dirX * deltaTime;
y = y + dirY * deltaTime;
if (x < 0) {
dirX = -dirX;
x = 0;
}
if (x > 320) {
dirX = -dirX;
x = 320;
}
if (y < 0) {
dirY = -dirY;
y = 0;
}
if (y > 480) {
dirY = -dirY;
y = 480;
}
}
Полный код доступен по адресу https://github.com/Apress/beg-android-games-3ed/tree/master/ch07-gl-basics/Ch07/app/src/main/java/com/badlogic/androidgames, в пакетах gl и glbasics, классы Bob, BobTest и Vertices.