查看: 1572|回复: 3

忘记了一个选项怎么关闭,就是那个自动隐藏过小物体的那个……

[复制链接]

该用户从未签到

发表于 2009-12-28 21:34:44 | 显示全部楼层 |阅读模式
本帖最后由 小行星 于 2009-12-28 21:40 编辑

使用“太小,过小,隐藏,剔除……”等关键字都搜索不到,看Camera和Viewer还有Node里面的函数也没有很像的,但我记得array提过有这么个东西……还请赐教,谢谢!

问题来源:从osg::Geometry派生类实现一些线条绘制,我把这个类的代码简化如下

class Item : public osg::Geometry
{
  // ......
}

Item::Item()
{
  _vertices = new osg::Vec3Array( 2 );

  // 暂时跳过颜色法线什么的,我只画两点一线
  setVertexArray( _vertices );

  // 这里暂时固定
  addPrimitiveSet( new osg:rawArrays( osg:rimitiveSet:INES, 0, 2 );

  // 使用这些选项
  setDataVariance( Object::DYNAMIC );
  setSupportsDisplayList( false );
  setUseVertexBufferObjects( true );
);


这是一个Set函数
void Item::Set( const osg::Vec3& v1, const osg::Vec3& v2 )
{
  ( *_vertices )[0] = v1;
  ( *_vertices )[1] = v2;

  _vertices->dirty();
}


但在最初的时候_vertices里面顶点的值都是( 0, 0, 0 ),结果屏幕上啥都没有,我后来又试着在一开始就赋一些非零值,比如在构造函数中最后一行添加Set( osg::Vec3( 10.0f, 0.0f, 0.0f ), osg::Vec3() );立刻就好了,并且这个值还不能太小,我把那个10改为1就没有了……我就下意识想到是不是我最开头提出的那个问题……

该用户从未签到

发表于 2009-12-29 08:27:53 | 显示全部楼层
SMALL_FEATURE_CULLING

要关闭它的话,可以直接
  1. camera->setCullingMode->( camera->getCullingMode() & ~SMALL_FEATURE_CULLING) );
复制代码

该用户从未签到

发表于 2009-12-29 09:18:51 | 显示全部楼层
试试指定个初始的包围盒 setInitialBound
另外在Item::Set中应该dirtyBound

该用户从未签到

 楼主| 发表于 2009-12-29 17:26:38 | 显示全部楼层
谢谢array,这个选项我记住了。

:D谢谢indif的答案,我在构造函数中添加了setInitialBound( osg::BoundingBox( 0, 0, 0, 0, 0, 1 ) ),Set函数中添加了dirtyBound(),现在可以画出来了,但是由于使用了setUseVertexBufferObjects( true ),貌似把_vertices->dirty()去掉也画不出来,所以我又加上了,嘿嘿~

谢谢二位,谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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