查看: 1154|回复: 6

请教加载投影矩阵的问题

[复制链接]

该用户从未签到

发表于 2010-11-23 09:54:41 | 显示全部楼层 |阅读模式
我是一个vr开发人员,希望能帮我解答。
  我用mfc编程在窗口里加载一个ive模型,我想用我自己已经求出来的p阵(计算机视觉中的方法)来画模型,在opengl中我用
glmatrixmode(GL_MODELVIEW);
glloadmatrix(P);
draw();//画模型
的方法,我想用osg来实现上面opengl的步骤如下,
  m_Viewer=new osgViewer::Viewer;
  ......
  osg::ref_ptr<osg::Camera> camera=new osg::Camera;
camera->setGraphicsContext(gc.get());
camera->setViewport(new osg::Viewport(traits->x,traits->y,traits->width,traits->height));
  camera->setProjectionMatrixAsOrtho(0.0f,474.0f,0.0f,294.0f,-400.0f,400.0f);

osg::Matrixd ma;
ma.set(785.746/240.0,-73.6669/240.0,-69.8510/240.0,3425.90,236.033/240.0,410.723/240.0,-742.282/240.0,1323.26,0,0,1,0,0.514208/240.0,0.825432/240.0,-0.232922/240.0,14.3600);
//这里是我前面说的已知P阵
camera->setProjectionMatrix(ma);//关键是这里我不清楚这么写对么?我发现和我想要的结果不一样,还是应该写下面的setViewMatrix?或是语句位置不正确?
//m_Viewer->getCamera()->setViewMatrix(ma);
  
m_Viewer->setThreadingModel(osgViewer::Viewer::SingleThreaded);
m_Viewer->setCamera( camera.get() );
m_Viewer->setCameraManipulator(new osgGA::TrackballManipulator);
......读模型显示

谢谢赐教,万分感谢!

该用户从未签到

发表于 2010-11-23 12:53:43 | 显示全部楼层
  1. osg::Matrixd ma;
  2. ma.set(...)
复制代码
这样设置的是投影矩阵没错,注意OSG使用行主序的4x4矩阵就可以了
  1. m_Viewer->setCameraManipulator(new osgGA::TrackballManipulator);
复制代码
有了这一句之后,OSG的漫游器会接管camera的观察矩阵设置,因此之前和之后所有的getCamera()->setViewMatrix()都不会起到作用,如果您希望自己进行控制,那么请考虑编写一个自己的漫游器类,或者取消漫游器并使用while(!viewer.done()) {viewer.frame();}而非viewer.run()来实现仿真循环

该用户从未签到

发表于 2010-11-23 23:12:48 | 显示全部楼层
顺带问一下:使用while(!viewer.done()) {viewer.frame();}和viewer.run()的主要区别是什么?
是不是就可以在循环内部加入自己的处理?!

该用户从未签到

发表于 2010-11-24 08:33:52 | 显示全部楼层
Just have a look at the implementation of viewer.run()~~

该用户从未签到

发表于 2010-11-24 11:28:21 | 显示全部楼层
是一样的,run内部也调用了frame

该用户从未签到

发表于 2010-11-24 11:29:53 | 显示全部楼层
nono, run() "installs trackball manipulator if one is not already assigned."

该用户从未签到

发表于 2010-11-24 11:35:21 | 显示全部楼层
en~~~ha
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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