OpenGL glm :: ortho () скрывает все мои игровые объекты в 2D игре - PullRequest
0 голосов
/ 14 апреля 2020

Я пытаюсь сделать 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));
    }
...