//------------------------------------------------------------------------------ void PlacedInstance::removeFromScene() { assert(desc_); if (desc_ == dummy_desc_.get()) return; setLodLevel(NUM_LOD_LVLS); }
bool CalSubmesh::create(CalCoreSubmesh *pCoreSubmesh) { if(pCoreSubmesh == 0) { CalError::setLastError(CalError::INVALID_HANDLE, __FILE__, __LINE__); return false; } m_pCoreSubmesh = pCoreSubmesh; // reserve memory for the face vector m_vectorFace.reserve(m_pCoreSubmesh->getFaceCount()); m_vectorFace.resize(m_pCoreSubmesh->getFaceCount()); // set the initial lod level setLodLevel(1.0f); // set the initial material id m_coreMaterialId = -1; // check if the submesh instance must handle the vertex and normal data internally if(m_pCoreSubmesh->getSpringCount() > 0) { m_vectorVertex.reserve(m_pCoreSubmesh->getVertexCount()); m_vectorVertex.resize(m_pCoreSubmesh->getVertexCount()); m_vectorNormal.reserve(m_pCoreSubmesh->getVertexCount()); m_vectorNormal.resize(m_pCoreSubmesh->getVertexCount()); m_vectorPhysicalProperty.reserve(m_pCoreSubmesh->getVertexCount()); m_vectorPhysicalProperty.resize(m_pCoreSubmesh->getVertexCount()); // get the vertex vector of the core submesh std::vector<CalCoreSubmesh::Vertex>& vectorVertex = m_pCoreSubmesh->getVectorVertex(); // copy the data from the core submesh as default values int vertexId; for(vertexId = 0; vertexId < m_pCoreSubmesh->getVertexCount(); vertexId++) { // copy the vertex data m_vectorVertex[vertexId] = vectorVertex[vertexId].position; m_vectorPhysicalProperty[vertexId].position = vectorVertex[vertexId].position; m_vectorPhysicalProperty[vertexId].positionOld = vectorVertex[vertexId].position; // copy the normal data m_vectorNormal[vertexId] = vectorVertex[vertexId].normal; } m_bInternalData = true; } else { m_bInternalData = false; } return true; }
CalSubmesh::CalSubmesh(CalCoreSubmesh *coreSubmesh) { assert(coreSubmesh); m_pCoreSubmesh = coreSubmesh; // reserve memory for the face vector m_vectorFace.reserve(m_pCoreSubmesh->getFaceCount()); m_vectorFace.resize(m_pCoreSubmesh->getFaceCount()); // set the initial lod level setLodLevel(1.0f); // set the initial material id m_coreMaterialId = -1; //Setting the morph target weights m_vectorMorphTargetWeight.reserve(m_pCoreSubmesh->getCoreSubMorphTargetCount()); m_vectorMorphTargetWeight.resize(m_pCoreSubmesh->getCoreSubMorphTargetCount()); m_vectorAccumulatedWeight.reserve(m_pCoreSubmesh->getCoreSubMorphTargetCount()); m_vectorAccumulatedWeight.resize(m_pCoreSubmesh->getCoreSubMorphTargetCount()); m_vectorReplacementAttenuation.reserve(m_pCoreSubmesh->getCoreSubMorphTargetCount()); m_vectorReplacementAttenuation.resize(m_pCoreSubmesh->getCoreSubMorphTargetCount()); // Array is indexed by group, and there can't be more groups than there are morph targets. m_vectorSubMorphTargetGroupAttenuator.reserve(m_pCoreSubmesh->getCoreSubMorphTargetCount()); m_vectorSubMorphTargetGroupAttenuator.resize(m_pCoreSubmesh->getCoreSubMorphTargetCount()); m_vectorSubMorphTargetGroupAttenuation.reserve(m_pCoreSubmesh->getCoreSubMorphTargetCount()); m_vectorSubMorphTargetGroupAttenuation.resize(m_pCoreSubmesh->getCoreSubMorphTargetCount()); int morphTargetId; for(morphTargetId = 0; morphTargetId<m_pCoreSubmesh->getCoreSubMorphTargetCount();++morphTargetId) { m_vectorSubMorphTargetGroupAttenuator[ morphTargetId ] = -1; // No attenuator by default. m_vectorSubMorphTargetGroupAttenuation[ morphTargetId ] = 0.0f; // No attenuation by default. m_vectorMorphTargetWeight[morphTargetId] = 0.0f; m_vectorAccumulatedWeight[morphTargetId] = 0.0f; m_vectorReplacementAttenuation[morphTargetId] = ReplacementAttenuationNull; } // check if the submesh instance must handle the vertex and normal data internally if(m_pCoreSubmesh->getSpringCount() > 0) { m_vectorVertex.reserve(m_pCoreSubmesh->getVertexCount()); m_vectorVertex.resize(m_pCoreSubmesh->getVertexCount()); m_vectorNormal.reserve(m_pCoreSubmesh->getVertexCount()); m_vectorNormal.resize(m_pCoreSubmesh->getVertexCount()); m_vectorvectorTangentSpace.reserve(m_pCoreSubmesh->getVectorVectorTangentSpace().size()); m_vectorvectorTangentSpace.resize(m_pCoreSubmesh->getVectorVectorTangentSpace().size()); m_vectorPhysicalProperty.reserve(m_pCoreSubmesh->getVertexCount()); m_vectorPhysicalProperty.resize(m_pCoreSubmesh->getVertexCount()); // get the vertex vector of the core submesh std::vector<CalCoreSubmesh::Vertex>& vectorVertex = m_pCoreSubmesh->getVectorVertex(); // copy the data from the core submesh as default values int vertexId; for(vertexId = 0; vertexId < m_pCoreSubmesh->getVertexCount(); ++vertexId) { // copy the vertex data m_vectorVertex[vertexId] = vectorVertex[vertexId].position; m_vectorPhysicalProperty[vertexId].position = vectorVertex[vertexId].position; m_vectorPhysicalProperty[vertexId].positionOld = vectorVertex[vertexId].position; // copy the normal data m_vectorNormal[vertexId] = vectorVertex[vertexId].normal; } m_bInternalData = true; } else { m_bInternalData = false; } }