Cocos2d-x 3.x 图形学渲染系列总结

栏目: IOS · 发布时间: 8年前

内容简介:Cocos2d-x 3.x 图形学渲染系列总结

笔者介绍: 姜雪伟 IT 公司技术合伙人, IT 高级讲师, CSDN 社区专家,特邀编辑,畅销书作者,国家专利发明人 ; 已出版书籍:《手把手教你 架构 3D 游戏引擎》电子工业出版社 和《 Unity3D 实战核心技术详解》电子工业出版社等。

CSDN视频网址: http://edu.csdn.net/lecturer/144

在前面读者已经学习了对模型的加密操作,在了解了3D加密模型的编写后,下面将代码编译出可执行文件,编译截图如下:

Cocos2d-x 3.x 图形学渲染系列总结

编译最终生成可执行文件目录如下:

Cocos2d-x 3.x 图形学渲染系列总结

接下来开始修改加密的方式,开发者可以自己定义模型的加密方式和模型的扩展名字,首先找到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模型如下:

Cocos2d-x 3.x 图形学渲染系列总结

这样我们自己也可以对模型进行加密操作。

总结:

针对模型的加密已经完成,在这里也是告诉读者,针对3D模型是如何实现加密的,也是给读者提供了一种思路,程序员自己可以很容易的完成加密处理。模型加密的处理方式也是很多的,比如在模型的中间增加某个字段或者在模型插件中加入多个矩阵换算等等。

后面我会将其整理成书稿出版,敬请期待。。。。。。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Game Programming Patterns

Game Programming Patterns

Robert Nystrom / Genever Benning / 2014-11-2 / USD 39.95

The biggest challenge facing many game programmers is completing their game. Most game projects fizzle out, overwhelmed by the complexity of their own code. Game Programming Patterns tackles that exac......一起来看看 《Game Programming Patterns》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换