TDME2  1.9.200
Face.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <array>
4 
5 #include <tdme/tdme.h>
8 
9 using std::array;
10 
12 
13 /**
14  * Represents a model face, consisting of vertex, normal, tangent and bitangent vectors, indices and texture coordinate
15  * @author andreas.drewke
16  */
18 {
20 
21 private:
22  Node* node { nullptr };
23  array<int32_t, 3> vertexIndices {{ -1, -1, -1 }};
24  array<int32_t, 3> normalIndices {{ -1, -1, -1 }};
25  array<int32_t, 3> textureCoordinateIndices {{ -1, -1, -1 }};
26  array<int32_t, 3> tangentIndices {{ -1, -1, -1 }};
27  array<int32_t, 3> bitangentIndices {{ -1, -1, -1 }};
28 
29  /**
30  * Prepared this face for indexed rendering
31  * @param indices indices
32  */
33  void setIndexedRenderingIndices(const array<int32_t, 3>& indices);
34 
35 public:
36  /**
37  * Public constructor
38  */
39  Face();
40 
41  /**
42  * Public constructor, requires vertex, normals indices
43  * we only support triangulated faces
44  * @param node model
45  * @param vi0 vertex index 0
46  * @param vi1 vertex index 1
47  * @param vi2 vertex index 2
48  * @param ni0 normal index 0
49  * @param ni1 normal index 1
50  * @param ni2 normal index 2
51  */
52  Face(Node* node, int32_t vi0, int32_t vi1, int32_t vi2, int32_t ni0, int32_t ni1, int32_t ni2);
53 
54  /**
55  * Public constructor, requires vertex, normals indices, texture coordinate indices
56  * we only support triangulated faces
57  * @param node model
58  * @param vi0 vertex index 0
59  * @param vi1 vertex index 1
60  * @param vi2 vertex index 2
61  * @param ni0 normal index 0
62  * @param ni1 normal index 1
63  * @param ni2 normal index 2
64  * @param vt0 texture coordinate index 0
65  * @param vt1 texture coordinate index 1
66  * @param vt2 texture coordinate index 2
67  */
68  Face(Node* node, int32_t vi0, int32_t vi1, int32_t vi2, int32_t ni0, int32_t ni1, int32_t ni2, int32_t vt0, int32_t vt1, int32_t vt2);
69 
70  /**
71  * @return node
72  */
73  inline Node* getNode() const {
74  return node;
75  }
76 
77  /**
78  * @return vertex indices
79  */
80  inline const array<int32_t, 3>& getVertexIndices() const {
81  return vertexIndices;
82  }
83 
84  /**
85  * @return normal indices
86  */
87  inline const array<int32_t, 3>& getNormalIndices() const {
88  return normalIndices;
89  }
90 
91  /**
92  * Set normal indices
93  * @param ni0 ni0
94  * @param ni1 ni1
95  * @param ni2 ni2
96  */
97  void setNormalIndices(int32_t ni0, int32_t ni1, int32_t ni2);
98 
99  /**
100  * Set up optional texture coordinate indices
101  * @param vt0 vtX
102  * @param vt1 vtY
103  * @param vt2 vtZ
104  */
105  void setTextureCoordinateIndices(int32_t vt0, int32_t vt1, int32_t vt2);
106 
107  /**
108  * @return texture coordinate indices or null (optional)
109  */
110  inline const array<int32_t, 3>& getTextureCoordinateIndices() const {
112  }
113 
114  /**
115  * Set tangent indices
116  * @param ti0 ti0
117  * @param ti1 ti1
118  * @param ti2 ti2
119  */
120  void setTangentIndices(int32_t ti0, int32_t ti1, int32_t ti2);
121 
122  /**
123  * @return tangent indices
124  */
125  inline const array<int32_t, 3>& getTangentIndices() const {
126  return tangentIndices;
127  }
128 
129  /**
130  * Set bitangent indices
131  * @param bi0 bi0
132  * @param bi1 bi1
133  * @param bi2 bi2
134  */
135  void setBitangentIndices(int32_t bi0, int32_t bi1, int32_t bi2);
136 
137  /**
138  * @return bi tangent indices
139  */
140  inline const array<int32_t, 3>& getBitangentIndices() const {
141  return bitangentIndices;
142  }
143 
144  /**
145  * Change front face from counter clock wise to clock wise or clock wise to counter clock wise
146  */
147  void changeFrontFace();
148 
149 };
Represents a model face, consisting of vertex, normal, tangent and bitangent vectors,...
Definition: Face.h:18
void changeFrontFace()
Change front face from counter clock wise to clock wise or clock wise to counter clock wise.
Definition: Face.cpp:75
const array< int32_t, 3 > & getBitangentIndices() const
Definition: Face.h:140
array< int32_t, 3 > textureCoordinateIndices
Definition: Face.h:25
void setIndexedRenderingIndices(const array< int32_t, 3 > &indices)
Prepared this face for indexed rendering.
Definition: Face.cpp:66
array< int32_t, 3 > vertexIndices
Definition: Face.h:23
void setNormalIndices(int32_t ni0, int32_t ni1, int32_t ni2)
Set normal indices.
Definition: Face.cpp:38
void setTextureCoordinateIndices(int32_t vt0, int32_t vt1, int32_t vt2)
Set up optional texture coordinate indices.
Definition: Face.cpp:45
Face()
Public constructor.
Definition: Face.cpp:9
void setTangentIndices(int32_t ti0, int32_t ti1, int32_t ti2)
Set tangent indices.
Definition: Face.cpp:52
const array< int32_t, 3 > & getTextureCoordinateIndices() const
Definition: Face.h:110
array< int32_t, 3 > tangentIndices
Definition: Face.h:26
const array< int32_t, 3 > & getVertexIndices() const
Definition: Face.h:80
array< int32_t, 3 > normalIndices
Definition: Face.h:24
void setBitangentIndices(int32_t bi0, int32_t bi1, int32_t bi2)
Set bitangent indices.
Definition: Face.cpp:59
const array< int32_t, 3 > & getNormalIndices() const
Definition: Face.h:87
const array< int32_t, 3 > & getTangentIndices() const
Definition: Face.h:125
Node * getNode() const
Definition: Face.h:73
array< int32_t, 3 > bitangentIndices
Definition: Face.h:27
Model node.
Definition: Node.h:32
Model tools functions class.
Definition: ModelTools.h:42