Вызов glTranslatef с текущими координатами перемещает объекты с постоянной скоростью (OpenGL ES 1.1) - PullRequest
0 голосов
/ 18 июня 2020

В настоящее время я слежу за книгой, в которой подробно описывается 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...