osg加载模型后使模型居中且以最佳大小显示
2015-01-10 16:04
253 查看
大半年没写博客了,今天再次开写!
问题:单独加载某个模型,像cow.osg加载进去后都是恰好大小的显示在我们前面,但有些我们自己做的模型貌似就不一定了,有时太大,有时太小,甚至有时视野里根本就找不到,你以为没加载进来,但你查看场景节点的确又有这个节点。这该怎么解决呢?
第一手动法:
解决:看到比较多的回答是说用相机回调,更新相机的位置,使他离模型的位置刚好合适。但我想,调整相机位置只是加载模型的时候用一次,需要单独写个相机回调吗?后面在论坛上看到一个办法,不需要用回调,就直接调整。整理了一下,实现如下:
其中数据可能要自己再调整一下,这边是让相机45°朝下对准模型。需要注意的就是osg的坐标系,上面也有注释。
第二:自动计算,在一个大神的教程中看到的,简单但不能满足我的要求,所以可以都试试。
问题:单独加载某个模型,像cow.osg加载进去后都是恰好大小的显示在我们前面,但有些我们自己做的模型貌似就不一定了,有时太大,有时太小,甚至有时视野里根本就找不到,你以为没加载进来,但你查看场景节点的确又有这个节点。这该怎么解决呢?
第一手动法:
解决:看到比较多的回答是说用相机回调,更新相机的位置,使他离模型的位置刚好合适。但我想,调整相机位置只是加载模型的时候用一次,需要单独写个相机回调吗?后面在论坛上看到一个办法,不需要用回调,就直接调整。整理了一下,实现如下:
//调整相机,使模型居中显示 double radius = mModel->getBound().radius(); double viewDistance = radius/5;// //方向向上 osg::Vec3d up( 0.0,0.0,1.0 );//osg右x,前y,上z,opengl由osg绕x轴向外旋转90°, // osg::Vec3d viewDirection( 0.0,-1.0,0.5 );// //相机盯着的那个点(目标点,相当于靶心),不一定就是包围球的中点,也可以是场景的原点,这个看情况 osg::Vec3d center = mModel->getBound().center(); //眼睛的位置=目标点+离目标点的距离 osg::Vec3d eye = center + viewDirection * viewDistance; //相机设置矩阵 m_vViewer->getCameraManipulator()->setHomePosition(eye,center,up); m_vViewer->home();
其中数据可能要自己再调整一下,这边是让相机45°朝下对准模型。需要注意的就是osg的坐标系,上面也有注释。
第二:自动计算,在一个大神的教程中看到的,简单但不能满足我的要求,所以可以都试试。
m_vViewer->getCameraManipulator()->computeHomePosition(); m_vViewer->getCameraManipulator()->home( 0.0 );
相关文章推荐
- 在程序中加载解析3DS文件,显示三维模型(c# MDX),
- VC/MFC 固定窗口大小、居中显示
- Qt窗口屏幕居中显示以及设置大小
- 窗体中有一个图片框,显示一副图片。要求:1)在窗体打开时,动态加载图片;2)设置图片显示模式为根据图片框大小缩放图片;3)图片自己找;4)当鼠标停留在图片框时,显示“**风光”提
- Webview--如何让加载进来的页面自适应手机屏幕分辨率居中显示
- Web中模态对话框加载后根据加载内容动态改变其大小并使其居中
- 关于WPF加载WinForm界面,WinForm界面显示错位、按钮大小变大的问题
- [转载]iPhone中OpenGL ES显示3DS MAX模型之二:lib3ds加载模型
- UIImageView:可以通过UIImage加载图片赋给UIImageView,加载后你可以指定显示的位置和大小。 1、初始化
- 修改Tabhost样式和字体大小和居中显示
- Web中模态对话框加载后根据加载内容动态改变其大小并使其居中
- Java之获取屏幕大小并将窗口居中显示!...
- Ext页面根据浏览器大小显示全部,页面居中
- Webview--如何让加载进来的页面自适应手机屏幕分辨率居中显示
- Java获得当前屏幕大小,窗口居中显示
- 固定容器内-未知大小图片-垂直居中等比例显示
- Web中模态对话框加载后根据加载内容动态改变其大小并使其居中
- Ext页面根据浏览器大小显示全部,页面居中 .
- js动态加载显示图片,获取大小
- 修改Tabhost样式和字体大小和居中显示