Subversion Repositories gelsvn

Rev

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

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