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可以参考http://blog.csdn.net/leonwei/article/details/5819248

ogre sample分析(一)的更多相关文章

  1. Linux下UPnP sample分析

        一.UPnP简介   UPnP(Universal Plug and Play)技术是一种屏蔽各种数字设备的硬件和操作系统的通信协议.它是一种数字网络中间件技术,建立在TCP/IP.HTTP协 ...

  2. Ogre GpuProgram分析

    和前面讲解的Compositor一样,GpuProgram也对应一种资源文件,意思我们可以直接写一个文件来完成,不需要了解相关的类. 但是就和winform一样,直接拖控件能完成大部分工作,假如如果需 ...

  3. Direct3D学习笔记 - 浅析HDR Lighting Sample

    一.HDR简介 HDR(High Dynamic Range,高动态范围)是一种图像后处理技术,是一种表达超过了显示器所能表现的亮度范围的图像映射技术.高动态范围技术能够很好地再现现实生活中丰富的亮度 ...

  4. Unity3D和OGRE资源管理机制

    转自:http://www.tuicool.com/articles/QbMjUn 游戏中通常有大量资源,如网格.材质.纹理.动画.着色器程序和音乐等,游戏引擎作为做游戏的工具,自然要提供良好的资源管 ...

  5. 收藏的博客--Ogre

    1.Ogre一些东西和流程深入讲解  http://blog.csdn.net/yanonsoftware/article/category/226048 2.Ogre天龙八部分析 http://bl ...

  6. Ogre RTSS组件解析

    我们为什么要用RTSS. Ogre如计算物体位置,纹理,光照都有固定API如(glMatrixFrustumEXT, glLoadmatrix, glTexture, glLight ),使用这些AP ...

  7. 浅析游戏引擎的资源管理机制——扒一扒Unity3D中隐藏在背后的资源管理

    游戏中通常有大量资源,如网格.材质.纹理.动画.着色器程序和音乐等,游戏引擎作为做游戏的工具,自然要提供良好的资源管理,让游戏开发者用最简单的方式使用资源.游戏引擎的资源管理包括两大部分:离线资源管理 ...

  8. Pythagorean Triples

    Pythagorean Triples time limit per test 1 second memory limit per test 256 megabytes input standard ...

  9. OpenGL ES

    前言 OpenGL ES是Khronos Group创建的一系列API中的一种(官方组织是:http://www.khronos.org/).在桌面计算机上有两套标准的 3DAPI:Direct3D和 ...

随机推荐

  1. [置顶] android 自定义TextView

    系统自带的控件TextView有时候没满一行就换行了,为了解决这个问题,自定义了一个TextView,只有一行显示不完全的情况下才会去换行显示,代码如下: package com.open.textv ...

  2. Apache Flink

    Flink 剖析 1.概述 在如今数据爆炸的时代,企业的数据量与日俱增,大数据产品层出不穷.今天给大家分享一款产品—— Apache Flink,目前,已是 Apache 顶级项目之一.那么,接下来, ...

  3. cocos2d-x游戏开发系列教程-坦克大战游戏之虚拟手柄的显示

    上篇文章我们有了坦克,但是没有手柄,无法控制坦克. 1.这篇我们编写虚拟手柄来控制坦克.头文件大致内容如下: #define RES_PADDLE_LEFT "paddle/left.png ...

  4. Oracle管道函数(Pipelined Table Function)介绍

    一 概述: 1.管道函数即是能够返回行集合(能够使嵌套表nested table 或数组 varray)的函数,我们能够像查询物理表一样查询它或者将其  赋值给集合变量. 2.管道函数为并行运行,在普 ...

  5. Qt4_VS10 程序打包发布

    源地址:http://www.2cto.com/kf/201306/217205.html 目录结构如下: ---------------------------------------------- ...

  6. java实现小九机器人接口

    package com.iask.webchat.chatmachine; import java.net.URLEncoder; import org.apache.http.HttpEntity; ...

  7. 计算机内存碎片(中)——外部碎片化(内存 & 文件系统 & 数据库系统通杀)

    本文原创为freas_1990,转载请标明出处:http://blog.csdn.net/freas_1990/article/details/17252221 外部碎片化 当计算机内存被划分成很细碎 ...

  8. php 控制页面跳转

    <?php class UserAction extends Action{ public function index(){ echo "你好!"; $m=M('user' ...

  9. uva 129

    暴力求解 大致题意 如果一个字符串含有相邻的重复字串称为容易的串,反之为非容易 求字典序第n困难的串…… 大致思路,暴力如果是容易的串停过,然后困难的串继续求解tot++ 总之先记着吧…… 最后输出格 ...

  10. clear_logs.py修改

    #!/usr/bin/env python#encoding=utf-8"""清空最后修改时间跑今天7天以前的所有文件"""#指定监控的路径 ...