Example #1
0
bool Material::AddTexture(std::string textureName)
{
	TextureClass* texture = BE_NEW TextureClass;
	if (!texture)
	{
		return false;
	}

	if (!texture->Initialize(g_pApp->GetGraphicsManager()->GetRenderer()->GetDevice(), textureName))
	{
		return false;
	}

	m_material.Textures.push_back(texture);

	return true;
}
Example #2
0
void MeshClass::LoadModel(string filename)
{
    string sinput;
    string s;

    ifstream is(filename, ifstream::binary);
    if (is.fail())
    {
        throw GenericException("File not found");
    }

    // get length of file:
    is.seekg(0, is.end);
    int length = (int)is.tellg();
    is.seekg(0, is.beg);

    char * buffer = new char[length];
    
    // read data as a block:
    is.read(buffer, length);
        
    s.reserve(sizeof(char) *length);
    s = string(buffer);

    // ...buffer contains the entire file...

    delete[] buffer;
    is.close();

    string::iterator it = s.begin();

    MaterialClass* focusMaterial = 0;
    TextureClass* focusTexture = 0;
    ObjectMeshClass* focusObject = 0;
    MeshDataClass* focusMesh = 0;
    MeshDataClass::MeshColorType focusType;

    // For each object in the model
    while ((*it) != 'e')
    {
        //get next command
        sinput = readStringUntilSpace(&it);

        if (sinput.compare("vtn") == 0)
        {
            //Load vertices until a new object starts
            MeshDataClass::MeshDataType newMeshData = readVtnLine(&it);
            focusMesh->addMeshData(newMeshData);
            
            //Should auto skip the new line
            if ((*it) == 'm' || (*it) == 'o')
            {
                //Push the last mesh
                focusObject->addMesh(focusMesh);

            }
        }
        else if (sinput.compare("o") == 0)
        {
            //If your not the first object
            if (focusObject != 0)
            {
                //Push the last object
                m_allObjects.push_back(focusObject);
            }
            string objectName = readStringUntilNewL(&it);

            focusObject = new ObjectMeshClass();
            focusObject->Initialize(objectName);

            //Should auto skip to the next line
            
            //Check if you need to use the prev material
            if ((*it) == 'v')
            {
                focusMesh = new MeshDataClass();

                if (focusType == MeshDataClass::MeshColorType::MATERIAL)
                {
                    focusMesh->Initialize(focusMaterial);
                }
                else
                {
                    focusMesh->Initialize(focusTexture);
                }
            }
        }
        else if (sinput.compare("mtl") == 0)
        {
            focusMesh = new MeshDataClass();
            MaterialClass::MaterialInfo focusColorInfo = MaterialClass::MaterialInfo();

            focusColorInfo = readMtlLine(&it);

            if (focusColorInfo.map_Kd.compare("material") == 0)
            {
                MaterialClass* material = new MaterialClass();
                material->Initialize(focusColorInfo);

                focusType = MeshDataClass::MeshColorType::MATERIAL;

                focusMesh->Initialize(material);
            }
            else
            {
                TextureClass* texture = new TextureClass();
                texture->Initialize(WindowsHelpers::ToLWideStr("data\\" + focusColorInfo.map_Kd));

                focusTexture = texture;
                focusType = MeshDataClass::MeshColorType::TEXTURE;

                focusMesh->Initialize(texture);
            }

            //Should auto skip to the next line
        }    
        else if (sinput.compare("gun") == 0)
        {
            XMFLOAT3 newGun = readGunLine(&it);
            m_guns.push_back(newGun);
        }
    }

    //Add the last objects
    focusObject->addMesh(focusMesh);
    m_allObjects.push_back(focusObject);
}