首页 > 解决方案 > 为什么一旦我使用正交投影矩阵,OpenGL 就不会绘制任何东西?

问题描述

当我使用投影矩阵作为

glm::mat4 projection(1.0f);

一切正常,它画了一个矩形,但只要我使用

glm::mat4 projection = glm::ortho(0.0f, 800.0f, 600.0f, 0.0f, -1.0f, 1.0f);

我不再画任何东西了。

你知道为什么吗?

这是我的渲染器代码:

void Renderer::renderRect(Shader& shader, glm::vec2 pos, glm::vec2 size, glm::vec3 color, float rotation, float opacity) {
    shader.use();

    glm::mat4 model(1.0f);

    glm::translate(model, glm::vec3(pos, 0.0f));

    glm::scale(model, glm::vec3(size, 1.0f));

    glm::mat4 view(1.0f);

    glm::mat4 projection = glm::ortho(0.0f, 800.0f, 600.0f, 0.0f, -1.0f, 1.0f);
    //glm::mat4 projection(1.0f);

    shader.setMat4("model", model);
    shader.setMat4("view", view);
    shader.setMat4("projection", projection);

    shader.setVec4("color", glm::vec4(color, opacity));

    glBindVertexArray(quadVAO);
    glDrawArrays(GL_TRIANGLES, 0, 6);
    glBindVertexArray(0);
}

我不确定问题到底出在哪里,但也许它与我的顶点着色器有关:

#version 330 core

layout (location = 0) in vec2 pos;

uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;

void main()
{
    gl_Position = projection * view * model * vec4(pos.xy, 0.0, 1.0);
}

renderRect 函数由以下方式调用:

renderer->renderRect(shader, glm::vec2(200.0f, 200.0f), glm::vec2(300.0f, 300.0f), glm::vec3(0.0f, 0.0f, 1.0f));

顶点是:

float vertices[]{
        0.0f, 1.0f,
        1.0f, 0.0f,
        0.0f, 0.0f,

        0.0f, 1.0f, 
        1.0f, 0.0f,
        1.0f, 1.0f
    };

标签: c++openglglslshaderglm-math

解决方案


我发现了问题。它应该是:

model = glm::translate(model, glm::vec3(pos, 0.0f));
model = glm::scale(model, glm::vec3(size, 1.0f));

否则模型矩阵不会被平移和缩放。


推荐阅读