简单的Camera动画
来源:互联网 发布:淘宝楼层跳转代码 编辑:程序博客网 时间:2024/05/12 11:30
转载自:http://dev.gameres.com/Program/Visual/3D/OGRECameraTrack.htm
CameraTrack是OGRE自带demo,比较简单,主要体现了两个功能:camera跟踪和移动动画,这个demo全部主要功能都在createScece里,所以就分析一下该函数。
void createScene(void){ // 指定了一个环境光 mSceneMgr->setAmbientLight(ColourValue(0.2, 0.2, 0.2)); // 创建一个圆顶型的天空 mSceneMgr->setSkyDome(true, "Examples/CloudySky", 5, 8); // 指定一个主光源 (一般为体现真实感都会至少有一个环境光和一个主光源) Light* l = mSceneMgr->createLight("MainLight"); // 默认为点光源 漫反射, 只设置了位置 l->setPosition(20,80,50); // 以上都没涉及到正题 Entity *ent; // 生成一个平面对象用作地板,好像OGRE用作创建mesh的图元只有plane,其他也有sphere,但不是用作显示 // 绘制 Plane p; p.normal = Vector3::UNIT_Y; p.d = 200; MeshManager::getSingleton().createPlane("FloorPlane",p,200000,200000,20,20,true,1,50,50,Vector3::UNIT_Z); // 通过一个plane 的mesh生成一个entity,并给这个entity指定纹理 ent = mSceneMgr->createEntity("floor", "FloorPlane"); ent->setMaterialName("Examples/RustySteel"); // 把地板加在一个SceneNode上,以后不在对该node进行操作,所以没有指定string名字 mSceneMgr->getRootSceneNode()->createChildSceneNode()->attachObject(ent); //加入一个mesh头像,连接到另一个SceneNode,也没指定string名 SceneNode* headNode = mSceneMgr->getRootSceneNode()->createChildSceneNode(); ent = mSceneMgr->createEntity("head", "ogrehead.mesh"); headNode->attachObject(ent); //指定camera的跟踪对象 无论这个SceneNode动不动, 每个frame中camera都将聚焦于它,即lookat它 mCamera->setAutoTracking(true, headNode); // 生成一个SceneNode用于挂接camera,使该scenenode运动从而带动camera运动 SceneNode* camNode = mSceneMgr->getRootSceneNode()->createChildSceneNode(); camNode->attachObject(mCamera); // 指定camNode的运动路线, 第二个参数为完成一次运动的总时间为10秒 Animation* anim = mSceneMgr->createAnimation("CameraTrack", 10); // 设置各关键帧的插值方式,动画是一帧一帧连续播放产生的,我们只能指定几个关键帧, // 其余的帧由关键帧插值得到,通常有线性linear和样条spline两种插值方法,linear插值时每帧 // 由相邻两关键帧线性计算得到,spline则考虑3帧或更多,所以更平滑,计算量更大。详细的可以 // 随便找本图形书翻翻,里面会有几何解释和数学解释 anim->setInterpolationMode(Animation::IM_SPLINE); // 生成跟踪对象指针 AnimationTrack* track = anim->createTrack(0, camNode); // 由该对象指针生成各关键帧 总共5帧 KeyFrame* key = track->createKeyFrame(0); // startposition key = track->createKeyFrame(2.5); // 在时间点设置关键 key->setTranslate(Vector3(500,500,-1000)); // 该关键帧的camera位置 key = track->createKeyFrame(5); key->setTranslate(Vector3(-1500,1000,-600)); key = track->createKeyFrame(7.5); key->setTranslate(Vector3(0,-100,0)); key = track->createKeyFrame(10); key->setTranslate(Vector3(0,0,0)); // Create a new animation state to track this mAnimState = mSceneMgr->createAnimationState("CameraTrack"); mAnimState->setEnabled(true); // 启用动画 mSceneMgr->setFog(FOG_EXP, ColourValue::White, 0.0002);}
0 0
- 简单的Camera动画
- Andorid Camera的简单实用
- 简单的Camera例子(Building a Camera App)
- Android Camera 的架构简单简析
- 代码系列2:Camera的简单应用
- android 简单的原生Camera实现
- 简单的camera预览功能实现
- UGUI中Camera属性的简单介绍
- Android之Camera的简单实例
- Android中拍照Camera的简单实用
- Android Camera的简单使用浅析
- 一个简单的camera管理类
- Camera使用-实现简单的自定义相机
- android动画之Camera
- 编写简单的动画
- 窗口的简单动画
- 简单的弹跳动画
- 制作简单的动画
- 艾叶 R学习笔记之回归分析
- 机器学习中正则化项L1和L2的直观理解
- 彩票
- 【管它原创不原创,被转载的才是好东西】浅浅浅浅的谈集合
- 学习笔记︱Nvidia DIGITS网页版深度学习框架——深度学习版SPSS
- 简单的Camera动画
- css3字体样式
- Android WebView的使用,与JS的交互
- Python电子邮件sendmail.py
- MySQL安装
- HTML、css、js控制页面元素的显示及个人对浮动的理解
- FIND_IN_SET 使用场景
- java学习-基础(1)
- enote笔记法使用范例(2)——指针(1)智能指针