我试图在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();
可能出了什么问题?
从屏幕截图来看,渲染顺序如下:
- 地形
- 大纲
- 胸部
现在,由于在步骤2中禁用了GL_DEPTH_TEST
,变白的片段(像素((绘制轮廓的片段(将不会更新其深度信息。这是因为禁用GL_DEPTH_TEST
不仅禁用深度测试,还禁用更新片段的深度信息。
因此,当你最终绘制胸部时(重新启用深度测试(,它将被绘制在所有深度值表明它们在它后面的碎片上。这意味着,也会被绘制轮廓的碎片上绘制。
第三张屏幕截图上轮廓的黑色可能是由于您对glBindTexture(GL_TEXTURE_2D, 0);
的调用造成的。但这只是一种预感。