查看: 1195|回复: 1

关于改变摄像机视点的小问题

[复制链接]

该用户从未签到

发表于 2011-8-14 11:41:45 | 显示全部楼层 |阅读模式
我想实现改变摄像机的视点,同时又能通过鼠标拖动使模型移动,写了以下代码,实现了视点的改变,但鼠标拖拽失效了。
加上viewer.setCameraManipulator( new osgGA::TrackballManipulator );后鼠标可以拖拽了,但视点又恢复到了默认。
我需要使用逐帧渲染,所以不能使用viewer.run()方式。
请赐教!

int main(int argc,char** argv)
{
        osgViewer::Viewer viewer;
        osg::ref_ptr<osg::Node> node;;
        osgDB::ReaderWriter::ReadResult rr = osgDB::Registry::instance()->readNode("cow.osg", osgDB::Registry::instance()->getOptions() );
        node = rr.takeNode();
        node->setDataVariance( osg::Object:YNAMIC );
        viewer.setSceneData(node);

        viewer.getCamera()->setViewport( new osg::Viewport(0, 0, 1000, 560) );

        viewer.getCamera()->setProjectionMatrixAsPerspective( 40., 1., 1., 100. );
        // 创建矩阵,指定到视点的距离。
        osg::Matrix trans;
        trans.makeTranslate( 0., 0., -12. );
        //// 旋转一定角度(弧度值)。
        
        /*viewer.setCameraManipulator( new osgGA::TrackballManipulator );*/

        // 创建旋转矩阵。
        osg::Matrix rot;
        rot.makeRotate( 1.0, osg::Vec3( 1, 0, 0. ) );        
        viewer.realize();
               
        viewer.getCamera()->setViewMatrix( rot * trans );

        while (!viewer.done())
        {
                //         绘制下一帧
                viewer.frame();
        }
}

该用户从未签到

发表于 2011-8-14 14:57:44 | 显示全部楼层
海军教程有一节是讲视点自定义的,建议看看。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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