gpt4 book ai didi

qt - 使用 opengl 绘制多个项目(现代)

转载 作者:行者123 更新时间:2023-12-04 18:30:59 24 4
gpt4 key购买 nike

关于 QtOpenGLWidget drawing triangle 的后续问题

我想画一个三角形和一些线,我写了这段代码(在 stackoverflow 社区的人们的大力帮助下)它画了三角形和线。但是,当我想同时绘制三角形和线条时,却看不到线条。

  GLfloat vertices[] = { 0.0f, 0.707f, 0.5f, -0.5f, -0.5f, 0.5f, 0.5f, -0.5f, 0.5f };
GLfloat colors[] = { 1.f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f};
shader->setAttributeArray(posAttribute, vertices, 3, 0);
shader->setAttributeArray(colAttribute, colors, 3, 0);
glEnableVertexAttribArray(posAttribute);
glEnableVertexAttribArray(colAttribute);
glDrawArrays(GL_TRIANGLES, 0, 3);
glDisableVertexAttribArray(posAttribute);
glDisableVertexAttribArray(colAttribute);

GLfloat lvertices[] = { 0.907f, 0.907f, 0.5f, -0.957f, -0.957f, 0.5f };
GLfloat lcolors[] = { 1.0f, 0.0f, 0.0f, 1.0f, .0f , 0.0f};
shader->setAttributeArray(posAttribute, lvertices, 3, 0);
shader->setAttributeArray(colAttribute, lcolors, 3, 0);
//glLineWidth(.03f);
glDrawArrays(GL_LINE_STRIP, 0, 6);
glDisableVertexAttribArray(posAttribute);
glDisableVertexAttribArray(colAttribute);

我做错了什么?

最佳答案

绘制多边形后,禁用顶点属性 ( glDisableVertexAttribArray ),但在绘制线条之前不再启用它们。

在绘制多边形后跳过禁用顶点属性来解决问题。


此外,默认深度函数 (glDepthFunc) 是 GL_LESS。如果启用了深度测试,则丢弃一个片段,如果之前在相同位置绘制了一个片段,其深度(z 坐标)小于或等于新片段的深度。这意味着该片段被前一个片段覆盖。

如果您希望线条始终绘制在多边形之上,则必须在绘制线条之前禁用深度测试。

// clear color buffer and depth buffer
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

// enable the depth test
glEnable(GL_DEPTH_TEST);

// enable vertex attributes
glEnableVertexAttribArray(posAttribute);
glEnableVertexAttribArray(colAttribute);

// draw the polygons
GLfloat vertices[] = { 0.0f, 0.707f, 0.5f, -0.5f, -0.5f, 0.5f, 0.5f, -0.5f, 0.5f };
GLfloat colors[] = { 1.f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f};
shader->setAttributeArray(posAttribute, vertices, 3, 0);
shader->setAttributeArray(colAttribute, colors, 3, 0);
glDrawArrays(GL_TRIANGLES, 0, 3);

// disable the depth test
glDisable(GL_DEPTH_TEST);

// draw the lines
GLfloat lvertices[] = { 0.907f, 0.907f, 0.5f, -0.957f, -0.957f, 0.5f };
GLfloat lcolors[] = { 1.0f, 0.0f, 0.0f, 1.0f, .0f , 0.0f};
shader->setAttributeArray(posAttribute, lvertices, 3, 0);
shader->setAttributeArray(colAttribute, lcolors, 3, 0);
glDrawArrays(GL_LINE_STRIP, 0, 6);

// disable vertex attributes
glDisableVertexAttribArray(posAttribute);
glDisableVertexAttribArray(colAttribute);

关于qt - 使用 opengl 绘制多个项目(现代),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52037712/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com