Skip to content

Archive

Archive for November, 2012
在KlayGE开发版中,C++11的部分特性第一次被采用。目前用到的有两处,nullptr和强类型enum。所有这些C++11 only的代码都被放入#ifdef /#endif,同时提供了非C++11的替代实现。 nullptr nullptr是C++11定义的强类型空指针,用来取代NULL。强类型的保证减少了bug的可能性,相关的介绍很容易找到,这里就不累赘了。在不支持C++11的编译器上,也可以实现一个同样功能的nullptr: const class nullptr_t { public: template operator T*() const { return reinterpret_cast(0); } template operator T C::*() const { return reinterpret_cast(0); } private: void operator&() const; } nullptr = {}; 强类型enum ...
在压缩tangent frame一文中,我们看到了把tangent frame压缩到4个字节的方法。现在让我们看看如何压缩其他属性,以达到减小顶点数据的目的。 顶点属性 首先看看完整的顶点都包含了哪些属性: 属性 类型 大小(字节) 备注 position float3 12 texcoord float2 8 tangent float3 12 binormal float3 12 normal float3 12 blend_index uint4 16 骨骼动画模型才有 blend_weight float4 16 骨骼动画模型才有 总共 88 经过tangent frame压缩,同时一般引擎都会把blend_index和blend_weight存入uint32,顶点格式就成了: 属性 类型 大小(字 ...
最近,在KlayGE的开发版中,正式加入了MeshMLLib这个独立子库。这也是在KlayGE 4.2的计划中。顾名思义,MeshMLLib是用来与KlayGE的模型格式MeshML打交道的库。去年在计划Maya的导出插件时,就想过把3DSMax和Maya的插件后端统一,以简化插件的开发。时至今日,该目标终于完成。 MeshMLLib简介 MeshMLLib目前可以编译成.lib的库,静态链接到别的程序中。它的目标就是让程序可以很简单地生成.meshml格式的文件,以供KlayGE载入。因此插件和转换器就不需要总写重复代码,开发和测试都更加方便。 MeshML简介 MeshML是KlayGE的模型格式,基于xml。在设计上,MeshML参考了idSoftware的MD5。支持静态模型、骨骼动画,在新版本中还增加了动画压缩 ...