查看: 2117|回复: 1

updateCalculatedNearFar 的问题

[复制链接]

该用户从未签到

发表于 2008-10-30 10:33:06 | 显示全部楼层 |阅读模式
大家好,最近发现updateCalculatedNearFar 在osg:: Projection下似乎有点问题,整个场景里只有一个物体,却被cull掉了。
我在osg:: Projection下加了一个ShapeDrawable,当ShapeDrawable的坐标是负值时, 物体可以显示出来。为正值时显示不出来,但是如果坐标值减去球的半径小于0,也可以显示出来,如
osg::Vec3 position(0.1,0.1,0.1);
geode->addDrawable(new osg::ShapeDrawable(new osg::Sphere(position,0.1)));
可以显示出来

完整的代码如下,坐标值减去半径值大于0,什么也显示不出来,调试发现updateCalculatedNearFar 时物体被cull掉了。
osg::Node* createScene()
{  
osg::Geode* geode=new osg::Geode;
osg::Vec3 position(0.2,0.2,0.2);
geode->addDrawable(new osg::ShapeDrawable(new osg::Sphere(position,0.1)));

osg:: PositionAttitudeTransform * tran = new osg:: PositionAttitudeTransform;
tran->setReferenceFrame(osg::Transform::ABSOLUTE_RF);
tran->setPosition(osg::Vec3(5,5,0));
tran->addChild(geode);

osg:: Projection* ProjectionMatrix = new osg:: Projection;
ProjectionMatrix->setMatrix(osg::Matrix:: ortho2D(0,10,0,10));
ProjectionMatrix->addChild(tran);

return ProjectionMatrix;
}

int _tmain(int argc, _TCHAR* argv[])
{
    osgViewer::Viewer viewer;
    viewer.setSceneData(createScene());
    return viewer.run();
}
我怎样才能把物体显示出来呢,各位帮帮忙啊,谢了先。forest

[ 本帖最后由 array 于 2008-10-30 10:43 编辑 ]

该用户从未签到

发表于 2008-10-30 11:12:15 | 显示全部楼层
要显示出来的方法倒是不少,比如去掉这一行:
  1. tran->setReferenceFrame(osg::Transform::ABSOLUTE_RF);
复制代码
这个时候球会显示在右下角。

这个问题应该不是CULL的函数造成的,我想这跟Projection有关,您不如深入研究一下Projection类的实现机制,能发现一些不妥当的代码也说不定
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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