摘要: 截至昨天晚上,XFile的解析算是基本完成了。从最初的简单mesh数据的解析到关键帧动画的解析,到最后的skin mesh动画的解析,自己也学到了很多东西。这里只记录点解析过程中遇到的问题以作以后参考。一、panda direxctx 导出时是否优化的问题在panda directx插件的导出选项中有一个对导出mesh是的优化选项。此选项如果选择优化,在使用CXFileMesh及其子类时,模型的法线会产生一定数量的偏差(这个问题当然可以改进,但目前还没有改进的必要)。偏差是因为优化后的数据,重复顶点会被去掉,而顶点法线使用索引的形式与顶点相关联。只所以没有改进这个问题是因为:在游戏中常常使用的 阅读全文
posted @ 2011-09-12 15:53 yaoyao_cn 阅读(298) 评论(0) 推荐(0) 编辑
摘要: 一、mesh 数据储存方式的修改由于在设计CXFileMesh类时考虑不够全面,原CXFileMesh 类内部储存mesh数据采用的是vector模板。这使后来试图为该类添加支持3dsmax关键帧动画功能时带来很大麻烦。最后还是对CXFileMesh 类做了整体修改:用二叉树储存mesh数据!最后继承出来的CXFileEx类成功的支持了3dsmax导出的任何形式的关键帧动画!(缺点:插件导出选项中只能先择sub frame hierachy 格式的动画)二、Draw()函数的修改由于使用了二叉树结构,在原来的Draw()函数内部调用void CXFileMesh::DrawFrame( XFi 阅读全文
posted @ 2011-09-12 15:52 yaoyao_cn 阅读(229) 评论(0) 推荐(0) 编辑
摘要: 由ZeroMemory()引起的内存泄漏class CX{public:CX(){ ZeroMemory(this, sizeof(CX)); }……}注意上面的构造函数中ZeroMemory()的使用:这样的构造函数是一种偷懒的写法,如果CX中数据成员都是基本类型的数据这样写完全没有问题。但如果数据成员中有其它自定义类型的数据类型,这时候很容易引起内存泄漏,并且这样的内存泄漏非常不容易察觉。如下面的CB类就会引起内存泄漏:class CD{public:CD(){m_str = new char[100];}~CD(){ if(m_str) delete[] m_str;}char* m_. 阅读全文
posted @ 2011-09-12 10:09 yaoyao_cn 阅读(235) 评论(0) 推荐(0) 编辑
摘要: 一、UNICODE字符串和MBCS字符串的相互转换:1.从MBCS到UNICODE的转换BOOL DXUTMByteToWChar( LPCSTR lpcszStr, LPWSTR lpwszStr, DWORD dwSize ){DWORD dwMinSize;dwMinSize = MultiByteToWideChar (CP_ACP, 0, lpcszStr, -1, NULL, 0);if(dwSize < dwMinSize){return FALSE;}MultiByteToWideChar (CP_ACP, 0, lpcszStr, -1, lpwszStr, dwMin 阅读全文
posted @ 2011-09-12 10:07 yaoyao_cn 阅读(413) 评论(0) 推荐(0) 编辑