opengl中如何判断网格模型中哪些顶点在可见面上?

icethawless 2008-03-16 03:06:14
场景中有一3d网格模型
我想用鼠标拉一个矩形框选择可见面上某些点
但不想背面的点也被选中
请问具体怎么做?

我试过用顶点的法线向量,判断其是否与当前视点的方向夹角<90度
但这种方法在面对复杂网格模型时,会有选择上的误差

我还想用深度缓存的方法,读取每一个网格模型顶点的窗口坐标,然后读取相应点的深度值,与顶点的深度值做对比,但实现的效果不对,不知道哪儿出错了,请帮忙看一下:
//GLfloat winZ = 0.0f; //用来保存windows窗口坐标(wx,wy)处的深度值(0-1之间)
//
//glReadPixels(wx, //x坐标
// viewport[3] - wy, //y坐标
// 1,1, //读取一个像素
// GL_DEPTH_COMPONENT, //获得深度信息
// GL_FLOAT, //数据类型为浮点型
// &winZ); //获得的深度值保存在winZ中
//
////判断该点深度值是否与深度缓存中的值一致
//if((float)winZ <= (float)wz)
// _mesh->_vertexlist[i].setSelected(true);
//else
// _mesh->_vertexlist[i].setSelected(false);


...全文
148 2 打赏 收藏 转发到动态 举报
写回复
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
icethawless 2008-03-16
  • 打赏
  • 举报
回复
我试过判断顶点的深度与深度缓存值之差是否小于一个极小值(比如,1e-15)
可还是有问题,背面的点还是会被选中

如果深度缓存不行,那应该用什么方法做呢?
Pause_break 2008-03-16
  • 打赏
  • 举报
回复
深度缓存里面所存的深度值经过规格化,好像是由于精度等原因与实际值有些差异,因此读取深度缓存里面的值与实际值做比较结果会有很大误差。
相关推荐

19,446

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告