Я пытаюсь сделать 2D-игру с OpenGL (Pong), чтобы попробовать API. Я следую этому уроку В уроке говорится, что если я хочу использовать "пиксельные" координаты (экранные координаты) вместо стандартных OpenGL-координат [-1; 1], я должен использовать glm :: ortho (), но всякий раз, когда я использую его, все мои игровые объекты исчезают. Я пробовал много параметров на glm :: ortho, но ни один из них не работал.
Вот часть моего кода:
// GameObject.cpp
...
// Draws the game object
void GameObject::render(glm::vec2 position, glm::vec2 size)
{
// Member model matrix
_model = glm::mat4(1.f);
_model = glm::translate(_model, glm::vec3(position, 0.f));
_model = glm::translate(_model, glm::vec3(0.5f * size.x, 0.5f * size.y, 0.f));
_model = glm::rotate(_model, glm::radians(_rotation.x), glm::vec3(1.f, 0.f, 0.f));
_model = glm::rotate(_model, glm::radians(_rotation.y), glm::vec3(0.f, 1.f, 0.f));
_model = glm::rotate(_model, glm::radians(_rotation.z), glm::vec3(0.f, 0.f, 1.f));
_model = glm::translate(_model, glm::vec3(-0.5f * size.x, -0.5f * size.y, 0.0f));
_shader.set_mat4("model", _model);
glBindVertexArray(_VAO);
// Draws a rectangular shape
glDrawArrays(GL_TRIANGLES, 0, 6);
glBindVertexArray(0);
}
...
// main.cpp
...
Shader _shader("./res/shaders/test.vert", "./res/shaders/test.frag");
Quad q;
glm::mat4 projection(1.f);
// 800x600 is the window size
projection = glm::ortho(0.f, 800.f, 600.f, 0.f, -1.0f, 1.0f);
_shader.set_mat4("projection", projection);
GameObject ob(q, _shader);
while (!glfwWindowShouldClose(window))
{
...
// (I use the shader above)
// Draws the quad
ob.render(glm::vec2(0.f, 0.f), glm::vec2(400.f, 200.f));
}