笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术详解》电子工业出版社等。
CSDN视频网址:http://edu.csdn.net/lecturer/144
在前面读者已经学习了对模型的加密操作,在了解了3D加密模型的编写后,下面将代码编译出可执行文件,编译截图如下:
编译最终生成可执行文件目录如下:
接下来开始修改加密的方式,开发者可以自己定义模型的加密方式和模型的扩展名字,首先找到C3BFile.cpp文件,在上节中已经实现了。在这里只把修改的重点函数给读者展示一下,比如把扩展名字改成x3b,首先修改的类文件的save保存函数如下所示:
bool save(Settings * const&settings, modeldata::Model *model) { bool result = false; json::BaseJSONWriter *jsonWriter = 0; model->exportPart = settings->exportPart; if(settings->outType == FILETYPE_ALL || settings->outType == FILETYPE_C3T) { std::stringout = settings->outFile; int o = out.find_last_of("."); out = out.substr(0, o+1) + "c3t"; std::ofstream myfile; myfile.open (out.c_str(), std::ios::binary); log->status(log::sExportToG3DJ, out.c_str()); jsonWriter = newjson::JSONWriter(myfile); (*jsonWriter) << model; delete jsonWriter; result = true; myfile.close(); } if(settings->outType == FILETYPE_ALL || settings->outType == FILETYPE_C3B) { std::stringout = settings->outFile; int o = out.find_last_of("."); out = out.substr(0, o+1) + "x3b"; C3BFile file; file.AddModel(model); file.saveBinary(out); log->status(log::sExportToG3DB, out.c_str()); } log->status(log::sExportClose); return result; }保存的文件名字需要修改成x3b,另一个修改扩展函数中定义的扩展文件名字的代码如下所示:void setExtension(std::string&fn, constint&type) const { switch(type) { caseFILETYPE_FBX: returnsetExtension(fn, "fbx"); caseFILETYPE_G3DB: returnsetExtension(fn, "x3b"); caseFILETYPE_G3DJ: returnsetExtension(fn, "c3t"); default: returnsetExtension(fn, ""); } }转换保存后的模型文件格式是x3b,这样转换保存后的模型文件格式是x3b,接下来修改加密模块,打开C3BFile.cpp文件,如下所示:bool C3BFile::saveBinary(const std::string& filepath) { _file = fopen(filepath.c_str(), "w+b"); // 文件标识 //char identifier[] = {'C','3','B','/0'}; unsigned char identifier[] = {8,52,67,19}; fwrite(identifier, 1, sizeof(identifier), _file); //写入版本 fwrite(GPB_VERSION, 1, sizeof(GPB_VERSION), _file); _refTable.writeBinary(_file); if(_models) { _models->writeBinary(_file); } _refTable.updateOffset(_file); fclose(_file); return true; }已经将以前的代码注释掉了,修改成自定义的加密字符串,代码行如下所示:
unsigned char identifier[] = {8,52,67,19};通过工具fbx-conv生成的x3b模型如下:这样我们自己也可以对模型进行加密操作。
总结:
针对模型的加密已经完成,在这里也是告诉读者,针对3D模型是如何实现加密的,也是给读者提供了一种思路,程序员自己可以很容易的完成加密处理。模型加密的处理方式也是很多的,比如在模型的中间增加某个字段或者在模型插件中加入多个矩阵换算等等。
后面我会将其整理成书稿出版,敬请期待。。。。。。
新闻热点
疑难解答