QOpenGLShaderProgram, 绘制一个空心矩形, 并在绘制时设定边框颜色
时间: 2023-05-23 12:02:29 浏览: 45
可以使用以下代码:
```
QOpenGLShaderProgram program;
program.addShaderFromSourceCode(QOpenGLShader::Vertex, vertexShaderCode);
program.addShaderFromSourceCode(QOpenGLShader::Fragment, fragmentShaderCode);
program.link();
program.bind();
float vertices[] = {
-0.5f, 0.5f, 0.0f,
0.5f, 0.5f, 0.0f,
0.5f, -0.5f, 0.0f,
-0.5f, -0.5f, 0.0f
};
unsigned int indices[] = {
0, 1, 1, 2, 2, 3, 3, 0
};
unsigned int VBO, VAO, EBO;
glGenVertexArrays(1, &VAO);
glGenBuffers(1, &VBO);
glGenBuffers(1, &EBO);
glBindVertexArray(VAO);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0);
glEnableVertexAttribArray(0);
glLineWidth(2.0f);
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
glDrawElements(GL_LINES, 8, GL_UNSIGNED_INT, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArray(0);
glUseProgram(0);
```
可以在 fragmentShaderCode 中添加以下代码来设定边框颜色:
```
layout(location = 0) out vec4 FragColor;
uniform vec4 borderColor;
void main()
{
if (gl_FragCoord.x <= 1.0 || gl_FragCoord.x >= (gl_RenderbufferWidth - 1.0) || gl_FragCoord.y <= 1.0 || gl_FragCoord.y >= (gl_RenderbufferHeight - 1.0))
{
FragColor = borderColor;
}
else
{
FragColor = vec4(1.0, 1.0, 1.0, 1.0);
}
}
```
然后在绘制之前添加以下代码来传递 borderColor 的值:
```
program.bind();
program.setUniformValue("borderColor", QVector4D(1.0f, 0.0f, 0.0f, 1.0f));
```
这里将边框设定为红色。