OpenGL-反剔除-深度缓冲区值
这里有两张相同3D场景的图像,分别来自同一视角(虚拟摄影机),有无背景剔除。这些图像并不描绘最终的网格,而是深度缓冲区的内容 不进行反剔除OpenGL-反剔除-深度缓冲区值,opengl,depth-buffer,Opengl,Depth Buffer,这里有两张相同3D场景的图像,分别来自同一视角(虚拟摄影机),有无背景剔除。这些图像并不描绘最终的网格,而是深度缓冲区的内容 不进行反剔除 glDisable(GL_CULL_FACE); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); glEnable(GL_DEPTH_TEST); glDepthMask(GL_TRUE); glDepthFunc(GL_LESS); glEnable(GL_CULL_FACE); glPolygonMode(GL_F
glDisable(GL_CULL_FACE);
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
glEnable(GL_DEPTH_TEST);
glDepthMask(GL_TRUE);
glDepthFunc(GL_LESS);
glEnable(GL_CULL_FACE);
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
glEnable(GL_DEPTH_TEST);
glDepthMask(GL_TRUE);
glDepthFunc(GL_LESS);
带回选功能
glDisable(GL_CULL_FACE);
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
glEnable(GL_DEPTH_TEST);
glDepthMask(GL_TRUE);
glDepthFunc(GL_LESS);
glEnable(GL_CULL_FACE);
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
glEnable(GL_DEPTH_TEST);
glDepthMask(GL_TRUE);
glDepthFunc(GL_LESS);
问题
它们之所以不同,是因为你剔除了错误的面孔。网格数据方向清晰,因此正面不同于OpenGL的默认值。OpenGL默认为逆时针方向为正。网格数据将顺时针面放在前面(或者在某个点反转网格)
因此,与其重新排列顶点数据,不如使用更改正面。它们是不同的,因为您剔除了错误的面。网格数据方向清晰,因此正面不同于OpenGL的默认值。OpenGL默认为逆时针方向为正。网格数据将顺时针面放在前面(或者在某个点反转网格)
因此,不必重新排列顶点数据,而是使用更改正面。事实上@Nicolas,通过检查网格,后表面顶点具有相似的深度(与前表面顶点相比),但我没有想到您的建议。非常感谢,它很有效!刚刚在我上面提到的代码行上方添加了建议的命令:)还要注意,您也可以使用glCullFace。这会改变你是剔除正面还是背面(或者两者都剔除)。事实上@Nicolas,通过检查网格,背面顶点具有相似的深度(与正面顶点相比),但我没有想到你的建议。非常感谢,它很有效!刚刚在我上面提到的代码行上方添加了建议的命令:)还要注意,您也可以使用glCullFace。这将更改是否剔除正面或背面(或两者)。