查看: 1642|回复: 3

osg相机问题

[复制链接]

该用户从未签到

发表于 2010-5-17 16:13:49 | 显示全部楼层 |阅读模式
#include <osgViewer/Viewer>
#include <osgDB/ReadFile>
#include <osg/Node>
#include <osg/Camera>
int
main()
{
   
   osgViewer::Viewer viewer;
   osg::ref_ptr<osg::Camera> camera = new osg::Camera;
   camera->setClearColor(osg::Vec4(1,1,1,1));
   osg::ref_ptr<osg::Node> node = new osg::Node();
   node = osgDB::readNodeFile("cow.osg");
   camera->addChild(node);
   viewer.setSceneData(camera);
    if (!viewer.getSceneData())
    {
        osg::notify( osg::FATAL ) << "Unable to load data file. Exiting." << std::endl;
        return 1;
    }
    camera->setProjectionMatrixAsPerspective(40,1,1,100);
    camera->setViewMatrixAsLookAt(osg::Vec3(0,0,0),osg::Vec3(0,0,-1),osg::Vec3(0,1,0));
    camera->setViewport(0,0,800,800);

    //创建矩阵,指定到视点的距离
    osg::Matrix trans;
   trans.makeTranslate(0,0,-10);
   //旋转角度
    double angle = 0.0;
    while (!viewer.done())
   {
//创建旋转矩阵
osg::Matrix rot;
rot.makeRotate(angle,osg::Vec3(1,0,0));
angle  += 0.01;
       //设置视口矩阵
       camera->setViewMatrix(rot * trans);
       //绘制下一帧
      viewer.frame();
    }
    return 0;
}
为什么读取的模型显示不出来

该用户从未签到

发表于 2010-5-17 16:51:15 | 显示全部楼层
修改一下视点坐标就可以了。

该用户从未签到

 楼主| 发表于 2010-5-17 18:25:19 | 显示全部楼层
用这个viewer.getCamera()->setProjectionMatrixAsPerspective(100,1,1,100);替代camera->setProjectionMatrixAsPerspective(40,1,1,100);(仅替代这一行)就可以了看见模型了,但是不明白这是为什么?

该用户从未签到

 楼主| 发表于 2010-5-18 10:36:11 | 显示全部楼层
终于明白了,原来这样相机eye始终与物体中心重合,因此什么也看不见
只要增加osg::ref_ptr<osg:ositionAttitudeTransform> pat = new osg::PositionAttitudeTransform;
        pat->setPosition(osg::Vec3(0.0,0.0,10.0));
        pat->addChild(node);
            camera->addChild(pat);
就可以看见了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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