Subversion Repositories gelsvn

Rev

Rev 595 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 595 Rev 601
1
/* ----------------------------------------------------------------------- *
1
/* ----------------------------------------------------------------------- *
2
 * This file is part of GEL, http://www.imm.dtu.dk/GEL
2
 * This file is part of GEL, http://www.imm.dtu.dk/GEL
3
 * Copyright (C) the authors and DTU Informatics
3
 * Copyright (C) the authors and DTU Informatics
4
 * For license and list of authors, see ../../doc/intro.pdf
4
 * For license and list of authors, see ../../doc/intro.pdf
5
 * ----------------------------------------------------------------------- */
5
 * ----------------------------------------------------------------------- */
6
 
6
 
7
/**
7
/**
8
 * @file TriMesh.h
8
 * @file TriMesh.h
9
 * @brief Triangle mesh class based on indexed face set data structure.
9
 * @brief Triangle mesh class based on indexed face set data structure.
10
 */
10
 */
11
 
11
 
12
#ifndef __GEOMETRY_TRIMESH_H__
12
#ifndef __GEOMETRY_TRIMESH_H__
13
#define __GEOMETRY_TRIMESH_H__
13
#define __GEOMETRY_TRIMESH_H__
14
 
14
 
15
#include <CGLA/Mat4x4f.h>
15
#include "../CGLA/Mat4x4f.h"
16
#include "IndexedFaceSet.h"
16
#include "IndexedFaceSet.h"
17
#include "Material.h"
17
#include "Material.h"
18
 
18
 
19
namespace Geometry
19
namespace Geometry
20
{
20
{
21
 
21
 
22
 
22
 
23
	/** \brief A Triangle Mesh struct. 
23
	/** \brief A Triangle Mesh struct. 
24
 
24
 
25
	    This struct contains three indexed face sets, one for geometry,
25
	    This struct contains three indexed face sets, one for geometry,
26
			textures, and normals. It also contains a vector of materials and a
26
			textures, and normals. It also contains a vector of materials and a
27
			vector of texture maps.
27
			vector of texture maps.
28
 
28
 
29
			A number of functions are defined allowing for rendering of the triangle
29
			A number of functions are defined allowing for rendering of the triangle
30
			mesh. */
30
			mesh. */
31
	class TriMesh 
31
	class TriMesh 
32
	{
32
	{
33
		public:
33
		public:
34
		
34
		
35
		// ------- DATA -------
35
		// ------- DATA -------
36
 
36
 
37
		/// Name of model
37
		/// Name of model
38
		std::string name;
38
		std::string name;
39
		
39
		
40
		/// Indexed face set for the actual geometry
40
		/// Indexed face set for the actual geometry
41
		IndexedFaceSet geometry;
41
		IndexedFaceSet geometry;
42
 
42
 
43
		/// Indexed face set for the normals
43
		/// Indexed face set for the normals
44
		IndexedFaceSet normals;
44
		IndexedFaceSet normals;
45
 
45
 
46
		/// Indexed face set for the texture coordinates.
46
		/// Indexed face set for the texture coordinates.
47
		IndexedFaceSet texcoords;
47
		IndexedFaceSet texcoords;
48
 
48
 
49
		/// Material indices for all faces
49
		/// Material indices for all faces
50
		std::vector<int> mat_idx;
50
		std::vector<int> mat_idx;
51
 
51
 
52
		/// Texture indices for all faces
52
		/// Texture indices for all faces
53
		std::vector<int> tex_idx;
53
		std::vector<int> tex_idx;
54
 
54
 
55
		/// Vector of materials
55
		/// Vector of materials
56
		std::vector<Material> materials;
56
		std::vector<Material> materials;
57
 
57
 
58
    /// Vector of triangle face areas
58
    /// Vector of triangle face areas
59
    std::vector<float> face_areas;
59
    std::vector<float> face_areas;
60
 
60
 
61
    /// Tabulated cumulative distribution function for sampling triangles according to area
61
    /// Tabulated cumulative distribution function for sampling triangles according to area
62
    std::vector<float> face_area_cdf;
62
    std::vector<float> face_area_cdf;
63
 
63
 
64
    /// Total surface area of the triangle mesh
64
    /// Total surface area of the triangle mesh
65
    float surface_area;
65
    float surface_area;
66
 
66
 
67
		// -------- FUNCTIONS -----------
67
		// -------- FUNCTIONS -----------
68
 
68
 
69
		/// Get an axis aligned bounding box for the model.
69
		/// Get an axis aligned bounding box for the model.
70
		bool get_bbox(CGLA::Vec3f& p0, CGLA::Vec3f& p7) const;
70
		bool get_bbox(CGLA::Vec3f& p0, CGLA::Vec3f& p7) const;
71
 
71
 
72
		/// Get a bounding sphere for the model.
72
		/// Get a bounding sphere for the model.
73
		bool get_bsphere(CGLA::Vec3f& c, float& r) const;
73
		bool get_bsphere(CGLA::Vec3f& c, float& r) const;
74
 
74
 
75
		/// Returns true if at least one normal has been defined.
75
		/// Returns true if at least one normal has been defined.
76
		bool has_normals() const 
76
		bool has_normals() const 
77
		{
77
		{
78
			return normals.no_faces()>0;
78
			return normals.no_faces()>0;
79
		}
79
		}
80
		
80
		
81
		/// Find a material from its name
81
		/// Find a material from its name
82
		int find_material(const std::string&) const;
82
		int find_material(const std::string&) const;
83
 
83
 
84
		/// Compute normals for the mesh. Does not check if there are normals.
84
		/// Compute normals for the mesh. Does not check if there are normals.
85
		void compute_normals();
85
		void compute_normals();
86
 
86
 
87
    /// Compute areas for all faces and total surface area.
87
    /// Compute areas for all faces and total surface area.
88
    void compute_areas();
88
    void compute_areas();
89
 
89
 
90
    /// Apply a transformation matrix to the mesh
90
    /// Apply a transformation matrix to the mesh
91
    void transform(CGLA::Mat4x4f m);
91
    void transform(CGLA::Mat4x4f m);
92
	};
92
	};
93
 
93
 
94
 
94
 
95
}
95
}
96
#endif
96
#endif
97
 
97