gpt4 book ai didi

opengl - 在 OpenGL 中,是否可以只绘制未被遮挡的三角形的边?

转载 作者:行者123 更新时间:2023-12-05 02:37:52 24 4
gpt4 key购买 nike

我有一个网格要用 OpenGL 渲染。我想要的是渲染它的边缘,但只渲染那些未被遮挡的面孔。但是,我意识到只有这样是不可能的:

glEnable(GL_DEPTH_TEST);    // Enable depth test
glDepthFunc(GL_LEQUAL); // Accept fragment if it closer to the camera than the former one
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);

由于边缘之间没有深度信息,所以被遮挡的三角形的边缘仍然被渲染。

解决方法是先使用 GL_FILL 以背景色(在我的例子中为白色)绘制三角形,然后分别绘制边。但这样做会导致类似于 z-fighting 现象的伪影,即一些边缘看起来比其他边缘更薄甚至消失,如下所示

enter image description here

左边是我拥有的,右边是我想要的(在 MeshLab 中查看)。由于在这种情况下三角形的深度测试似乎是不可避免的,我想我也在问:

如何在没有 z-fighting 伪影的情况下在三角形上绘制边?

请注意,人脸剔除没有用,因为它只会消除面向后方的人脸,而不能处理遮挡。

最佳答案

使用 glPolygonOffset 设置第一遍的多边形偏移量:

glEnable(GL_POLYGON_OFFSET_FILL);
glPolygonOffset(1, 1);

禁用第二遍的多边形偏移:

glDisable(GL_POLYGON_OFFSET_FILL);

多边形填充偏移以最小量操纵片段的深度。这导致第一遍中片段的深度略大于第二遍中相同片段的深度。这就是您摆脱深层冲突的方法。

关于opengl - 在 OpenGL 中,是否可以只绘制未被遮挡的三角形的边?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69881550/

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