void VulkanExampleBase::loadMesh(
	std::string filename,
	vkMeshLoader::MeshBuffer * meshBuffer,
	std::vector<vkMeshLoader::VertexLayout> vertexLayout,
	float scale)
{
	VulkanMeshLoader *mesh = new VulkanMeshLoader();

#if defined(__ANDROID__)
	mesh->assetManager = androidApp->activity->assetManager;
#endif

	mesh->LoadMesh(filename);
	assert(mesh->m_Entries.size() > 0);

	mesh->createVulkanBuffers(
		device,
		deviceMemoryProperties,
		meshBuffer,
		vertexLayout,
		scale);

	meshBuffer->dim = mesh->dim.size;

	delete(mesh);
}
示例#2
0
	// Load a mesh based on data read via assimp 
	// The other example will use the VulkanMesh loader which has some additional functionality for loading meshes
	void loadMesh()
	{
		VulkanMeshLoader *meshLoader = new VulkanMeshLoader();
		meshLoader->LoadMesh("./../data/models/voyager/voyager.obj");

		// Generate vertex buffer
		float scale = 1.0f;
		std::vector<Vertex> vertexBuffer;
		// Iterate through all meshes in the file
		// and extract the vertex information used in this demo
		for (uint32_t m = 0; m < meshLoader->m_Entries.size(); m++)
		{
			for (uint32_t i = 0; i < meshLoader->m_Entries[m].Vertices.size(); i++)
			{
				Vertex vertex;

				vertex.pos = meshLoader->m_Entries[m].Vertices[i].m_pos * scale;
				vertex.normal = meshLoader->m_Entries[m].Vertices[i].m_normal;
				vertex.uv = meshLoader->m_Entries[m].Vertices[i].m_tex;
				vertex.color = meshLoader->m_Entries[m].Vertices[i].m_color;

				vertexBuffer.push_back(vertex);
			}
		}
		uint32_t vertexBufferSize = vertexBuffer.size() * sizeof(Vertex);

		// Generate index buffer from loaded mesh file
		std::vector<uint32_t> indexBuffer;
		for (uint32_t m = 0; m < meshLoader->m_Entries.size(); m++)
		{
			uint32_t indexBase = indexBuffer.size();
			for (uint32_t i = 0; i < meshLoader->m_Entries[m].Indices.size(); i++)
			{
				indexBuffer.push_back(meshLoader->m_Entries[m].Indices[i] + indexBase);
			}
		}
		uint32_t indexBufferSize = indexBuffer.size() * sizeof(uint32_t);
		mesh.indices.count = indexBuffer.size();

		// Generate vertex buffer
		createBuffer(
			VK_BUFFER_USAGE_VERTEX_BUFFER_BIT,
			vertexBufferSize,
			vertexBuffer.data(),
			&mesh.vertices.buf,
			&mesh.vertices.mem);

		// Generate index buffer
		createBuffer(
			VK_BUFFER_USAGE_INDEX_BUFFER_BIT,
			indexBufferSize,
			indexBuffer.data(),
			&mesh.indices.buf,
			&mesh.indices.mem);

		delete(meshLoader);
	}