查看: 3352|回复: 4

背面剔除不成功

[复制链接]

该用户从未签到

发表于 2009-3-15 15:58:24 | 显示全部楼层 |阅读模式
在用osg::Geomtry绘制球形模型时,如果控制点间隔1°时,绘制过程就会很慢,想用背面剔除方法。但设置各点的法线只能改变线框的光照效果,却不能进行背面剔除,请问array该怎么办,谢谢

该用户从未签到

发表于 2009-3-15 17:16:52 | 显示全部楼层
如果方便的话,能否提供一些工程代码呢?我并不知道您是如何实现绘制的,因此也无法给您提供更多的信息

该用户从未签到

 楼主| 发表于 2009-3-15 22:50:04 | 显示全部楼层
osg::Geometry* geom = new osg::Geometry();

osg::Vec3Array* v = new osg::Vec3Array;
osg::Vec4Array* c = new osg::Vec4Array;
osg::Vec3Array* n = new osg::Vec3Array;

//设置顶点
for(int i = 0;i<1000;i++)
{
  for(int j = 0;j<1000;j++)
    {
      v->push_back(...);
     }
}

//设置色彩
c->push_back(osg::Vec3(1.0,1.0,1.0,1.0));

//设置法线
n->push_back(osg::Vec3(0,-1,0));

geom->setVertexArray(v);
...
geom->setColorArray(c);
...
geom->setNormal(n);
...
绘制模式为LINE_LOOP;

上面把代码简略写了一下,不知道能不能明白呵呵,本来想通过设置法向量进行背面剔除;但结果只是改变了背面的光照效果。
如何才能做到背面剔除呢,也就是当视点转到线框后面时,线框不进行绘制。

该用户从未签到

发表于 2009-3-15 23:06:06 | 显示全部楼层
背面剔除的概念是:把顶点逆时针绘制形成的图元视为“正面”的话,那么相应地选择不绘制它的“背面”,从而加快场景渲染的速度。OpenGL中可以执行背面剔除的图元包括:三角形、矩形以及多边形。
因此,线段是不支持背面剔除的,因为它不存在“背面”的概念,如果您想实现类似“视点转到线框后面时,线框不进行绘制”的功能的话,只有自己编写代码判断视点并决定是否继续遍历节点和绘制

该用户从未签到

 楼主| 发表于 2009-3-17 20:46:32 | 显示全部楼层
回去试一下,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表