Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 笔划绘制不正确(OpenGL)_C++_Opengl - Fatal编程技术网

C++ 笔划绘制不正确(OpenGL)

C++ 笔划绘制不正确(OpenGL),c++,opengl,C++,Opengl,我试图在一场雷击游戏中击中胸部,我几乎成功了,但由于某些原因,它画得不正确 屏幕截图显示了线路的一部分是如何消失的。当线在胸部时,就会发生这种情况。可能是纹理贴图或其他东西。在这种情况下,笔划通常通过块绘制 此外,当胸部处于黑暗中时,轮廓变暗,尽管我关闭了GL_照明 下面是一段代码,我用它来画笔划 glPushAttrib(GL_ALL_ATTRIB_BITS); glDisable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, 0); glD

我试图在一场雷击游戏中击中胸部,我几乎成功了,但由于某些原因,它画得不正确

屏幕截图显示了线路的一部分是如何消失的。当线在胸部时,就会发生这种情况。可能是纹理贴图或其他东西。在这种情况下,笔划通常通过块绘制

此外,当胸部处于黑暗中时,轮廓变暗,尽管我关闭了GL_照明

下面是一段代码,我用它来画笔划

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();

可能有什么问题?

从您的屏幕截图来看,渲染顺序如下:

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

    因此,当您最终绘制胸部(重新启用深度测试)时,它将绘制在所有碎片上,这些碎片的深度值指示它们在胸部后面。也就是说,在画轮廓的碎片上


    第三个屏幕截图上轮廓的黑色可能是由调用
    glBindTexture(GL_TEXTURE_2D,0)引起的。但这只是一种预感。

    评论不是为了进行深入讨论;这段对话已经结束。