线环的背面剔除
Back Face Culling for Line Loop
我正在使用 z-buffer 渲染我的 3D 三角形网格。然而,当我将模型渲染为线框网格时,我还看到了本应被正面隐藏的三角形面。所以,我使用背面剔除如下:
glEnable(GL_CULL_FACE);
glCullFace(GL_BACK);
drawWireFrame();
glDisable(GL_CULL_FACE);
drawWireFrame函数如下:
void drawWireFrame()
{
int i, j;
glColor3d(1., 0., 0.);
HE_edge *curr;
for (int i = 0; i < he_f_count; i++)
{
glBegin(GL_LINE_LOOP);
curr = m_HE_face[i].edge;
glNormal3f(curr->prev->vert->vnx, curr->prev->vert->vny, curr->prev->vert->vnz);
glVertex3f(curr->prev->vert->x, curr->prev->vert->y, curr->prev->vert->z);
glNormal3f(curr->vert->vnx, curr->vert->vny, curr->vert->vnz);
glVertex3f(curr->vert->x, curr->vert->y, curr->vert->z);
glNormal3f(curr->next->vert->vnx, curr->next->vert->vny, curr->next->vert->vnz);
glVertex3f(curr->next->vert->x, curr->next->vert->y, curr->next->vert->z);
glEnd();
}
}
但是,我仍然得到与添加背面剔除之前相同的结果。你能帮我确定我在这里遗漏了什么吗?
谢谢。
线条没有正面和背面 - 线条根本没有面。背面剔除仅适用于定义面的基元类型,即三角形(以及基于三角形的基元,如条带和扇形),并且对于已弃用的 GL,还适用于基于四边形的基元和多边形。
如果你想要这种图元的线框图,你可以直接将它们画成三角形(或其他类型)并设置glPolygonMode(GL_FRONT_AND_BACK, GL_LINE)
以获得线框可视化。在这种情况下,背面剔除将产生预期的效果。另请注意,设置glPolygonMode
就足够了,因此您不需要线框和实体渲染的不同绘制方法。
我正在使用 z-buffer 渲染我的 3D 三角形网格。然而,当我将模型渲染为线框网格时,我还看到了本应被正面隐藏的三角形面。所以,我使用背面剔除如下:
glEnable(GL_CULL_FACE);
glCullFace(GL_BACK);
drawWireFrame();
glDisable(GL_CULL_FACE);
drawWireFrame函数如下:
void drawWireFrame()
{
int i, j;
glColor3d(1., 0., 0.);
HE_edge *curr;
for (int i = 0; i < he_f_count; i++)
{
glBegin(GL_LINE_LOOP);
curr = m_HE_face[i].edge;
glNormal3f(curr->prev->vert->vnx, curr->prev->vert->vny, curr->prev->vert->vnz);
glVertex3f(curr->prev->vert->x, curr->prev->vert->y, curr->prev->vert->z);
glNormal3f(curr->vert->vnx, curr->vert->vny, curr->vert->vnz);
glVertex3f(curr->vert->x, curr->vert->y, curr->vert->z);
glNormal3f(curr->next->vert->vnx, curr->next->vert->vny, curr->next->vert->vnz);
glVertex3f(curr->next->vert->x, curr->next->vert->y, curr->next->vert->z);
glEnd();
}
}
但是,我仍然得到与添加背面剔除之前相同的结果。你能帮我确定我在这里遗漏了什么吗?
谢谢。
线条没有正面和背面 - 线条根本没有面。背面剔除仅适用于定义面的基元类型,即三角形(以及基于三角形的基元,如条带和扇形),并且对于已弃用的 GL,还适用于基于四边形的基元和多边形。
如果你想要这种图元的线框图,你可以直接将它们画成三角形(或其他类型)并设置glPolygonMode(GL_FRONT_AND_BACK, GL_LINE)
以获得线框可视化。在这种情况下,背面剔除将产生预期的效果。另请注意,设置glPolygonMode
就足够了,因此您不需要线框和实体渲染的不同绘制方法。