【问题标题】:Stroke is not drawn correctly (OpenGL)未正确绘制笔画 (OpenGL)
【发布时间】:2021-04-10 05:52:17
【问题描述】:

我正在尝试在我的世界游戏中为胸部画笔,我几乎成功了,但由于某种原因它没有正确绘制。

ScreenShot

屏幕截图显示了该行的一部分是如何消失的。当线在胸部时会发生这种情况。也许它是纹理映射或其他东西。在这种情况下,笔划是通过块正常绘制的。

ScreenShot2

另外,当胸部处于黑暗中时,轮廓会变暗,虽然我关闭了 GL_LIGHTING

ScreenShot3

这是我用来绘制笔画的一段代码

glPushAttrib(GL_ALL_ATTRIB_BITS);

glDisable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, 0);
glDisable(GL_CULL_FACE);
glDisable(GL_LIGHTING);

glDisable(GL_DEPTH_TEST);

glLineWidth(2);
glColor3ub(255, 255, 255);

glBegin(GL_LINES);
glVertex3f(1, 0, 0);
glVertex3f(1, -1, 0);

glVertex3f(0, 0, 0);
glVertex3f(1, 0, 0);

glVertex3f(0, 0, 0);
glVertex3f(0, -1, 0);

glVertex3f(0, -1, 0);
glVertex3f(1, -1, 0);

glVertex3f(1, -1, 0);
glVertex3f(1, -1, -1);

glVertex3f(1, -1, -1);
glVertex3f(1, 0, -1);

glVertex3f(1, -1, -1);
glVertex3f(0, -1, -1);

glVertex3f(0, -1, -1);
glVertex3f(0, -1, 0);

glVertex3f(0, -1, -1);
glVertex3f(0, 0, -1);

glVertex3f(0, 0, -1);
glVertex3f(1, 0, -1);

glVertex3f(0, 0, -1);
glVertex3f(0, 0, 0);

glVertex3f(1, 0, -1);
glVertex3f(1, 0, 0);

glEnd();

glPopAttrib();

有什么问题?

【问题讨论】:

    标签: c++ opengl


    【解决方案1】:

    从你的截图看来,渲染顺序如下:

    1. 地形
    2. 大纲

    现在,由于您在第 2 步中禁用了GL_DEPTH_TEST,因此变为白色的片段(像素)(绘制轮廓的片段)不会更新其深度信息。这是因为禁用GL_DEPTH_TEST 不仅会禁用深度测试,还会禁用更新片段的深度信息。

    因此,当您最终绘制胸部时(重新启用深度测试),它将绘制在深度值表明它们在其后面的所有片段上。这意味着,也在绘制轮廓的片段上。

    第三张截图中的黑色轮廓可能是您致电glBindTexture(GL_TEXTURE_2D, 0);造成的。但这只是一种预感。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-17
    • 2021-08-16
    • 1970-01-01
    • 2017-02-26
    • 1970-01-01
    相关资源
    最近更新 更多