void RenderObj::Reset() { D3DXMatrixIdentity(&m_d3dmTranslate); D3DXMatrixIdentity(&m_d3dmRotate); D3DXMatrixIdentity(&m_d3dmScale); D3DXMatrixIdentity(&m_d3dmTransform); D3DXMatrixIdentity(&m_d3dmFace); //AbsoluteRotate(0.0f, 0.0f, 0.0f); AbsoluteScale(1.0f, 1.0f, 1.0f); m_fRotationX = m_fRotationY = m_fRotationZ = 0.0f; m_d3dmFace._41 = 0.0f; m_d3dmFace._42 = 0.0f; m_d3dmFace._43 = -1.0f; }
glm::vec3 TransformSystem::AbsoluteScale(EntityWrapper entity) { if (!entity.Valid()) { return glm::vec3(1.f); } auto cacheIt = ScaleCache.find(entity); ComponentWrapper cTransform = entity["Transform"]; ComponentWrapper::SubscriptProxy cTransformScale = cTransform["Scale"]; if (cacheIt != ScaleCache.end() && !cTransformScale.Dirty(DirtySetType::Transform)) { return cacheIt->second; } else { EntityWrapper parent = entity.Parent(); // Calculate scale glm::vec3 scale = AbsoluteScale(parent) * (const glm::vec3&)cTransformScale; // Cache it ScaleCache[entity] = scale; RecalculatedPositions++; // Unset dirty flag cTransformScale.SetDirty(DirtySetType::Transform, false); return scale; } }
glm::mat4 TransformSystem::ModelMatrix(EntityWrapper entity) { //auto cacheIt = MatrixCache.find(entity); //ComponentWrapper cTransform = entity["Transform"]; //bool isDirty = cTransform["Position"].Dirty(DirtySetType::Transform) || cTransform["Orientation"].Dirty(DirtySetType::Transform) || cTransform["Scale"].Dirty(DirtySetType::Transform); //if (cacheIt != MatrixCache.end() && !isDirty && false) { // return cacheIt->second; //} else { glm::mat4 matrix = glm::translate(AbsolutePosition(entity)) * glm::toMat4(AbsoluteOrientation(entity)) * glm::scale(AbsoluteScale(entity)); // MatrixCache[entity] = matrix; return matrix; //} }