查看: 1548|回复: 6

场景中模型变换的问题

[复制链接]

该用户从未签到

发表于 2009-7-22 18:25:51 | 显示全部楼层 |阅读模式
如何确保场景的中某一个物体不随场景的变化而变化 ?
就是在场景放大的时候,模型相应的缩小从而保证大小不变,场景缩小的时候,模型相应的变大从而保证大小不变,效果和osgtext的效果差不多,就是如何然模型根据屏幕坐标自动的缩放?
谢谢!

该用户从未签到

发表于 2009-7-22 21:35:50 | 显示全部楼层
用一个单独的相机节点作为这个模型的父节点,并设置相机为ABSOLUTE_RF

该用户从未签到

 楼主| 发表于 2009-7-23 09:57:49 | 显示全部楼层
我使用您的方法试了试  可是使用相机后模型就不会出来了  下面是最要代码:
osgViewer::Viewer viewer;

        osg::Group* group = new osg::Group();

        osg::ref_ptr<osg::Node> root = new osg::Node();
        root = createEarth();

        osg::Viewport* viewport = new osg::Viewport(0,1280,0,1024);
        osg::Camera* camera = new osg::Camera;
        camera->setReferenceFrame( osg::Transform::ABSOLUTE_RF);
        camera->setViewport(viewport );
        camera->setRenderOrder( osg::Camera:OST_RENDER );
        camera->setClearMask( GL_DEPTH_BUFFER_BIT);
        camera->getOrCreateStateSet()->setMode( GL_LIGHTING, osg::StateAttribute::OFF );

        osg::Node* cessna = osgDB::readNodeFile("cessna.osg");
        osg::MatrixTransform* mt = new osg::MatrixTransform();
        if (cessna)
        {
                osg::Matrix matrix;
                matrix.identity();
                osg::EllipsoidModel* elliposid = new osg::EllipsoidModel();
                elliposid->computeLocalToWorldTransformFromLatLongHeight(0,0,10000,matrix);

                float a = cessna->getBound().radius();
                double s = 200000.0 / cessna->getBound().radius();
                osg::MatrixTransform* scaler = new osg::MatrixTransform;
                scaler->addChild(cessna);
                scaler->setMatrix(osg::Matrixd::scale(s,s,s));
                scaler->getOrCreateStateSet()->setMode(GL_RESCALE_NORMAL,osg::StateAttribute::ON);
                mt->addChild(scaler);
                mt->setMatrix(matrix);
                camera->addChild(mt);
        }                 
        group->addChild(camera);
        //group->addChild(mt);     //添加后这一句是能够显示模型的,说明是相机的问题,但是不知道是什么问题,       
group->addChild(root);

        viewer.setSceneData(group);

        viewer.run();

该用户从未签到

 楼主| 发表于 2009-7-23 10:02:08 | 显示全部楼层
最后的效果和文字的效果差不多,就是在场景缩放的时候,模型的大小保持不变,但是在场景旋转的时候,模型随着场景的旋转而旋转!

该用户从未签到

发表于 2009-7-23 12:20:08 | 显示全部楼层
您需要正确设置相机的投影矩阵和观察矩阵

该用户从未签到

 楼主| 发表于 2009-7-23 12:55:59 | 显示全部楼层
您说的是hud思想吗?

该用户从未签到

发表于 2009-7-23 15:42:32 | 显示全部楼层
无论是否HUD,都需要设置正确的观察和投影矩阵
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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