Subversion Repositories gelsvn

Rev

Rev 338 | Rev 419 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
78 jab 1
#ifndef __MINI_MESH_H
2
#define __MINI_MESH_H
3
 
4
#include "IndexedFaceSet.h"
5
#include "Material.h"
6
 
79 jab 7
namespace Geometry
78 jab 8
{
9
 
10
 
89 jab 11
	/** \brief A Triangle Mesh struct. 
12
 
178 bj 13
	    This struct contains three indexed face sets, one for geometry,
14
			textures, and normals. It also contains a vector of materials and a
15
			vector of texture maps.
78 jab 16
 
178 bj 17
			A number of functions are defined allowing for rendering of the triangle
18
			mesh. */
338 jab 19
	class TriMesh 
78 jab 20
	{
338 jab 21
		public:
22
 
78 jab 23
		// ------- DATA -------
24
 
25
		/// Name of model
26
		std::string name;
27
 
28
		/// Indexed face set for the actual geometry
29
		IndexedFaceSet geometry;
30
 
31
		/// Indexed face set for the normals
32
		IndexedFaceSet normals;
33
 
34
		/// Indexed face set for the texture coordinates.
35
		IndexedFaceSet texcoords;
36
 
37
		/// Material indices for all faces
38
		std::vector<int> mat_idx;
39
 
40
		/// Texture indices for all faces
41
		std::vector<int> tex_idx;
42
 
43
		/// Vector of materials
44
		std::vector<Material> materials;
45
 
46
		// -------- FUNCTIONS -----------
47
 
48
		/// Get an axis aligned bounding box for the model.
375 jrf 49
		bool get_bbox(CGLA::Vec3f& p0, CGLA::Vec3f& p7) const;
78 jab 50
 
51
		/// Get a bounding sphere for the model.
375 jrf 52
		bool get_bsphere(CGLA::Vec3f& c, float& r) const;
78 jab 53
 
54
		/// Returns true if at least one normal has been defined.
55
		bool has_normals() const 
56
		{
57
			return normals.no_faces()>0;
58
		}
59
 
60
		/// Find a material from its name
61
		int find_material(const std::string&) const;
62
 
63
		/// Compute normals for the mesh. Does not check if there are normals.
64
		void compute_normals();
65
 
66
	};
67
 
68
 
69
}
70
#endif