ogre sample分析(一)
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分析(一)的更多相关文章
- Linux下UPnP sample分析
一.UPnP简介 UPnP(Universal Plug and Play)技术是一种屏蔽各种数字设备的硬件和操作系统的通信协议.它是一种数字网络中间件技术,建立在TCP/IP.HTTP协 ...
- Ogre GpuProgram分析
和前面讲解的Compositor一样,GpuProgram也对应一种资源文件,意思我们可以直接写一个文件来完成,不需要了解相关的类. 但是就和winform一样,直接拖控件能完成大部分工作,假如如果需 ...
- Direct3D学习笔记 - 浅析HDR Lighting Sample
一.HDR简介 HDR(High Dynamic Range,高动态范围)是一种图像后处理技术,是一种表达超过了显示器所能表现的亮度范围的图像映射技术.高动态范围技术能够很好地再现现实生活中丰富的亮度 ...
- Unity3D和OGRE资源管理机制
转自:http://www.tuicool.com/articles/QbMjUn 游戏中通常有大量资源,如网格.材质.纹理.动画.着色器程序和音乐等,游戏引擎作为做游戏的工具,自然要提供良好的资源管 ...
- 收藏的博客--Ogre
1.Ogre一些东西和流程深入讲解 http://blog.csdn.net/yanonsoftware/article/category/226048 2.Ogre天龙八部分析 http://bl ...
- Ogre RTSS组件解析
我们为什么要用RTSS. Ogre如计算物体位置,纹理,光照都有固定API如(glMatrixFrustumEXT, glLoadmatrix, glTexture, glLight ),使用这些AP ...
- 浅析游戏引擎的资源管理机制——扒一扒Unity3D中隐藏在背后的资源管理
游戏中通常有大量资源,如网格.材质.纹理.动画.着色器程序和音乐等,游戏引擎作为做游戏的工具,自然要提供良好的资源管理,让游戏开发者用最简单的方式使用资源.游戏引擎的资源管理包括两大部分:离线资源管理 ...
- Pythagorean Triples
Pythagorean Triples time limit per test 1 second memory limit per test 256 megabytes input standard ...
- OpenGL ES
前言 OpenGL ES是Khronos Group创建的一系列API中的一种(官方组织是:http://www.khronos.org/).在桌面计算机上有两套标准的 3DAPI:Direct3D和 ...
随机推荐
- 真机iOS SDK升级后xcode不能进行真机调试 怎么办
今天升级了一下iPod的SDK到iOS8,xcode仅仅能支持到7.1,真机调试遇到问题???以下是解决的方法! 找到xcode,点击右键.打开显示包内容,按路径Contents/Develpoer/ ...
- PHP - 使用pear的HTTP_Upload包进行上传
前台代码: <html> <head> <title>上传文件</title> </head> <body> <form ...
- javascript笔记整理(数组对象)
1.属性 a.length--设置或返回数组元素的数目 var a=[1,2,3,45,5]; alert(a.length=6) 结果:6 alert(a[5]) 结果:undefined b.co ...
- 在JS中,一个自定义函数如何调用另一个自定义函数中的变量
function aa1511() { var chengshi="马鞍山"; var shengfen="安徽省"; return shengfen+&quo ...
- 详解js和jquery里的this关键字
详解js和jquery里的this关键字 js中的this 我们要记住:this永远指向函数运行时所在的对象!而不是函数被创建时所在的对象.this对象是在运行时基于函数的执行环境绑定的,在全局环境中 ...
- Android SurfaceView实战 打造抽奖转盘
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/41722441 ,本文出自:[张鸿洋的博客] 1.概述 今天给大家带来Surfac ...
- 初入Android--Activate生命周期
Activate的主要生命周期 (注意:这只是主要的生命周期,而不是完整的生命周期方法,其中的两个周期之间可能还执行了其他的一些方法) 每个时刻在屏幕上的状态 进入onCreate方法:Activat ...
- Java内部类——局部内部类
局部内部类,即放在“{块中}”,局部内部类,不能被成员修饰符static修饰,且内部类的成员也不能是static. 内部类中访问局部变量“{块中}”,需要将局部变量声明为final. 可以直接访问外部 ...
- 深入浅出Hive企业级架构优化、Hive Sql优化、压缩和分布式缓存(企业Hadoop应用核心产品)
一.本课程是怎么样的一门课程(全面介绍) 1.1.课程的背景 作为企业Hadoop应用的核心产品,Hive承载着FaceBook.淘宝等大佬 95%以上的离线统计,很多企业里的离线统 ...
- PNG 文件结构
PNG图像文件介绍 PNG图像文件格式 PNG是可携式网络图像(portable network graphics)的英文缩写.PNG是从网络上开始发展的,目的是替代GIF和JPG格式,PNG图像文件 ...