



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
OGRE简析(二)-OGRE 模型绘制“伟大航路,我把世界上的一切都放在了那里,有种的话就去领取吧”这是OGRE中文网的一则广告,我想,无论作为OGRE的学习者还是漫漫人生的一名旅人,这句话都是非常不错的激励语。放在这,是否能够让你隐约看到属于自己的新世界?前沿在上次完成框架解析之后,主要是参照OGRE_3D_1.7_Beginners_Guide这本书,对OGRE的应用有了一个大简单而全面的了解,对其中场景、节点和相机等,以及模型、动画和粒子都有了一个概念的认知,这本书对于初学来说,还是值得一读的。还有就是Pro_OGRE_3D_Programming这本,网上推荐页不错,不过还没来得及看。看完这本书,打算结合书中的应用场景来学习一下实现,毕竟会调用接口和了解内部处理机制上还是有不少差别的,而自然,第一个例子就是Sinbad水手模型了。OGRE中显示一个模型很简单Ogre:Entity* ent = mSceneMgr-createEntity(MyEntity,Sinbad.mesh);mSceneMgr-getRootSceneNode()-attachObject(ent);简单的两句话,一个模型就可以马上显示出来,下面进入本章的主题,模型绘制过程解析。OGRE中,这个过程主要分三个阶段l 模型文件加载l 纹理映射l 模型渲染备注:红色部分是可以讨论的技术,只做引用,想不全,只列出关键词文件加载对于OGRE应用来说,添加一个含有模型的节点,即上面代码内容,主要就是为了在程序中加载模型,其后的显示均是在OGRE内部实现渲染,并不需要用户做其他工作。添加模型,就不得不提一下场景的概念:”场景组织就像一个舞台,需要摄影机、灯光、服饰、道具和演员”,对于场景中的Object,大致分为moveable和immobeable两类,而模型属于前者。在OGRE中MovableObjectCollectionMap mMovableObjectCollectionMap用来维护对象,其本身算是一个二维字典,先负责Entity、Cameras类型,然后再细化到每一类型下面的实体,以name作为索引。对象的创建主要由MovableObject* MovableObjectFactory:createInstance(const String& name, SceneManager* manager, const NameValuePairList* params)函数来实现,工厂模式来处理对于模型,最终由模型管理器Load实现。一个完整的模型包括三大部分,模型文件,材质文件和纹理图片,其中,对于具有动画功能的,还包含骨骼文件,本章中不涉及骨骼文件的介绍,在动画专题中会做研究1. 模型构建模型管理器,通过资源管理器在内存中先构造出模型,此时模型为空壳,仅保存此模型的路径信息,只是在资源管理器中有此模型的唯一位置。其后,调用模型的load函数,实现模型文件的加载2. 文件读取Sinbad模型是一个zip文件,在load中,需要通过zip文件解析,获取解析后的文件流,存储在mFreshFromDisk成员中3. 文件解析准备好文件流后,则开始了文件解析的过程,OGRE中由MeshSerializer类型,负责模型二进制流的导入导出功能。最终形成一个完整的模型。4. 模型的内存结构Mesh最为一个整体,主要是由SubMesh组合而成的,每一个SubMesh包括材质、顶点数组、纹理数组、渲染类型和骨骼四项内容,依次读取Mesh文件中的信息,其中材质只是name标识,而在材质文件中根据name索引详细说明。在读取完子模型和骨骼后,下面存储的是模型的bounds和外接球半径,最后是EdgeData如此,一个模型文件的读取告一段落。引用计数的广泛应用纹理映射接下来,则进入了模型材质的准备阶段,其最关键的就是纹理的调度。首先将每一个SubMesh(包含材质名称,并在材质对应文件中有描述)封装为SubEntity,通过材质管理器构建出材质,设置到所属的SubEntity,通过load函数来进行纹理映射的实现。材质过程:T-Pass-TextureUnitStates-TexturePtr然后由纹理管理器创建出对应材质的纹理,如果共用则引用计数+1即可。纹理创建Prepare(prepare:do_image_io,mLoadedImages)纹理创建Load(GLTexture:createInternalResourcesImpl,HardwarePixelBuffer:blitFromMemory)通过纹理管理器完成了纹理映射的构建,prepare阶段主要完成纹理图片的buffer内容,而在load中则完成了纹理的映射l OGRE OpenGL纹理映射的关键点glGenTextures获取纹理名字glBindTexture设置纹理类型glTexImage2D绑定纹理信息glGetTexLevelParameterivglTexSubImage2D替换纹理信息l MipMap方式l 纹理调度全部加入内存,纹理管理器共用l 纹理配置文件数据库方式l GLHardwareVertexBuffer(vbo)模型绘制场景管理,(Plugin_OctreeSceneManager)各种过程后,我们从renderSingleObject开始说起,至于OGRE的场景管理,在以后讨论。绘制过程如下:1. _setTexture绑定使用的纹理(在renderSingleObject函数之前准备好)2. getRenderOperation:顶点数组和纹理数字赋给RO3. lights场景光照开启4. render绘制模型绘制关键点:glEnable(GL_TEXTURE_2D); /开始使用纹理缓冲glBindTexture(GL_TEXTURE_2D, texID); /选择当前使用的纹理缓冲glBindBufferARB(); / OGRE中使用vbo方式绘图glVertexPointer();/ 设置顶点数组的指针为顶点缓存glBindBufferARB();glTexCoordPointer();/ 设置顶点数组的指针为纹理坐标缓存glDrawElements(); /绘制glDisable()l vbo高速绘图(截取网上,OGRE中在GLHardwareVertexBuffer类中封装初始化阶段,而在绘制的时候避免差异化方式)初始化阶段:1.glGenBuffersARB(1, &nVBOVertices); /生成一个句柄2.glBindBufferARB(GL_ARRAY_BUFFER_ARB, nVBOVertices); /声明该句柄为一个vbo句柄,并选择之3.glBufferDataARB(GL_ARRAY_BUFFER_ARB, sizeof(vertices), vertices,GL_STATIC_DRAW); /将顶点集上传至server端使用阶段:1.glEnableClientState(GL_VERTEX_ARRAY); /开始使用vbo2.glBindBufferARB(GL_ARRAY_BUFFER_ARB, nVBOVertices); /选择当前使用的vbo3.glVertexPointer(3, GL_FLOAT, 0, BUFFER_OFFSET(0); /指定vbo顶点格式4.glDrawArrays( GL_TRIANGLES, 0, g_pMesh
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 地板安装技术考核试卷及答案
- 麻类打包储存工艺考核试卷及答案
- 养殖生态修复工艺考核试卷及答案
- 木片切割去翘曲定位打磨工艺考核试卷及答案
- 医药级原料药生产技术工艺考核试卷及答案
- 碱金属提纯工艺考核试卷及答案
- 阀门钎焊工艺考核试卷及答案
- 摩托车车灯装配工艺考核试卷及答案
- 棉布预缩工艺产业链拓展工艺考核试卷及答案
- 酒类发酵罐搅拌系统工艺考核试卷及答案
- 2025-2030中国余热回收行业市场现状供需分析及投资评估规划分析研究报告
- 无人机物流配送服务手册
- 见证取样送检计划方案
- 二年级上册语文课内阅读理解每日一练(含答案)
- 2025-2030年中国功率器件市场发展趋势规划研究报告
- 基层管理培训课程
- 宇宙飞船的发射与回收技术分析
- 2025农村租地合同农村租地合同范本
- 2024考研 政治 思维导图(马原)
- 物业小区安全生产管理制度
- 高血压性脑出血中国多学科诊治指南2020
评论
0/150
提交评论