笔划绘制不正确(OpenGL)



我试图在minecraft游戏中为胸部划水,我几乎成功了,但由于某些原因,划水不正确。

屏幕截图

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

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

可能出了什么问题?

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

  1. 地形
  2. 大纲
  3. 胸部

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

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

第三张屏幕截图上轮廓的黑色可能是由于您对glBindTexture(GL_TEXTURE_2D, 0);的调用造成的。但这只是一种预感。

最新更新