예제 #1
0
	//------------------------------
	ChunkLength MeshBase::calculateFacesMaterialsLength(CountType trianglesCount, const COLLADAFW::MaterialBindingArray& materialBindings)
	{
		// the size is determined by:
		// 1) the number of materials and their name length
		// 2) the triangles count

		if ( trianglesCount == 0)
		{
			return 0;
		}

		if ( materialBindings.empty() )
		{
			return 0;
			// TODO: This works only if either all faces have a material assigned or none
		}

		ChunkLength length = 0;
		// each triangle appears exactly once in a facenum array
		length += trianglesCount * sizeof(IndexType);

		ChunkLength materialsCount = (ChunkLength)materialBindings.getCount();

		//fix size for each material
		// empty chunk length of faces material
		// material name length
		// nFaces length
		length += (EMPTY_CHUNK_LENGTH + sizeof(CountType) + Writer::getMaterialNameLength() ) * materialsCount;

		return length;
	}
	//--------------------------------------------------------------------
	void Nebula3Writer::getMaterialBinding(NodeData& nodeData,const COLLADAFW::MaterialBindingArray& materialArray )
	{
		for (size_t j=0;j< materialArray.getCount();j++)
		{
			const MaterialBinding& material = materialArray[j];	
			const COLLADAFW::MaterialId materialId = material.getMaterialId();
			nodeData.materialDatas.Add(materialId,MaterialData());
			MaterialData& materialData = nodeData.materialDatas[materialId];
			materialData.materialId = materialId;
			materialData.materialUniqueId = material.getReferencedMaterial();
			const COLLADAFW::TextureCoordinateBindingArray& textureInfos = material.getTextureCoordinateBindingArray();
			for (size_t k=0;k< textureInfos.getCount();k++)
			{
				const TextureCoordinateBinding& textureInfo = textureInfos[k];
				const COLLADAFW::TextureMapId textureMapId = textureInfo.getTextureMapId();
				materialData.textureDatas.Add(textureMapId,MaterialData::TextureCoordData());
				MaterialData::TextureCoordData& textureData = materialData.textureDatas[textureMapId];
				textureData.texturemapId = textureMapId;
				textureData.uvSetIndex = textureInfo.getSetIndex();
				textureData.Semantic = textureInfo.getSemantic().c_str();
			}///end for
		}///end for
	}