// -------------------------------------------------------------------------------
void FindSceneCenter (aiScene* scene, aiVector3D& out, aiVector3D& min, aiVector3D& max)
{
	if (scene->mNumMeshes == 0) return;
	FindMeshCenter(scene->mMeshes[0], out, min, max);
	for (unsigned int i = 1; i < scene->mNumMeshes; ++i)
	{
		aiVector3D tout, tmin, tmax;
		FindMeshCenter(scene->mMeshes[i], tout, tmin, tmax);
		if (min[0] > tmin[0]) min[0] = tmin[0];
		if (min[1] > tmin[1]) min[1] = tmin[1];
		if (min[2] > tmin[2]) min[2] = tmin[2];
		if (max[0] < tmax[0]) max[0] = tmax[0];
		if (max[1] < tmax[1]) max[1] = tmax[1];
		if (max[2] < tmax[2]) max[2] = tmax[2];
	}
	out = min + (max-min)*0.5f;
}
Ejemplo n.º 2
0
// -------------------------------------------------------------------------------
void FindMeshCenter (aiMesh* mesh, aiVector3D& out)
{
	aiVector3D min,max;
	FindMeshCenter(mesh,out,min,max);
}
Ejemplo n.º 3
0
	void Model::init_model(UString filePath)
	{
		std::string _path;
#if defined(VIX_SYS_WINDOWS) && defined(UNICODE)
		UConverter cv;
		_path = cv.to_bytes(filePath);
#else
		_path = filePath;
#endif

		Assimp::Importer imp;
		const aiScene* scene = imp.ReadFile(_path,
											aiProcess_CalcTangentSpace |
											aiProcess_Triangulate |
											aiProcess_JoinIdenticalVertices |
											aiProcess_SortByPType |
											aiProcess_GenUVCoords);
		if(!scene) {
		  //	DebugPrintF(VTEXT("ASSIMP: Error could not read file [%s]"), _path);
			return;
		}

		size_t numMeshes = scene->mNumMeshes;
		aiString diffuse;
		aiString bump;
		for(size_t i = 0; i < numMeshes; i++)
		{
			aiMesh* mesh = scene->mMeshes[i];
			size_t matIndex = mesh->mMaterialIndex;
			aiMaterial* mat = scene->mMaterials[matIndex];
			aiGetMaterialTexture(mat, aiTextureType_DIFFUSE, 0, &diffuse);
			aiGetMaterialTexture(mat, aiTextureType_HEIGHT, 0, &bump);
			aiColor4D color;
			aiGetMaterialColor(mat, AI_MATKEY_COLOR_DIFFUSE, &color);
			printf("MATCOLOR [%f, %f, %f, %f]\n", color.r, color.g, color.b, color.a);
			printf("MATTEXT [DIFFUSE: %s]\n", diffuse.data);
			printf("MATTEXT [BUMP: %s]\n", bump.data);

			/*INIT MODEL CENTROID, SIZE, MIN, AND MAX*/
			/*USED FOR COLLIDER*/
			aiVector3D min, max, center;
			FindMeshCenter(mesh, center, min, max);
			m_min = Vec3(min.x, min.y, min.z);
			m_max = Vec3(max.x, max.y, max.z);
			m_size = m_max - m_min;
			m_centroid = Vec3(center.x, center.y, center.z);

			InitMesh(mesh);
		}

		if(diffuse.C_Str()) {
		  UString texPath = Vixen::UStringFromCharArray(diffuse.data);
			m_texture = new GLTexture(texPath);
		}

		if(bump.C_Str()) {
		  UString texPath = Vixen::UStringFromCharArray(bump.data);
			m_bump = new GLTexture(texPath);
		}


		m_initialized = true;
	}