【问题标题】:Why does the rectangle have two different shades为什么长方形有两种不同的阴影
【发布时间】:2020-05-10 06:56:41
【问题描述】:

我正在绘制一个基本的矩形。

void renderQuad()
{
    if (quadVAO == 0)
    {
        float quadVertices[] = { // vertex attributes for a quad that fills the entire screen in Normalized Device Coordinates.
        // positions   // texCoords
        -1.0f,  1.0f,  0.0f, 1.0f,
        -1.0f, -1.0f,  0.0f, 0.0f,
         1.0f, -1.0f,  1.0f, 0.0f,

        -1.0f,  1.0f,  0.0f, 1.0f,
         1.0f, -1.0f,  1.0f, 0.0f,
         1.0f,  1.0f,  1.0f, 1.0f
        };
        //  VAO
        glGenVertexArrays(1, &quadVAO);
        glGenBuffers(1, &quadVBO);
        glBindVertexArray(quadVAO);
        glBindBuffer(GL_ARRAY_BUFFER, quadVBO);
        glBufferData(GL_ARRAY_BUFFER, sizeof(quadVertices), &quadVertices, GL_STATIC_DRAW);
        glEnableVertexAttribArray(0);
        glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(float), (void*)0);
        glEnableVertexAttribArray(1);
        glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(float), (void*)(2 * sizeof(float)));
    }
    glBindVertexArray(quadVAO);
    glDrawArrays(GL_TRIANGLE_STRIP, 0, 6);
    glBindVertexArray(0);
}

这是我绘制矩形的渲染函数。

void RenderThread()
{   
    Shader shader("C:\\Shaders\\Screen\\Vert.txt", "C:\\Shaders\\Screen\\Frag.txt");
    glDisable(GL_DEPTH_TEST);
    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    shader.use();
    while (!glfwWindowShouldClose(window))
    {
        glClearColor(0.0, 0.0, 0.0, 0.0);
        glClear(GL_COLOR_BUFFER_BIT );
        processInput(window);
        renderQuad();       
        glfwSwapBuffers(window);
        glfwPollEvents();
    }
}

这些是着色器。

顶点着色器

#version 330 core
layout( location = 0 ) in vec2 aPos;
layout( location = 1) in vec2 aTexCoord;

out vec2 TexCoord;

void main()
{
   TexCoord = aTexCoord;
   gl_Position =  vec4( aPos , 0.0 ,  1.0 );
}

片段着色器

#version 330 core
in vec2 TexCoord;
out vec4 OutColor;
void main()
{

   OutColor = vec4( 0.5 , 0.0 , 0.0 , 0.3);
}

矩形是用两种不同的阴影绘制的。

如果我删除这一行“glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);”比它被正确绘制。

【问题讨论】:

    标签: opengl glsl


    【解决方案1】:

    因为你使用了错误的原始类型。如果要绘制 2 个三角形图元(按 6 个坐标),则必须使用 triangle primitive type GL_TRIANGLES

    glDrawArrays(GL_TRIANGLE_STRIP, 0, 6);

    glDrawArrays(GL_TRIANGLES, 0, 6); 
    

    GL_TRIANGLE_STRIP 的 2 个三角形,4 个坐标就足够了:

    float quadVertices[] = {
            // positions   // texCoords
            -1.0f,  1.0f,  0.0f, 1.0f,
            -1.0f, -1.0f,  0.0f, 0.0f,
    
             1.0f,  1.0f,  1.0f, 1.0f,
             1.0f, -1.0f,  1.0f, 0.0f,
    };
    
    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-15
      • 2012-11-14
      • 2010-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多