【问题标题】:Why isn't OpenGL drawing anything as soon as I use an orthographic projection matrix?为什么一旦我使用正交投影矩阵,OpenGL 就不会绘制任何东西?
【发布时间】:2021-04-15 02:33:55
【问题描述】:

当我使用投影矩阵时

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++ opengl glsl shader glm-math


    【解决方案1】:

    我发现了问题。 应该是:

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

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

    【讨论】:

      猜你喜欢
      • 2017-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-06
      • 1970-01-01
      • 2012-02-27
      • 2019-08-10
      • 1970-01-01
      相关资源
      最近更新 更多