проблема с координатами объекта с lwjgl - PullRequest
0 голосов
/ 03 мая 2019

У меня проблема с перемещением моих сущностей в контексте OpenGL: когда я пытаюсь разместить объект, позиция кажется правильной, но когда объект начинает двигаться, все идет не так, и столкновения не работают. Я новичок в OpenGL и подозреваю, что моя мировая матрица или матрица моделей неверны.

Вот код вершинного шейдера:

#version 330 core

layout (location=0) in vec3 position;

out vec3 extColor;

uniform mat4 projectionMatrix;
uniform mat4 modelMatrix;
uniform vec3 inColor;
void main()
{
    gl_Position = projectionMatrix * modelMatrix  * vec4(position, 1.0);
    extColor = inColor;
}

Вот класс, который вычисляет большую часть матрицы:

public class Transformations {
    private Matrix4f projectionMatrix;
    private  Matrix4f modelMatrix;

    public Transformations() {
        projectionMatrix = new Matrix4f();
        modelMatrix = new Matrix4f();
    }

    public final Matrix4f getOrthoMatrix(float width, float height, float zNear, float zFar) {
        projectionMatrix.identity();
        projectionMatrix.ortho(0.0f, width, 0.0f, height, zNear, zFar);
        return projectionMatrix;
    }

    public Matrix4f getModelMatrix(Vector3f offset, float angleZ, float scale) {
        modelMatrix.identity().translation(offset).rotate(angleZ, 0, 0, 0).scale(scale);
        return modelMatrix;
    }
}

Вот тест на столкновения:

 public boolean isIn(Pos p) {
        return (p.getX() >= this.pos.getX() &&
                p.getX() <= this.pos.getX() + DIMENSION)
                && (p.getY() >= this.pos.getY() &&
                p.getY() <= this.pos.getY() + DIMENSION);
}

Также есть ссылка на проект github: https://github.com/ShiroUsagi-san/opengl-engine.

Я действительно новичок в OpenGL 3, поэтому я мог сделать несколько действительно больших ошибок.

Я также использую i3 как WM, я не знаю, может ли это привести к такого рода проблемам.

1 Ответ

1 голос
/ 08 мая 2019

Я исправляю проблемы, подумав о том, как работают openGL и VBO: Действительно, я устанавливал новую ссылку для каждой сущности, поэтому мне пришлось изменить строку

Mesh fourmiMesh = MeshBuilder.buildRect(this.position.getX(), this.position.getY(), 10, 10);

до

Mesh fourmiMesh = MeshBuilder.buildRect(0, 0, 10, 10);

Это была путаница, которую я совершил между позициями вершины в VBO и позициями в моем мире. Надеюсь, что это неправильно понято помогает людям понять.

...