当前位置: 首页 > news >正文

收企业做网站备案my63777免费域名查询2023年

收企业做网站备案,my63777免费域名查询2023年,如何选网站服务器,java大型网站建设pdf在OSG中多视图的管理是通过osgViewer::CompositeViewer类来实现的。该类负责多个视图的管理及同步工作,继承自osgViewer;:ViewerBase类,继承关系图如图8-13所示 图8-13 osgViewer::CompositeViewer 的继承关系图 在前面已经讲到,osgViewer:Vi…

        在OSG中多视图的管理是通过osgViewer::CompositeViewer类来实现的。该类负责多个视图的管理及同步工作,继承自osgViewer;:ViewerBase类,继承关系图如图8-13所示

图8-13 osgViewer::CompositeViewer 的继承关系图

        在前面已经讲到,osgViewer:ViewerBase 类主要负责线程管理设置线程模式启动线程等工作在多视图渲染时,线程管理一直都是一个令人非常头痛的问题,但这些底层工作在 osgViewer::CompositeViewer类中已经实现了。如果读者想了解得更详细,可参看osgViewer/CompositeViewer.cpp源代码。

        对于osgViewer::CompositeViewer,它内部已经包含了多个视图(osg::View),使用它来表示一个视图当然是可以的,此时osgViewer:CompositeViewer 的作用与标准的osgViewer::Viewer 对象并无太大差别,但是比起每次只管理一个视图的情形来说,管理和使用多个视图还是显得略微麻烦。因此,建议在只有一个视图时尽量选择使用 osgViewer::Viewer。当然,有时可能需要用到不止一个视图,也可能在多个视口内显示同一视图的内容(如多数 CAD 软件),或同时显示一个3D场景和一幅小地图视图,或读取多个模型文件并分别独立地进行控制。对于这些程序来说,往往需要在一个或多个场景(osgVicwer:Scene)上管理多个视图(osgView)此时程序的管理方式要比单独的osgViewer.:Viewer情形下复杂得多。事实上,程序的细节程度总是与问题的复杂程度成比例的,因此,我们有必要在正确的条件下选择正确的实现方式。

        在osgViewer:CompositeViewer中添加视图或移除视图可以用下面的成员函数:

void addView(osgViewer.:View*view)//添加一个视图
void removeView(osgViewer::View*view)//移除一个视图
osgViewer::View *getView(unsigned i) //得到视图的索引
const  osgViewer::View *getView(unsigned i)const//得到视图的索引
unsigned int getNumViews() const//得到视图的个数

        在论坛上,有很多人会提问如何来做一个“鹰眼”,其实,这是比较简单的实现。用osgViewer.:CompositeViewer类实现多视图管理,让一个小地图HUD显示一个视图,另一个视图染主窗口即可。本书并没有专门提供一个相关的例子,读者可以通过修改本书的例子来自行完成

  1. 多视图相机渲染示例

        多视图相机渲染示例的代码如程序清单8-5所示

// 多视图相机渲染示例
void compositeViewer_8_5(const string &strDataFolder)
{// 创建CompositeViewer对象osg::ref_ptr<osgViewer::CompositeViewer> viewer = new osgViewer::CompositeViewer();// 获取牛的模型string strDataPath = strDataFolder + "cow.osg";osg::ref_ptr<osg::Node> cow = osgDB::readNodeFile(strDataPath);// 读取飞机模型strDataPath = strDataFolder + "cessna.osg";osg::ref_ptr<osg::Node> cessna = osgDB::readNodeFile(strDataPath);// 优化场景数据osgUtil::Optimizer optimizer;optimizer.optimize(cow.get());optimizer.optimize(cessna.get());// 设置图形环境特性osg::ref_ptr<osg::GraphicsContext::Traits> traits = new osg::GraphicsContext::Traits();traits->x = 100;traits->y = 100;traits->width = 900;traits->height = 700;traits->windowDecoration = true;traits->doubleBuffer = true;traits->sharedContext = 0;// 创建图形环境特性osg::ref_ptr<osg::GraphicsContext> gc = osg::GraphicsContext::createGraphicsContext(traits.get());if (gc->valid()){osg::notify(osg::INFO) << " GraphicsWIndow has been created successfully." << endl;// 清除窗口颜色及颜色和深度缓冲gc->setClearColor(osg::Vec4f(0.2f, 0.2f, 0.6f, 1.0f));gc->setClearMask(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);}else{osg::notify(osg::NOTICE) << " GrraphicsWidnow has not been created successfully." << endl;}//视图1{// 创建视图1osg::ref_ptr<osgViewer::View> view = new osgViewer::View;viewer->addView(view.get());// 设置视图场景数据view->setSceneData(cow.get());// 设置相机视口及图形环境view->getCamera()->setViewport(new osg::Viewport(0, 0, traits->width / 2, traits->height / 2));view->getCamera()->setGraphicsContext(gc.get());// 设置操作器view->setCameraManipulator(new osgGA::TrackballManipulator);// 添加事件处理view->addEventHandler(new osgViewer::StatsHandler);view->addEventHandler(new osgViewer::WindowSizeHandler);view->addEventHandler(new osgViewer::ThreadingHandler);view->addEventHandler(new osgViewer::RecordCameraPathHandler);}// 视图2{osg::ref_ptr<osgViewer::View> view = new osgViewer::Viewer;viewer->addView(view.get());view->setSceneData(cessna.get());view->getCamera()->setViewport(new osg::Viewport(traits->width / 2, 0, traits->width / 2, traits->height / 2));view->getCamera()->setGraphicsContext(gc.get());view->setCameraManipulator(new osgGA::TrackballManipulator);}// 视图3{osg::ref_ptr<osgViewer::View> view = new osgViewer::View;viewer->addView(view.get());view->setSceneData(cessna.get());// 根据分辨率确定合适的投影来保证显示的图形不变形double fovy, aspectRatio, zNear, zFar;view->getCamera()->getProjectionMatrixAsPerspective(fovy, aspectRatio, zNear, zFar);double newAspectRatio = double(traits->width) / double(traits->height/2);double aspectRaitoChange = newAspectRatio / aspectRatio;if (aspectRaitoChange != 1.0){view->getCamera()->getProjectionMatrix() *= osg::Matrix::scale(1.0 / aspectRaitoChange, 1.0, 1.0);}view->getCamera()->setViewport(new osg::Viewport(0, traits->height / 2, traits->width, traits->height / 2));view->getCamera()->setGraphicsContext(gc.get());view->setCameraManipulator(new osgGA::TrackballManipulator);}viewer->realize();viewer->run();
}

        运行程序,截图如图8-14所示

图8-14多视图相机渲染示例截图

http://www.mfbz.cn/news/160/

相关文章:

  • 软件开发工程师和java开发工程师海外网站seo优化
  • 购物网站的搜索功能是怎么做的大泽山seo快速排名
  • 常德市 网站建设seo快速排名站外流量推广
  • 青岛做网站推广公司哪家好营销网站建设门户
  • wordpress系统介绍网站推广优化技巧
  • 做网站荣耀体验服官网百家号权重查询
  • 有哪些做问卷调查挣钱的网站优化设计三年级上册答案
  • s.w.g wordpress长沙seo咨询
  • 网站建设策略数字经济发展情况报告
  • b2b平台软件长春网站seo
  • 北京市住房和城乡建设委员会官方网站烟台网络推广
  • 苍溪规划和建设局网站云搜索神器
  • 无棣网页设计引擎优化搜索
  • 做网站哪个语言快武汉seo排名优化
  • 我想在阿里巴巴做卫生纸的网站郑州专业的网站公司
  • dedecms做电影网站商丘优化公司
  • 重庆技术支持 网站建设公司最近热点新闻事件
  • 网站开发有限公司网站seo入门基础教程书籍
  • wordpress 大型网站搜狗网站收录
  • 织梦本地安装网站千锋教育
  • 3d建模师容易找工作吗windows7系统优化工具
  • 做二手平台公益的网站互联网销售可以卖什么产品
  • 电商网站推广常见问题自己怎么做网站网页
  • 网站搜索框怎么做b站24小时自助下单平台网站
  • 网站怎么做架构深圳搜索引擎优化seo
  • 搜索网站logo怎么做菏泽地网站seo
  • 服务周到的上海网站建设公司google play
  • 网站目的及功能定位免费com网站域名注册
  • seo网站优化收藏重庆森林经典台词图片
  • 给个人建网站的公司查询关键词排名软件