《OpenSceneGraph庄园场景漫游》实验报告.docVIP

  • 27
  • 0
  • 约5.99千字
  • 约 14页
  • 2020-08-03 发布于河北
  • 举报

《OpenSceneGraph庄园场景漫游》实验报告.doc

西安科技大学 《OpenSceneGraph庄园场景漫游》 实验报告 院. 系(部) 计算机科学与技术学院 专业及班级 信息与计算科学1202班 姓 名 王 涛 学 号 1 2 0 8 0 6 0 2 2 5 日 期 2014/12/18 实验目的: 掌握OSG引擎的基本场景构建,并在完整的三位模型场景下实现基本的场景漫游,碰撞检测,光照模型等功能 实验要求: 基本功能要求 完整的三维场景(模型格式不限) 室内:宿舍、教室、礼堂、家里… 【附加】窗户玻璃 室外:广场、操场、树林、喷泉…. 【附加】天空 综合应用各功能节点、回调功能 开关节点、空间变换节点(自动变换)、LOD 【附加】回调功能实现场景中的小动画:风扇转动、显示器 简单文字信息显示 标题、场景信息、抒情… 自定义漫游器 合理的初始视点位置:场景中心地面 键盘按键(如:ADWS)控制视点“左右上下” 移动 【附加】鼠标控制(如:左键拖拽)视点“左右旋转” 【附加*】视点位置信息实时更新显示 【附加**】简单漫游碰撞检测 开始详细设计: 开始 结束将模型添加到场景并优化读取地形模型文件读取其他模型文件读取天空模型文件将漫游器加入场景创建状态事件创建Viewer对象 结束 将模型添加到场景并优化 读取地形模型文件 读取其他模型文件 读取天空模型文件 将漫游器加入场景 创建状态事件 创建Viewer对象 【1】.实验平台: Windows 8.1 64位专业版 运行内存8GB OSG版本3.0.1(OpenSceneGraph-3.0.1-VS10.0.30319-x86-release-12741) VS版本:VS2010 3dmax版本:3dmax2010 【2】.实验步骤及关键代码: 模型修改部分: 利用3dmax将已有的模型进行对象合并,减少对象个数 减少模型文件的顶点数目 对模型进行贴图整理使部分(丢失了桶跟数目的贴图) 程序实现部分: // 把漫游器添加到场景中 TravelManipulator *TravelManipulator::TravelToScence(osg::ref_ptrosgViewer::Viewer viewer) { TravelManipulator* camera = new TravelManipulator; viewer-setCameraManipulator(camera); camera-m_pHostViewer = viewer; return camera; } // 得到矩阵 osg::Matrixd TravelManipulator::getMatrix(void)const { osg::Matrixd mat; mat.makeRotate(m_vRotation._v[0], osg::Vec3(1.0f, 0.0f, 0.0f), m_vRotation._v[1], osg::Vec3(0.0f, 1.0f, 0.0f), m_vRotation._v[2], osg::Vec3(0.0f, 0.0f, 1.0f)); return mat * osg::Matrixd::translate(m_vPosition); } // 得到逆矩阵 osg::Matrixd TravelManipulator::getInverseMatrix(void) const { osg::Matrixd mat; mat.makeRotate(m_vRotation._v[0], osg::Vec3(1.0f, 0.0f, 0.0f), m_vRotation._v[1], osg::Vec3(0.0f, 1.0f, 0.0f), m_vRotation._v[2], osg::Vec3(0.0f, 0.0f, 1.0f)); return osg::Matrixd::inverse(mat * osg::Matrixd::translate(m_vPosition)); } // 事件处理函数 bool TravelManipulator::handle(const osgGA::GUIEventAdapter ea, osgGA::GUIActionAdapter us) { // 获取鼠标位置 float mouseX = ea.getX(); float mouseY = ea

文档评论(0)

1亿VIP精品文档

相关文档