我要发帖 回复

新手上路

3

主题

18

积分

0

专家分

:

私信
发表时间 : 2008-12-1 16:22:10 | 浏览 : 2568    评论 : 3
我是osg新手,请问如何改变导入的3D模型的大小和位置?每次导入时不管我怎么改,模型总是位于视口中央,不知如何改变,望高手指点,万分感谢!

最近VR访客

amen.w 评论于2008-12-1 16:49:49
我仅仅将《快速入门指导》中picking例子中osgDB::readNodeFile( "cow.osg" );改成了osgDB::readNodeFile( "bone.3ds" );其他地方都没变,结果模型便居中显示了,不知如何?教程中只是简单说了一下可用类PseudoLoader改变,但怎样设置参数?顺便请教一下怎样看osg中预先定义好的类,比如想看看类PseudoLoader是如何定义的,我对c++不十分精通。万分感谢!!!
amen.w 评论于2008-12-1 16:51:12
picking原程序如下:
createScene()
{
    // Load the cow model.
    osg::ref_ptr<osg::Node> cow = osgDB::readNodeFile( "cow.osg" );
    if (!cow.valid())
    {
        osg::notify( osg::FATAL ) << "Unable to load data file. Exiting." << std::endl;
        return NULL;
    }
    // Data variance is STATIC because we won't modify it.
    cow->setDataVariance( osg::Object::STATIC );

    // Create a MatrixTransform to display the cow on the left.
    osg::ref_ptr<osg::MatrixTransform> mtLeft =
            new osg::MatrixTransform;
    mtLeft->setName( "Left Cow" );
    mtLeft->setDataVariance( osg::Object::STATIC );
    osg::Matrix m;
    m.makeTranslate( -6.f, 0.f, 0.f );
    mtLeft->setMatrix( m );

    osg::ref_ptr<osg::MatrixTransform> mt =
            new osg::MatrixTransform;
    mt->setName( "Left Rotation" );
    mt->setDataVariance( osg::Object::STATIC );
    m.makeIdentity();
    mt->setMatrix( m );

    mtLeft->addChild( mt.get() );
    mt->addChild( cow.get() );

    // Create a MatrixTransform to display the cow on the right.
    osg::ref_ptr<osg::MatrixTransform> mtRight =
            new osg::MatrixTransform;
    mtRight->setName( "Right Cow" );
    mtRight->setDataVariance( osg::Object::STATIC );
    m.makeTranslate( 6.f, 0.f, 0.f );
    mtRight->setMatrix( m );

    mt = new osg::MatrixTransform;
    mt->setName( "Right Rotation" );
    mt->setDataVariance( osg::Object::STATIC );
    m.makeIdentity();
    mt->setMatrix( m );

    mtRight->addChild( mt.get() );
    mt->addChild( cow.get() );

    // Create the Group root node.
    osg::ref_ptr<osg::Group> root = new osg::Group;
    root->setName( "Root Node" );
    // Data variance is STATIC because we won't modify it.
    root->setDataVariance( osg::Object::STATIC );
    root->addChild( mtLeft.get() );
    root->addChild( mtRight.get() );

    return root.get();
}
FlySky 评论于2008-12-2 01:58:44
不太明白你的具体意思,,,,,不过,它默认采用是TrackballManipulator类,,,,因此,,根据包围盒计算中心,,,开始的时候肯定会居中显示~~~~~~~

你也可以通过位置变换节点来设置位置,,不过,,需要一个参考物~~~~~~你可以自己写一个操作器,,然后就可以设置位置了~~~~~~~~~~~

OSG中国官方网站:http://www.osgChina.org
OSG中国官方讨论区:http://bbs.osgChina.org

OSG专业群-OSG地形研究者 49668412
      OSG地形专业研究 45763709

手机版|VR开发网 ( 津ICP备18009691号 ) 统计 网安备12019202000257

GMT+8, 2020-10-23 06:38 PM

返回顶部