TDME2  1.9.200
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
ObjectNodeMesh.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <map>
4 #include <string>
5 #include <unordered_map>
6 #include <vector>
7 
8 #include <tdme/tdme.h>
9 #include <tdme/engine/fwd-tdme.h>
13 #include <tdme/engine/Engine.h>
14 #include <tdme/math/fwd-tdme.h>
15 #include <tdme/math/Matrix4x4.h>
16 #include <tdme/math/Vector2.h>
17 #include <tdme/math/Vector3.h>
19 
20 using std::map;
21 using std::string;
22 using std::unordered_map;
23 using std::vector;
24 
34 
35 /**
36  * Object node mesh specifically for rendering
37  * @author Andreas Drewke
38  */
40 {
41  friend class ModelUtilitiesInternal;
42  friend class ObjectBase;
44  friend class ObjectNode;
45  friend class ObjectNodeRenderer;
46  friend class EntityRenderer;
49 
50 private:
51  int instances;
53  Node* node { nullptr };
54  int faceCount;
55  const vector<Vector3>* vertices { nullptr };
56  const vector<Vector3>* normals { nullptr };
57  const vector<Vector3>* tangents { nullptr };
58  const vector<Vector3>* bitangents { nullptr };
59  const vector<Vector2>* textureCoordinates { nullptr };
60  vector<int32_t> indices;
61  vector<Vector3> transformedVertices;
62  vector<Vector3> transformedNormals;
63  vector<Vector3> transformedTangents;
64  vector<Vector3> transformedBitangents;
66  vector<unordered_map<string, Matrix4x4*>*> skinningMatrices;
67  vector<vector<Matrix4x4*>> jointsSkinningMatrices;
69 
71  vector<vector<float>> skinningJointWeight;
72 
74 
75  vector<vector<vector<Matrix4x4*>>> skinningJointTransformMatrices;
76 
77  bool skinning;
79 
81 
82  // forbid class copy
84 
85  /**
86  * Creates a object node mesh from node
87  * @param objectNodeRenderer object node renderer
88  * @param animationProcessingTarget animation processing target
89  * @param node node
90  * @param transformMatrices instances transformm matrices
91  * @param skinningMatrices instances skinning matrices
92  * @param instances instances
93  */
94  ObjectNodeMesh(ObjectNodeRenderer* objectNodeRenderer, Engine::AnimationProcessingTarget animationProcessingTarget, Node* node, const vector<unordered_map<string, Matrix4x4*>*>& transformMatrices, const vector<unordered_map<string, Matrix4x4*>*>& skinningMatrices, int instances);
95 
96  /**
97  * Computes skinning
98  * @param contextIdx context index
99  * @param objectBase object base
100  */
101  void computeSkinning(int contextIdx, ObjectBase* objectBase);
102 
103  /**
104  * Recreates node float buffers
105  */
106  void recreateBuffers();
107 
108  /**
109  * @return has recreated buffers
110  */
112  return recreatedBuffers == true;
113  }
114 
115  /**
116  * @return if buffers has been recreated and unsets state
117  */
118  bool getRecreatedBuffers();
119 
120  /**
121  * Set up vertex indices buffer
122  * @param renderer renderer
123  * @param contextIdx context index
124  * @param vboId vbo id
125  */
126  void setupVertexIndicesBuffer(Renderer* renderer, int contextIdx, int32_t vboId);
127 
128  /**
129  * Set up texture coordinates buffer
130  * @param renderer renderer
131  * @param contextIdx context index
132  * @param vboId vbo id
133  */
134  void setupTextureCoordinatesBuffer(Renderer* renderer, int contextIdx, int32_t vboId);
135 
136  /**
137  * Set up vertices buffer
138  * @param renderer renderer
139  * @param contextIdx context index
140  * @param vboId vbo id
141  */
142  void setupVerticesBuffer(Renderer* renderer, int contextIdx, int32_t vboId);
143 
144  /**
145  * Set up normals buffer
146  * @param renderer renderer
147  * @param contextIdx context index
148  * @param vboId vbo id
149  */
150  void setupNormalsBuffer(Renderer* renderer, int contextIdx, int32_t vboId);
151 
152  /**
153  * Set up tangents buffer
154  * @param renderer renderer
155  * @param contextIdx context index
156  * @param vboId vbo id
157  */
158  void setupTangentsBuffer(Renderer* renderer, int contextIdx, int32_t vboId);
159 
160  /**
161  * Set up bitangents buffer
162  * @param renderer renderer
163  * @param contextIdx context index
164  * @param vboId vbo id
165  */
166  void setupBitangentsBuffer(Renderer* renderer, int contextIdx, int32_t vboId);
167 
168  /**
169  * Set up render node object origins data buffer
170  * @param renderer renderer
171  * @param contextIdx context index
172  * @param vboId vbo id
173  */
174  void setupOriginsBuffer(Renderer* renderer, int contextIdx, int32_t vboId);
175 
176  /**
177  * Set up render node object lod data buffer
178  * @param renderer renderer
179  * @param contextIdx context index
180  * @param vboId vbo id
181  * @param lodLevel LOD level
182  */
183  void setupLodBuffer(Renderer* renderer, int contextIdx, int32_t vboId, int lodLevel);
184 
185 };
Engine main class.
Definition: Engine.h:131
Model node.
Definition: Node.h:32
Object node mesh specifically for rendering.
void setupOriginsBuffer(Renderer *renderer, int contextIdx, int32_t vboId)
Set up render node object origins data buffer.
void setupNormalsBuffer(Renderer *renderer, int contextIdx, int32_t vboId)
Set up normals buffer.
void setupVertexIndicesBuffer(Renderer *renderer, int contextIdx, int32_t vboId)
Set up vertex indices buffer.
Engine::AnimationProcessingTarget animationProcessingTarget
void computeSkinning(int contextIdx, ObjectBase *objectBase)
Computes skinning.
void setupLodBuffer(Renderer *renderer, int contextIdx, int32_t vboId, int lodLevel)
Set up render node object lod data buffer.
void setupTextureCoordinatesBuffer(Renderer *renderer, int contextIdx, int32_t vboId)
Set up texture coordinates buffer.
vector< vector< vector< Matrix4x4 * > > > skinningJointTransformMatrices
void recreateBuffers()
Recreates node float buffers.
void setupTangentsBuffer(Renderer *renderer, int contextIdx, int32_t vboId)
Set up tangents buffer.
ObjectNodeMesh(ObjectNodeRenderer *objectNodeRenderer, Engine::AnimationProcessingTarget animationProcessingTarget, Node *node, const vector< unordered_map< string, Matrix4x4 * > * > &transformMatrices, const vector< unordered_map< string, Matrix4x4 * > * > &skinningMatrices, int instances)
Creates a object node mesh from node.
void setupVerticesBuffer(Renderer *renderer, int contextIdx, int32_t vboId)
Set up vertices buffer.
vector< vector< Matrix4x4 * > > jointsSkinningMatrices
void setupBitangentsBuffer(Renderer *renderer, int contextIdx, int32_t vboId)
Set up bitangents buffer.
vector< unordered_map< string, Matrix4x4 * > * > skinningMatrices
Object node specifically for rendering.
Definition: ObjectNode.h:41
Interface to compute shader skinning shader program.
Matrix4x4 class representing matrix4x4 mathematical structure and operations for 3d space.
Definition: Matrix4x4.h:23
Vector2 class representing vector2 mathematical structure and operations with x, y components.
Definition: Vector2.h:20
Vector3 class representing vector3 mathematical structure and operations with x, y,...
Definition: Vector3.h:20
Float buffer class.
Definition: FloatBuffer.h:18
Short buffer class.
Definition: ShortBuffer.h:14
#define FORBID_CLASS_COPY(CLASS)
Definition: tdme.h:6