博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ogre sample分析(一)
阅读量:4542 次
发布时间:2019-06-08

本文共 3516 字,大约阅读时间需要 11 分钟。

ogre自带了一些例子,逐个过一遍并自己动手做一些调整

 

1 Sample_BezierPatch:这个例子直接用数值来构造顶点缓存并创建entity,这种方法一般只能创建简单对象,本人以为复杂对象顶点位置与纹理的数据除非是可以通过什么插件或者用max script等程序方式来创建并导出。

核心代码如下,不做过多分析:

PatchVertex verts[9] =

  {
   {-50, -35, -50, -0.5, 0.5, 0.0, 0.0, 0.0},
   {  0,   0, -50,  0.0, 0.5, 0.0, 0.5, 0.0},
   { 50,  35, -50,  0.5, 0.5, 0.0, 1.0, 0.0},
   {-50,   0,   0, -0.5, 0.5, 0.0, 0.0, 0.5},
   {  0,   0,   0,  0.0, 0.5, 0.0, 0.5, 0.5},
   { 50,   0,   0,  0.5, 0.5, 0.0, 1.0, 0.5},
   {-50,  35,  50, -0.5, 0.5, 0.0, 0.0, 1.0},
   {  0,   0,  50,  0.0, 0.5, 0.0, 0.5, 1.0},
   { 50, -35,  50,  0.5, 0.5, 0.0, 1.0, 1.0}
  };//数据

  mDecl = HardwareBufferManager::getSingleton().createVertexDeclaration();

        mDecl->addElement(0, 0, VET_FLOAT3, VES_POSITION);
        mDecl->addElement(0, sizeof(float) * 3, VET_FLOAT3, VES_NORMAL);
        mDecl->addElement(0, sizeof(float) * 6, VET_FLOAT2, VES_TEXTURE_COORDINATES, 0);

//创建顶点格式

  mPatch = MeshManager::getSingleton().createBezierPatch("patch",

   ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, (float*)verts, mDecl, 3, 3, 5, 5, PatchSurface::VS_BOTH);
   mPatch->setSubdivision(0);//no subdivision

 Entity* ent = mSceneMgr->createEntity("Patch", "patch");

  ent->setMaterialName("Examples/BumpyMetal");
     mSceneMgr->getRootSceneNode()->attachObject(ent);

//创建entity

 

2 Sample_BSP:通过bsp文件 以及pk3文件来创建场景,又有本人用3dmax 所以不太懂得怎么把场景转化bsp文件 所以不做过多的分析

以下是关键代码:

 

ConfigFile cf;
  cf.load(mFSLayer->getConfigFilePath("quakemap.cfg"));
  mArchive = cf.getSetting("Archive");
  mMap = cf.getSetting("Map");

//load config

在quakemap.cfg文件内容如下

Archive: ../../media/packs/chiropteraDM.pk3  pk3文件时一种quake的压缩文件格式 可以包含声音,地图,3D模型,材质贴图 可以用winzp打开

Map: maps/chiropteradm.bsp     bsp是 Quake图形文件的扩展名

mSceneMgr = mRoot->createSceneManager("BspSceneManager"); //创建bspmanager

ResourceGroupManager& rgm = ResourceGroupManager::getSingleton();

  rgm.linkWorldGeometryToResourceGroup(rgm.getWorldResourceGroupName(), mMap, mSceneMgr);
  rgm.initialiseResourceGroup(rgm.getWorldResourceGroupName());
  rgm.loadResourceGroup(rgm.getWorldResourceGroupName(), false);//link load 文件

另外释放的时候需要用如下代码:

 ResourceGroupManager& rgm = ResourceGroupManager::getSingleton();

  rgm.unloadResourceGroup(rgm.getWorldResourceGroupName());
  rgm.removeResourceLocation(mArchive, ResourceGroupManager::getSingleton().getWorldResourceGroupName());

 

3  Sample_CameraTrack 例子主要是NodeAnimationTrack的应用 效果是camera围着ogrehead的一个轨道上运行 因而视口是围着ogrehead为中心运行

nodetrack的这种效果可以用来做围绕的效果 例如dota中召唤师有风雷火3个球体围着转动

主要代码:

  SceneNode* camNode = mSceneMgr->getRootSceneNode()->createChildSceneNode();

        camNode->attachObject(mCamera);
  
  // set up a 10 second animation for our camera, using spline interpolation for nice curves
        Animation* anim = mSceneMgr->createAnimation("CameraTrack", 10);
        anim->setInterpolationMode(Animation::IM_SPLINE);

  // create a track to animate the camera's node

        NodeAnimationTrack* track = anim->createNodeTrack(0, camNode);

        // create keyframes for our track

        track->createNodeKeyFrame(0)->setTranslate(Vector3(200, 0, 0));
        track->createNodeKeyFrame(2.5)->setTranslate(Vector3(0, -50, 100));
        track->createNodeKeyFrame(5)->setTranslate(Vector3(-500, 100, 0));
        track->createNodeKeyFrame(7.5)->setTranslate(Vector3(0, 200, -300));
        track->createNodeKeyFrame(10)->setTranslate(Vector3(200, 0, 0));//这里如果围绕对象是运动的话 只需要将围绕的对象作为被围绕对象的子node即可

        // create a new animation state to track this

        mAnimState = mSceneMgr->createAnimationState("CameraTrack");
        mAnimState->setEnabled(true);

查看animotion.h文件 可以看到类似的track : VertexAnimationTrack NodeAnimationTrack NumericAnimationTrack 关于animotion的分析将在以后在分析

关于ogre animotion可以参考

 

 

 

 

 

转载于:https://www.cnblogs.com/pangblog/p/3297253.html

你可能感兴趣的文章
开发中少不了的Fun -- 微信开发IOS端alert/confirm提示信息,去除网址(URL)的方法...
查看>>
Hibernate学习(二)
查看>>
java IO笔记(DataInput/DataOutput)
查看>>
Day8:String
查看>>
SQL语法之初级增删改查
查看>>
[转] Python基本学习资源收集汇总
查看>>
敏捷冲刺集合帖
查看>>
HTML5之Canvas
查看>>
团队作业8——第二次项目冲刺(Beta阶段)5.27
查看>>
彻底理解this指向
查看>>
hdu 3468(二分匹配)
查看>>
抑郁症的自我测试
查看>>
计算机编程以及基础原理
查看>>
关于多选框的问题
查看>>
使用.NET Reflector
查看>>
【剑指offer】40、最小的K个数
查看>>
JAVA生成RSA非对称型加密的公钥和私钥(利用JAVA API)
查看>>
mybatis + log4j 打印mybatis的sql
查看>>
解决Visual Studio:"无法导入以下密钥文件: xxxx.pfx,该密钥文件可能受密码保护"
查看>>
POJ1061-青蛙的约会---扩展欧几里德算法求最小整数解
查看>>