5 #include <unordered_map>
33 using std::make_unique;
103 auto nodeVerticesTransformed = &objectNode->mesh->transformedVertices;
104 for (
const auto& facesEntity: objectNode->node->getFacesEntities())
105 for (
const auto& face: facesEntity.getFaces()) {
106 const auto& faceVertexIndices = face.getVertexIndices();
107 triangles.emplace_back(
108 (*nodeVerticesTransformed)[faceVertexIndices[0]],
109 (*nodeVerticesTransformed)[faceVertexIndices[1]],
110 (*nodeVerticesTransformed)[faceVertexIndices[2]]
116 auto nodeVerticesTransformed = &objectNode->mesh->transformedVertices;
117 for (
const auto& facesEntity: objectNode->node->getFacesEntities())
118 for (
const auto& face: facesEntity.getFaces()) {
119 const auto& faceVertexIndices = face.getVertexIndices();
120 triangles.emplace_back(
121 (*nodeVerticesTransformed)[faceVertexIndices[0]],
122 (*nodeVerticesTransformed)[faceVertexIndices[1]],
123 (*nodeVerticesTransformed)[faceVertexIndices[2]]
141 if (objectNode->node->getId() == nodeId) {
142 return objectNode->mesh;
156 if (objectNode->mesh ==
nullptr) {
157 vector<unordered_map<string, Matrix4x4*>*> instancesTransformMatrices;
158 vector<unordered_map<string, Matrix4x4*>*> instancesSkinningNodesMatrices;
159 for (
auto animation: objectNode->object->instanceAnimations) {
160 instancesTransformMatrices.push_back(&animation->transformMatrices[0]);
161 instancesSkinningNodesMatrices.push_back(animation->getSkinningNodesTransformMatrices(objectNode->node));
164 objectNode->mesh = meshManager->getMesh(objectNode->id);
165 if (objectNode->mesh ==
nullptr) {
167 objectNode->renderer.get(),
170 instancesTransformMatrices,
171 instancesSkinningNodesMatrices,
177 objectNode->renderer.get(),
180 instancesTransformMatrices,
181 instancesSkinningNodesMatrices,
196 objectNode->renderer->dispose();
198 objectNode->dispose();
201 meshManager->removeMesh(objectNode->id);
203 delete objectNode->mesh;
205 objectNode->mesh =
nullptr;
static Engine * getInstance()
Returns engine instance.
AnimationProcessingTarget
static MeshManager * getMeshManager()
Represents a model face, consisting of vertex, normal, tangent and bitangent vectors,...
Node faces entity A node can have multiple entities containing faces and a applied material.
Representation of a 3D model.
Skinning definition for nodes.
Bounding volume interface.
Triangle entity, this is not directly connectable with physics engine.
void getTriangles(vector< Triangle > &triangles, int nodeIdx=-1)
Retrieves list of triangles of all or given nodes.
virtual void initialize()
Initiates this object.
vector< Transform > instanceTransform
ObjectBase_TransformedFacesIterator * getTransformedFacesIterator()
friend class ObjectNodeMesh
vector< bool > instanceEnabled
Engine::AnimationProcessingTarget animationProcessingTarget
ObjectNodeMesh * getMesh(const string &nodeId)
Returns object node mesh object.
unique_ptr< ObjectBase_TransformedFacesIterator > transformedFacesIterator
virtual void dispose()
Disposes this object.
vector< ObjectAnimation * > instanceAnimations
virtual ~ObjectBase()
Destructor.
vector< ObjectNode * > objectNodes
Object node mesh specifically for rendering.
Object node VBO renderer.
Object node specifically for rendering.
static void computeAnimation(int contextIdx, vector< ObjectNode * > &objectNodes)
Computes animation for given object nodes.
static void createNodes(ObjectBase *object, bool useManagers, Engine::AnimationProcessingTarget animationProcessingTarget, vector< ObjectNode * > &objectNodes)
Creates object nodes from given object base object.
Matrix4x4 class representing matrix4x4 mathematical structure and operations for 3d space.
Vector3 class representing vector3 mathematical structure and operations with x, y,...