コード例 #1
0
ファイル: texc.cpp プロジェクト: cmbruns/Doomsday-Engine
//===========================================================================
// GetTexture
//	Returns a def_t for the given texture. If it already exists, the earlier
//	definition is deleted.
//===========================================================================
def_t *GetTexture(char *name)
{
	def_t *it;

	for(it = root[group].next; it != &root[group]; it = it->next)
	{
		if(!stricmp(name, it->tex.name))
		{
			// This'll do.
			return it;
		}
	}
	// Not found, add a new definition.
	it = NewTexture();
	strcpy(it->tex.name, name);
	return it;
}
コード例 #2
0
ファイル: GmResMan.cpp プロジェクト: 0rel/okkuplektor
CGMeshMD5::CModel * CGmResMan::NewModelMD5( const char *pcFileNameMesh, const CArray<CStr> &roArrFileNameAnim, bool bTexSmooth )
{
	CGMeshMD5::CModel *poModel = 0;
	
	CStr oFileEntry( pcFileNameMesh );
	for( unsigned int i=0; i<roArrFileNameAnim.GetSize(); ++i )
	{
		oFileEntry += "&";
		oFileEntry += roArrFileNameAnim[i];
	}
	poModel = (CGMeshMD5::CModel *)FindFileEntry( oFileEntry.GetData() );
	if( !poModel )
	{
		poModel = new CGMeshMD5::CModel;

		//if( !MakeModelMD5_( poModel, pcFileNameMesh, roArrFileNameAnim, bTexSmooth ) )
		//{
		//	ERR( "ModelMD5 %s.\n", pcFileNameMesh );
		//	DELETE_INSTANCE( poModel );
		//	return 0;
		//}
		{
			if( !poModel->InitModel( DATA_DIR + /*"model/" +*/ pcFileNameMesh ) )
			{
				ERR( "ModelMD5 %s.\n", pcFileNameMesh );
				DELETE_INSTANCE( poModel );
				return 0;
			}
			
			CArray<CGTex2 *> oArrTex;
			const unsigned int uiMeshCount = poModel->GetMeshCount();
			oArrTex.Resize( uiMeshCount );
			oArrTex.Fill( 0 );
			unsigned int i = uiMeshCount;
			while( i )
			{
				--i;
				const char *pcMaterialName = poModel->GetMaterialName( i );
				if( pcMaterialName )
				{
					oArrTex[i] = NewTexture( pcMaterialName, bTexSmooth, false );
				}
			}
			
			const unsigned int uiAnimCount = roArrFileNameAnim.GetSize();
			for( unsigned int uiAnim=0; uiAnim<uiAnimCount; ++uiAnim )
			{
				LOG( "Loading %s.\n", roArrFileNameAnim[uiAnim].GetData() );
				
				if( poModel->InsertNewAnim( DATA_DIR + /*"model/" +*/ roArrFileNameAnim[uiAnim] ) )
				{
					for( unsigned int i=0; i<uiMeshCount; ++i )
					{
						if( oArrTex.GetSize() >= i && oArrTex[i] )
						{
							poModel->SetTex( i, uiAnim, oArrTex[i] );
						}
					}
				}
			}
			
			poModel->SetAnim( poModel->GetAnimCount() - 1 );
		}
		
		m_oArrModelMD5.Append( poModel );
		
		NewFileEntry( oFileEntry.GetData(), poModel );
	}
	else
	{
		LOG( "ModelMD5 skipped: %s.\n", pcFileNameMesh );
	}
	//else
	//{
	//	// copy with shared data
	//	poModel = new CGMeshMD5::CModel( *poModel );
	//	
	//	m_oArrModelMD5.Append( poModel );
	//	LOG( "ModelMD5 copied: %s.\n", pcFileNameMesh );
	//}
	return poModel;
}
コード例 #3
0
ファイル: GmResMan.cpp プロジェクト: 0rel/okkuplektor
void CGmResMan::NewMeshObj( const char *pcSubDir, const char *pcFileName, CArray<CGMeshObj *> &roArr, bool bTexSmooth, bool bRawPoly )
{
	roArr.Clear();
	
	CStr oPre( DATA_DIR + "model/" + pcSubDir );
	if( oPre[oPre.GetSize()-1] != '/' )
		oPre += '/';
	CFileBlockTxt oFile;
	if( oFile.Load( ( oPre + pcFileName ).GetData() ) )
	{
		LOG( "Loading %s.\n", ( oPre + pcFileName ).GetData() );
		CStr oMaterialLibName;
		if( CGMeshObj::LoadModel_( oFile.GetString(), &roArr, bRawPoly, &oMaterialLibName ) )
		{
			LOG( "%d OBJ-Meshes loaded.\n", roArr.GetSize() );
			
			bool bMtllibOk = false;
			CFileBlockTxt oFileMaterialLib;
			if( oMaterialLibName.GetSize() )
			{
				if( oFileMaterialLib.Load( ( oPre + oMaterialLibName ).GetData() ) )
				{
					//LOG( "\nmtllib:\n%s\n", (const char *)oFileMaterialLib.m_pucData );
					LOG( "%s loaded.\n", oMaterialLibName.GetData() );
					bMtllibOk = true;
				}
			}
			
			for( unsigned int i=0; i<roArr.GetSize(); ++i )
			{
				CGMeshObj *poMesh = roArr[i];
				//poMesh->RotateX( M_PI );
				//poMesh->ScaleX( 1.1f );
				//poMesh->ScaleY( 1.1f );
				//poMesh->ScaleZ( 1.1f );
				LOG( "\t%s\n", poMesh->m_oName.GetData() );
				LOG( "\t%d vertices\n", poMesh->m_oArrVertex.GetSize() );
				LOG( "\t%d indices\n", poMesh->m_oArrIndex.GetSize() );
				LOG( "\tmaterial: %s\n", poMesh->m_oMaterialName.GetData() );
				
				if( bMtllibOk )
				{
					CStr oTexNameDiffuse, oTexNameNormal;
					
					poMesh->LoadMaterial(
						oFileMaterialLib.GetString(),
						poMesh->m_oMaterialName,
						&oTexNameDiffuse, 0, &oTexNameNormal );
					
					if( !bRawPoly )
					{
						if( oTexNameDiffuse.GetSize() )
						{
							poMesh->SetTex( NewTexture( oTexNameDiffuse, bTexSmooth, false ), 0 );
						}
						if( oTexNameNormal.GetSize() )
						{
							poMesh->SetTex( NewTexture( oTexNameNormal, false, false ), 1 );
						}
					}
				}
				else if( !bRawPoly && poMesh->m_oMaterialName.GetSize() )
				{
					poMesh->SetTex( NewTexture( poMesh->m_oMaterialName, bTexSmooth, false ), 0 );
				}
				
				poMesh->m_bEnableColor = false; // Hat keine Funktion bei beim Wavefront Object Meshes.
				poMesh->Init();
				
				m_oArrMesh.Append( poMesh ); // new
			}
		}
	}
	else
	{
		ERR( "OBJ Mesh %s.\n", pcFileName );
	}
}
コード例 #4
0
ファイル: mblare.c プロジェクト: F5000/spree
D3DTEXTUREHANDLE LoadMBlareTexture(char *Name){
	static LPDIRECTDRAWSURFACE lpSurf;
	LPDIRECT3DTEXTURE2 lpComObj;
	return NewTexture(Name, &lpSurf,
                                  &lpComObj);
}