当前位置: 首页>>代码示例>>C++>>正文


C++ Bone::SetIndex方法代码示例

本文整理汇总了C++中Bone::SetIndex方法的典型用法代码示例。如果您正苦于以下问题:C++ Bone::SetIndex方法的具体用法?C++ Bone::SetIndex怎么用?C++ Bone::SetIndex使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Bone的用法示例。


在下文中一共展示了Bone::SetIndex方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: Load

AEResult Skeleton::Load()
{
	std::lock_guard<std::mutex> lock(m_GameResourceMutex);

	AEAssert(!m_FileName.empty());
	if(m_FileName.empty())
	{
		return AEResult::EmptyFilename;
	}
	
	/////////////////////////////////////////////
	//Clean Up memory before loading File
	CleanUp();

	AEResult ret = AEResult::Ok;
	
	/////////////////////////////////////////////
	//Start reading file
	std::ifstream skeletonFile;

	skeletonFile.open(m_FileName, std::ios::binary | std::ios::in);

	if(!skeletonFile.is_open())
	{
		AETODO("add log");

		return AEResult::OpenFileFail;
	}

	char* tempPtr = nullptr;
	uint32_t sizeToRead = 0;
	
	/////////////////////////////////////////////
	//Verify Header
	bool verifyHeader = AEGameContentHelpers::ReadFileHeaderAndVerify(skeletonFile, AE_CT_AE3DS_FILE_HEADER, AE_CT_AE3DS_FILE_VERSION_MAYOR, AE_CT_AE3DS_FILE_VERSION_MINOR, AE_CT_AE3DS_FILE_VERSION_REVISON);

	if(!verifyHeader)
	{
		AETODO("Add log");

		return AEResult::InvalidFileHeader;
	}

	/////////////////////////////////////////////
	//Read Number of Bones
	uint32_t numBones = 0;
	tempPtr = reinterpret_cast<char*>(&numBones);
	sizeToRead = sizeof(uint32_t);
	skeletonFile.read(tempPtr, sizeToRead);
	
	/////////////////////////////////////////////
	//Read Bones
	for(uint32_t i = 0; i < numBones; ++i)
	{
		Bone* bone = new Bone();
		glm::mat4 tempMat = AEMathHelpers::Mat4Identity;
		int32_t tempInt32 = 0;

		/////////////////////////////////////////////
		//Write name of Bone and size of Name
		bone->SetName(AEGameContentHelpers::ReadString(skeletonFile));

		/////////////////////////////////////////////
		//Read Bone Matrices
		sizeToRead = sizeof(glm::mat4);
		tempPtr = reinterpret_cast<char*>(&tempMat);

		//Local Matrix
		skeletonFile.read(tempPtr, sizeToRead);
		bone->SetLocalMatrix(tempMat);

		//World Matrix
		skeletonFile.read(tempPtr, sizeToRead);
		bone->SetWorldMatrix(tempMat);
		 
		//Off Set Matrix
		skeletonFile.read(tempPtr, sizeToRead);
		bone->SetOffSetMatrix(tempMat);
		
		/////////////////////////////////////////////
		//Read Bone Indices
		tempPtr = reinterpret_cast<char*>(&tempInt32);
		sizeToRead = sizeof(int32_t);

		//Parent Index
		skeletonFile.read(tempPtr, sizeToRead);
		bone->SetParentIndex(tempInt32);

		//Bone Index
		skeletonFile.read(tempPtr, sizeToRead);
		bone->SetIndex(tempInt32);
		
		/////////////////////////////////////////////
		//Add Bone to Skeleton
		m_BoneHierarchy.push_back(bone);
	}
	
	/////////////////////////////////////////////
	//Read Footer 
	bool verifyFooter = AEGameContentHelpers::ReadFileFooterAndVerify(skeletonFile, AE_CT_AE3DS_FILE_FOOTER);
//.........这里部分代码省略.........
开发者ID:dtbinh,项目名称:Arenal-Engine,代码行数:101,代码来源:Skeleton.cpp


注:本文中的Bone::SetIndex方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。