这个需求可能比较古怪,一般Mesh我们组装好顶点,索引数据后,直接放入索引缓冲渲染就好了.但是如果有些特殊需要,如需要标注出Mesh的顶点,线,面这些信息,以及特殊显示这些信息. 最开始我想的是自己分析Mesh里的VertexData与IndexData,分析顶点时查找源码发现Ogre里本身有相关的类,这里Axiom3D与Ogre的源码有些区别,不过大致意思相同. 主要用到的类:EdgeListBuilder,CommonVertexList,EdgeData. 流程很简单,EdgeListBu…
在Axiom3D,或者说是Ogre的mesh的文件格式我们可能通过代码反推出相关格式,相关过程本来我是直接写的,后面发现相关流程写完后,我自己都看晕了,然后我就把一些过程用Execl整理出来,发现过程清晰多了,如下这张图: 这图是导入一个简单的mesh文件(没有包含动画)根据代码反推出的相关结构,这个Mesh文件的版本是1.30,不同的mesh版本格式略有不同,但是不会相差太大. 首先针对上面的图中一些需要注意的地方说下,其中上面的类型为Chunk的表示一个用ushort表示的类型,和这个Chu…
3D模型 通过3D建模软件所建出来的点和面,如以三角形为主的点和面,比如人的脑袋一个球,就是由各种各样的三角形组成的点和面. 点和面以及纹理坐标都是通过3D建模软件建模出来的. Unity会帮我们把模型的信息存到Mesh里面来,Mesh翻译成中文是网格. 顶点,三角形,纹理坐标,法线和切线. 3D建模软件 1:Autodesk 3D Studio Max 支持mac os windows;2: Autodesk 3D Maya 支持windows3: Cinema4D 支持mac os wind…
转自:http://blog.csdn.net/yanonsoftware/article/details/1031891 如果新开始写一个3D渲染引擎,Mesh应该是一个很好的切入点.当一个看似简单的Mesh渲染到窗口时,说明引擎的架构已经确定,并验证了.想了解Ogre内部的机制, 可以先看看Mesh的加载过程,这里主要涉及到Resource是如何管理的,Material是怎样处理的,Resource和HardwareBuffer是如何关联的.对于前面教程代码的执行过程做一下分析: 创建一个E…
在上文中,我们把Ogre里的网格分解成点线面后,我们要完成一个新的功能,在点上突出显示. 得到顶点位置后,这个功能也就是一个很简单的事,最开始是每个顶点添加一个子节点,节点上添加一个圆点. foreach (var vect in this.Points) { var cEntity = EntityBuilder.Instance.SphereX1.Clone(Guid.NewGuid().ToString()); cEntity.UserData = vect; var cNode = th…
在Axiom中,Animation类用于管理动画,在此对象中主要管理着AnimationTrack对象,此对象用于管理动画的各种类型的每一桢.在Axiom中,动画类型主要有变形动画,姿态动画,骨骼动画以及他们之间的混合.而此对象的各子类如NodeAnimationTrack常用于骨骼动画.而VertexAnimationTrack常用于顶点动画(包括变形动画与姿态动画),还有一种是NumericAnimationTrack用于扩展动画功能.而KeyFrame管理一桢,主要属性是当前桢的位置(ti…
最近在建词典,使用Trie字典树,需要把字符串分解成单个字.由于传入的字符串中可能包含中文或者英文,它们的字节数并不相同.一开始天真地认为中文就是两个字节,于是很happy地直接判断当前位置的字符的ASCII码是否处于0~127之间,如果是就提取一个字符,否则提取两个.在测试分字效果的时候,这种方法出了问题.比如我传一个"abcde一二三四五"进去,abcde可以正常分解成 a b c d e,而后面的"一二三四五"则成了乱码. 于是我开启了谷歌之旅,搜索"…
最近在建词典,使用Trie字典树,需要把字符串分解成单个字.由于传入的字符串中可能包含中文或者英文,它们的字节数并不相同.一开始天真地认为中文就是两个字节,于是很happy地直接判断当前位置的字符的ASCII码是否处于0~127之间,如果是就提取一个字符,否则提取两个.在测试分字效果的时候,这种方法出了问题.比如我传一个“abcde一二三四五”进去,abcde可以正常分解成 a b c d e,而后面的“一二三四五”则成了乱码. 于是我开启了谷歌之旅,搜索“如何在C++中将string中的中文分…
一个比较简单的需求,不过遇到些坑,记录下. 房间有多个模型,每个模型可能多个SubMesh,点击后,需要能具体到是那个SubMesh,并且在这个SubMesh上显示边缘高光,以及能个性这单个SubMesh对应的Material.如一个桌子的Mesh,其实有二个材质,分别对应二个SubMesh,一个桌面和一个桌脚,点击桌面后,只有这个桌面高光,而不是整个桌子,并且能单独更换这个桌面的Material. 我们知道Unity中,Mesh和Ogre一样,也是可以有多个SubMesh,每个SubMesh有…
在第一篇网络分解成点,线,面.第二篇分别点以球形,线以圆柱,面分别以MergerBatch整合批次显示.因为整合批次显示后,相应的点,线,面不能以Ogre本身的射线来选取,因为整合后,以点举例,多个点显示虽然不在一起,但是是一个Mesh.Ogre本身的检测只能检测到这里,在我们这不满足要求,相应的点,线,面检测都需要自己来计算. 在讲解本文之前,先看下射线的相关生成代码,只有先明白射线如何生成,生成最后是相对什么空间. [OgreVersion( , , , "Slightly differen…