我正在绘制一个基本的矩形。
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);” 比它正确绘制。
因为您使用了错误的原始类型。如果要绘制2个三角形图元(按6个坐标),则必须使用三角形图元类型 GL_TRIANGLES
:
glDrawArrays(GL_TRIANGLE_STRIP, 0, 6);
glDrawArrays(GL_TRIANGLES, 0, 6);
对于2个三角形乘以GL_TRIANGLE_STRIP
,四个坐标就足够了:
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);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句