线循环的背面消隐
Back Face Culling for Line Loop
我正在使用z缓冲区来渲染我的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
就足够了,因此线框渲染和实体渲染不需要不同的绘制方法。
相关文章:
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 复制列表初始化的隐式转换的等级是多少
- 生成文件不对文件使用隐式规则
- 不能将复制初始化与隐式转换的多个步骤一起使用
- 返回值优化:显式移动还是隐式
- 隐式常量/非常量运算符布尔
- 如何在GTK程序运行时禁用屏幕保护程序/电源管理/屏幕消隐
- 逐位操作的隐式类型转换
- 返回时不允许隐式转换
- 尝试使用算术运算符阻止隐式转换
- 获取隐式转换溢出从无符号到已签名的警告
- 我可以在这里替换什么,因为我不能在 C# 中使用隐式变量的 lambda 函数?
- 我是否需要包含隐式使用/与 WindowsAPI 通信"Windows.h"?
- C++ G++ 编译器 - 错误:隐式声明的定义
- C++初始化类实例时隐式调用类成员的构造函数
- 隐式调用的含义是什么?
- 在C++中检测意外的消隐维度
- 线循环的背面消隐
- C/C++OpenGL遮挡消隐