예제 #1
0
    void Mesh::load(ModelResources& modelResources)
    {
        CompressedFile file;
        file.open(m_filename, ios::in | ios::binary);
        if (file.is_open())
        {
            MeshVersion version;
            file.read(reinterpret_cast<char*>(&version), sizeof(MeshVersion));

            while (!file.eof())
            {
                m_subMeshes.emplace_back(SubMesh());
                if (!m_subMeshes.back().load(modelResources, file))
                {
                    m_subMeshes.pop_back();
                }
            }

            file.close();
        }
    }
GMorphMesh::GMorphMesh(zCVisual* sourceObject) : GVisual(sourceObject)
{
	// This must be a zCMorphMesh.
	zCMorphMesh* morphMesh = (zCMorphMesh*)sourceObject;
	zCProgMeshProto* mesh = morphMesh->GetStaticMesh();

	std::vector<ExTVertexStruct> vertices;
	std::vector<unsigned int> indices;
	std::vector<unsigned int> submeshIndexStarts;

	// Pack all vertices into the vectors above
	mesh->PackVertices<ExTVertexStruct, unsigned int>(vertices, indices, 0, submeshIndexStarts);

	// Create vertex and index-buffer for this mesh
	m_VertexBuffer = RAPI::REngine::ResourceCache->CreateResource<RAPI::RBuffer>();
	m_VertexBuffer->Init(vertices.data(), 
		vertices.size() * sizeof(ExTVertexStruct),
		sizeof(ExTVertexStruct),
		RAPI::EBindFlags::B_VERTEXBUFFER,
		RAPI::EUsageFlags::U_DYNAMIC,
		RAPI::ECPUAccessFlags::CA_WRITE);

	m_IndexBuffer = RAPI::REngine::ResourceCache->CreateResource<RAPI::RBuffer>();
	m_IndexBuffer->Init(indices.data(), 
		indices.size() * sizeof(unsigned int),
		sizeof(unsigned int),
		RAPI::EBindFlags::B_INDEXBUFFER);

	// Create objects for all submeshes
	for(unsigned int i=0;i<mesh->GetNumSubmeshes();i++)
	{		
		m_SubMeshes.push_back(SubMesh());
		m_SubMeshes.back().m_Material = GMaterial::GetFromSource(mesh->GetSubmesh(i).m_Material);
		m_SubMeshes.back().m_SourceMaterial = &mesh->GetSubmesh(i).m_Material;
		m_SubMeshes.back().m_SubMeshIndexStart = submeshIndexStarts[i];	
		m_SubMeshes.back().m_NumIndices = mesh->GetSubmesh(i).m_TriangleList.m_NumInArray * 3;
	}
}