コード例 #1
0
ファイル: Ase.cpp プロジェクト: RinM/CGA
void CLoadASE::GetTextureInfo (tMaterialInfo *pTexture, int desiredMaterial)
{
	char strWord[255] = {0};
	int materialCount= 0;
	
	rewind(m_FilePointer);

	while (!feof(m_FilePointer))
	{
		fscanf(m_FilePointer, "%s", &strWord);

		if (!strcmp(strWord, MATERIAL))
		{
			materialCount++;

			if(materialCount == desiredMaterial)
				break;
		}
		else
		{
			fgets(strWord, 100, m_FilePointer);
		}
	}

	while (!feof(m_FilePointer))
	{
		fscanf(m_FilePointer, "%s", &strWord);

		if (!strcmp (strWord, MATERIAL))
		{
			return;
		}
		else if (!strcmp(strWord, MATERIAL_COLOR))
		{
			fscanf(m_FilePointer, " %f %f %f", &(pTexture->fColor[0]), 
											   &(pTexture->fColor[1]), 
											   &(pTexture->fColor[2]));
		}
		else if (!strcmp(strWord, TEXTURE))
		{
			GetTextureName(pTexture);
		}
		else if (!strcmp(strWord, MATERIAL_NAME))
		{
			GetMaterialName(pTexture);
		}
		else if(!strcmp(strWord, UTILE))
		{
			pTexture->uTile = ReadFloat();
		}
		else if(!strcmp(strWord, VTILE))
		{
			pTexture->vTile = ReadFloat();
		}
		else
		{
			fgets (strWord, 100, m_FilePointer);
		}
	}
}
コード例 #2
0
ファイル: BillboardMarker.cpp プロジェクト: KFlaga/FlagRTS
	void BillboardMarker::LoadResources(Ogre::SceneManager* ogreMgr)
	{
		if(!_loaded)
		{
			auto def = GetBillboardMarkerDefinition();
			Ogre::BillboardSet* billSet= ogreMgr->createBillboardSet(def->GetPoolSize());
			billSet->setMaterialName(def->GetMaterialName(), def->GetMaterialGroup());
			billSet->setBillboardType((Ogre::BillboardType)def->GetBillboardType());
			billSet->setCommonUpVector(def->GetCommonUpVector());
			billSet->setCommonDirection(def->GetCommonDirection());
			billSet->setBillboardsInWorldSpace(def->GetIsBillboardInWorldSpace());
			billSet->setBillboardOrigin((Ogre::BillboardOrigin)def->GetBillboardOrigin());
			billSet->setDefaultDimensions(def->GetDefaultBillboardSize().x, 
				def->GetDefaultBillboardSize().y);
			billSet->setAutoextend(true);
			billSet->setAutoUpdate(def->GetBillboardAutoUpdate());
			billSet->setUseIdentityProjection(def->GetUseIdentityProjection());
			billSet->setUseIdentityView(def->GetUseIdentityView());
			billSet->Ogre::MovableObject::setUserAny(Ogre::Any(this));
			billSet->setBillboardRotationType(Ogre::BBR_VERTEX);

			_sceneObject = billSet;

			SceneMarker::LoadResources(ogreMgr);
			_loaded = true;
		}
	}
コード例 #3
0
ファイル: materials.cpp プロジェクト: whztt07/test_osg
    static inline const program_t& Create(const std::string& mat_name , const std::string& preprocessorDefinitions = std::string())
    {
        const uint16_t version = GLSL_VERSION;
        const std::string  comp_str = GLSL_VERSION>=150 ?" compatibility":"";

        const std::string  mat_name_cut = GetMaterialName(mat_name);

        if(GetPrograms().find(mat_name_cut)==GetPrograms().end())
        {
            program_t p;
            p.program = new osg::Program;
            p.program->setName(mat_name_cut);

            static osg::Shader* ssv = AddShader(shaders::VS, "shadow", version, comp_str, string());
            static osg::Shader* ssf = AddShader(shaders::FS, "shadow", version, comp_str, string());

            p.program->addShader( ssv );
            p.program->addShader( ssf );
            
            p.program->addShader( AddShader(shaders::VS, mat_name_cut, version, comp_str, preprocessorDefinitions));
            p.program->addShader( AddShader(shaders::FS, mat_name_cut, version, comp_str, preprocessorDefinitions));

            p.program->addBindAttribLocation( "tangent" , 6 );
            p.program->addBindAttribLocation( "binormal", 7 );

            GetPrograms()[mat_name_cut]=p;
        }

        return GetPrograms()[mat_name_cut];
    }
コード例 #4
0
ファイル: particles.cpp プロジェクト: BSVino/CodenameInfinite
void CParticleSystem::Load()
{
	if (IsLoaded())
		return;

	m_iReferences = 1;
	m_bLoaded = true;

	if (GetMaterialName().length() > 0)
		SetMaterial(CMaterialLibrary::AddMaterial(GetMaterialName()));

	if (GetModelName().length() > 0)
		SetModel(CModelLibrary::AddModel(GetModelName()));

	CParticleSystemLibrary::Get()->m_iParticleSystemsLoaded++;

	for (size_t i = 0; i < GetNumChildren(); i++)
		CParticleSystemLibrary::Get()->GetParticleSystem(GetChild(i))->Load();
}
コード例 #5
0
ファイル: skpmodel.cpp プロジェクト: pulkitag/skp2obj
int SkpModel::AddMaterial(SUMaterialRef mat){
	std::string name = GetMaterialName(mat);
	if (name=="")
		return 0;
	
	for (auto& x: mmap_){
		if (x.first==name)
			return 0;
	}

	//std::cout << name << "\n";
	Material* MyMat = new Material(mat);
	//std::cout << "Material Created" << "\n";
	mmap_.emplace(name, MyMat);
	//std::cout << "Material Added" << "\n";
	return 0;
}
コード例 #6
0
ファイル: ReadMD3.cpp プロジェクト: FujiGameJam/fuji
void ParseMD3File(char *pBuffer, uint32 bufferSize, const char *pFilename, const char *pSkin)
{
	int a,b;

	F3DMeshChunk *pMC = pModel->GetMeshChunk();
	F3DSkeletonChunk *pSC = pModel->GetSkeletonChunk();

	MD3Header *pHeader = (MD3Header*)pBuffer;

//	DBGASSERT(pHeader->ident == (('3'<<24) | ('P'<<16) | ('D'<<8) | 'I'), "Invalid MD3 header.");
//	DBGASSERT(pHeader->version == 15, "Invalid MD3 version.");
//	DBGASSERT(pHeader->offsetEnd == bufferSize, "Incorrect MD3 Size.");

	(char*&)pHeader->pTags += (uintp)pBuffer;
	(char*&)pHeader->pSurfaces += (uintp)pBuffer;

	// read materials
	if(pSkin)
	{
		char *pT, *pTok = MFString_Chr(pSkin, ',');

		while(pTok)
		{
			++pTok;
			for(pT = pTok; *pT != 0 && *pT != '\r' && *pT != '\n'; ++pT) { }

			// get texture name
			char *pTT = pT - (uintp)pTok;
			char *pMaterialName = (char*)MFStrN(pTok, (int&)pTT);

			for(pT = pMaterialName+MFString_Length(pMaterialName); pT > pMaterialName && pT[-1] != '/' && pT[-1] != '\\' && pT[-1] != '\n' && pT[-1] != '\r'; --pT) { }
			pT[MFString_Length(pT) - 4] = 0;

			if(*pT && pModel->GetMaterialChunk()->GetMaterialIndexByName(pT) == -1)
			{
				F3DMaterial &mat = pModel->GetMaterialChunk()->materials.push();

				mat.name = pT;
				mat.maps[0] = pT;
			}

			pTok = MFString_Chr(pTok, ',');
		}
	}

	// process bones
	for(a=0; a<pHeader->numTags; a++)
	{
		F3DBone &bone = pSC->bones.push();

		bone.name = pHeader->pTags[a].tagName;

		bone.worldMatrix.SetXAxis3(MakeVector(pHeader->pTags[a].rotationMatrix[0][0], pHeader->pTags[a].rotationMatrix[0][1], pHeader->pTags[a].rotationMatrix[0][2]));
		bone.worldMatrix.SetYAxis3(MakeVector(pHeader->pTags[a].rotationMatrix[1][0], pHeader->pTags[a].rotationMatrix[1][1], pHeader->pTags[a].rotationMatrix[1][2]));
		bone.worldMatrix.SetZAxis3(MakeVector(pHeader->pTags[a].rotationMatrix[2][0], pHeader->pTags[a].rotationMatrix[2][1], pHeader->pTags[a].rotationMatrix[2][2]));
		bone.worldMatrix.SetTrans3(MakeVector(pHeader->pTags[a].origin[0], pHeader->pTags[a].origin[1], pHeader->pTags[a].origin[2]));
	}

	// process mesh
	for(a=0; a<pHeader->numSurfaces; a++)
	{
//		DBGASSERT(pHeader->pSurfaces->identity == (('3'<<24) | ('P'<<16) | ('D'<<8) | 'I'), "Invalid MD3 surface header.");

		(char*&)pHeader->pSurfaces->pTextureCoords += (uintp)pHeader->pSurfaces;
		(char*&)pHeader->pSurfaces->pTriangles += (uintp)pHeader->pSurfaces;
		(char*&)pHeader->pSurfaces->pVertices += (uintp)pHeader->pSurfaces;

		F3DSubObject &sub = pMC->subObjects.push();
		F3DMaterialSubobject &matSub = sub.matSubobjects[0];

		// read subobject name
		sub.name = pHeader->pSurfaces->surfaceName;

		// find material info
		matSub.materialIndex = pModel->GetMaterialChunk()->GetMaterialIndexByName(GetMaterialName(pSkin, sub.name.CStr()));

		// create one colour (white)
		sub.colours.resize(1);
		sub.colours[0] = MFVector::one;

		// read vertex data
		sub.uvs.resize(pHeader->pSurfaces->numVertices);
		sub.positions.resize(pHeader->pSurfaces->numVertices);
		sub.normals.resize(pHeader->pSurfaces->numVertices);

		for(b=0; b<pHeader->pSurfaces->numVertices; b++)
		{
			sub.uvs[b] = MakeVector(pHeader->pSurfaces->pTextureCoords[b].u, pHeader->pSurfaces->pTextureCoords[b].v);
			sub.normals[b] = MD3DecodeNormal(pHeader->pSurfaces->pVertices[b].encodedNormal);
			sub.positions[b] = MakeVector(pHeader->pSurfaces->pVertices[b].x, pHeader->pSurfaces->pVertices[b].y, pHeader->pSurfaces->pVertices[b].z);

			// scale vertex appropriately..
//			sub.positions[b].Mul3(sub.positions[b], 1.0f/6400.0f);
			sub.positions[b].Mul3(sub.positions[b], 1.0f/64.0f);

			matSub.vertices[b].colour = 0;
			matSub.vertices[b].normal = b;
			matSub.vertices[b].uv[0] = b;
			matSub.vertices[b].position = b;
		}

		// read triangles
		matSub.triangles.resize(pHeader->pSurfaces->numTriangles);

		for(b=0; b<pHeader->pSurfaces->numTriangles; b++)
		{
			matSub.triangles[b].v[0] = pHeader->pSurfaces->pTriangles[b].indices[0];
			matSub.triangles[b].v[1] = pHeader->pSurfaces->pTriangles[b].indices[2];
			matSub.triangles[b].v[2] = pHeader->pSurfaces->pTriangles[b].indices[1];
		}

		// skip to next surface
		(char*&)pHeader->pSurfaces += pHeader->pSurfaces->surfaceSize;
	}
}
コード例 #7
0
ファイル: c3ds.cpp プロジェクト: farys/Ball-Game
void C3DS::ParseChunk(stChunk* Chunk){
    while(Chunk->bytesRead < Chunk->length){
        stChunk tempChunk = {0, 0, 0};
        ReadChunk(&tempChunk);

        switch( tempChunk.ID){
        // HEADER OUR ENTRY POINT
        case EDIT3DS: //0x3D3D
            ParseChunk(&tempChunk);
            break;

            // MATERIALS
        case MATERIAL: //0xAFFF
            stMaterial newMaterial;
            m_pMaterials.push_back(newMaterial);
            m_iNumMaterials++;
            ParseChunk(&tempChunk);
            break;
        case MAT_NAME: //0xA000 - sz for hte material name "e.g. default 2"
            GetMaterialName(&tempChunk);
            break;
        case MAT_DIFFUSE:  // Diffuse Colour  //0xA020
            GetDiffuseColour(&tempChunk);
            break;
        case MAT_TEXMAP:  //0xA200 - if there's a texture wrapped to it where here
            ParseChunk(&tempChunk);
            break;
        case MAT_TEXFLNM: // 0xA300 -  get filename of the material
            GetTexFileName(&tempChunk);
            break;

            // OBJECT - MESH'S
        case NAMED_OBJECT:{
            stMesh newMesh;
            m_pMeshs.push_back(newMesh);
            m_iNumMeshs++;
            GetMeshObjectName(&tempChunk);
        }
            break;
        case OBJ_MESH:     //0x4100
            ParseChunk(&tempChunk);
            break;
        case MESH_VERTICES: //0x4110
            ReadMeshVertices(&tempChunk);
            break;
        case MESH_FACES: //0x4120
            ReadMeshFaces(&tempChunk);
            break;
        case MESH_TEX_VERT: //0x4140
            ReadMeshTexCoords(&tempChunk);
            break;
        case MESH_MATER: //0x4130
            ReadMeshMaterials(&tempChunk);
            break;

        default:
            SkipChunk(&tempChunk);
        }

        Chunk->bytesRead += tempChunk.length;
    }
}
コード例 #8
0
ファイル: 3ds.cpp プロジェクト: RadiumP/Computer-Graphics
void C3DS::ParseChunk(stChunk* Chunk)
{
	while(Chunk->bytesRead < Chunk->length)
	{
		stChunk tempChunk = {0};
		ReadChunk(&tempChunk);

		// DEBUG CHUNKS
		//char buf[2000];
		//sprintf(buf, "Chunk ID: %.4x\t Size: %d\n", tempChunk.ID, tempChunk.length);
		//debug_op(buf);

		switch( tempChunk.ID)
		{
		// HEADER OUR ENTRY POINT
		case EDIT3DS: //0x3D3D
			ParseChunk(&tempChunk);
			break;

		// MATERIALS
		case MATERIAL: //0xAFFF
			{
			stMaterial newMaterial;
			m_pMaterials.push_back(newMaterial);
			m_iNumMaterials++;
			}
			ParseChunk(&tempChunk);
			break;
		case MAT_NAME: //0xA000 - sz for hte material name "e.g. default 2"
			GetMaterialName(&tempChunk);
			break;
		case MAT_AMBIENT:
			GetAmbientColour(&tempChunk);
			break;
		case MAT_SPECULAR:
			GetSpecularColour(&tempChunk);
			break;
		case MAT_DIFFUSE:  // Diffuse Colour  //0xA020
			GetDiffuseColour(&tempChunk);
			break;
		case MAT_TEXMAP:  //0xA200 - if there's a texture wrapped to it where here
			ParseChunk(&tempChunk);
			break;
		case MAT_TEXFLNM: // 0xA300 -  get filename of the material
			GetTexFileName(&tempChunk);
			break;

		// OBJECT - MESH'S
		case NAMED_OBJECT: //0x4000
			{
			stMesh newMesh;
			m_pMeshs.push_back(newMesh);
			m_iNumMeshs++;
			GetMeshObjectName(&tempChunk);
			}
			break;
		case OBJ_MESH:     //0x4100
			ParseChunk(&tempChunk);
			break;
		case MESH_VERTICES: //0x4110
			ReadMeshVertices(&tempChunk);
			break;
		case MESH_FACES: //0x4120
			ReadMeshFaces(&tempChunk);
			break;
		case MESH_TEX_VERT: //0x4140
			ReadMeshTexCoords(&tempChunk);
			break;
		case MESH_MATER: //0x4130
			ReadMeshMaterials(&tempChunk);
			break;

		// ANIMATION
		case KEYF3DS:	//0xB000
			ParseChunk(&tempChunk);
			break;
		case ANIM_S_E_TIME:   //0xB008
			StartEndFrames(&tempChunk);
			break;
		case ANIM_OBJ:	//0xB002
			{
				stAnimation newAnimation;
				m_pAnimation.push_back(newAnimation);
				m_iNumAnimObjects++;
			}
			ParseChunk(&tempChunk);
			break;
		case ANIM_NAME:
			ReadNameOfObjectToAnimate(&tempChunk);
			break;
		case ANIM_PIVOT: // 0xB013
			ReadPivotPoint(&tempChunk);
			break;
		case ANIM_POS: // 0xB020
			ReadAnimPos(&tempChunk);
			break;
		case ANIM_ROT: //		0xB021
			ReadAnimRot(&tempChunk);
			break;
		case ANIM_SCALE: // 0xB022
			ReadAnimScale(&tempChunk); 
			break;

		default:
			SkipChunk(&tempChunk);
		}
		
		Chunk->bytesRead += tempChunk.length;
	}
}