void AvatarManager::simulateAvatarFades(float deltaTime) { QVector<AvatarSharedPointer>::iterator fadingIterator = _avatarFades.begin(); const float SHRINK_RATE = 0.9f; const float MIN_FADE_SCALE = MIN_AVATAR_SCALE; render::ScenePointer scene = qApp->getMain3DScene(); render::PendingChanges pendingChanges; while (fadingIterator != _avatarFades.end()) { auto avatar = std::static_pointer_cast<Avatar>(*fadingIterator); avatar->startUpdate(); avatar->setTargetScale(avatar->getUniformScale() * SHRINK_RATE); if (avatar->getTargetScale() <= MIN_FADE_SCALE) { avatar->removeFromScene(*fadingIterator, scene, pendingChanges); // only remove from _avatarFades if we're sure its motionState has been removed from PhysicsEngine if (_motionStatesToRemoveFromPhysics.empty()) { fadingIterator = _avatarFades.erase(fadingIterator); } else { ++fadingIterator; } } else { avatar->simulate(deltaTime); ++fadingIterator; } avatar->endUpdate(); } scene->enqueuePendingChanges(pendingChanges); }
/** * Fijamos la escala de las particulas. Si el escalado uniforme esta activado solo se tendra en cuenta el valor de X * @param x Escalado en el eje X (1.0 = no escalado) * @param y Escalado en el eje Y (1.0 = no escalado) */ void SpriteParticleSystem::setScale(float x, float y) { //Si tenemos activado el escalado uniforme ambos valores tomaran el valor de la escala X if(!getUniformScale()) { m_scale.x = x; m_scale.y = y; } else { m_scale.x = x; m_scale.y = x; } }
template <> void payloadRender(const Overlay::Pointer& overlay, RenderArgs* args) { if (args) { if (overlay->getAnchor() == Overlay::MY_AVATAR) { auto batch = args->_batch; auto avatar = DependencyManager::get<AvatarManager>()->getMyAvatar(); glm::quat myAvatarRotation = avatar->getOrientation(); glm::vec3 myAvatarPosition = avatar->getPosition(); float angle = glm::degrees(glm::angle(myAvatarRotation)); glm::vec3 axis = glm::axis(myAvatarRotation); float myAvatarScale = avatar->getUniformScale(); Transform transform = Transform(); transform.setTranslation(myAvatarPosition); transform.setRotation(glm::angleAxis(angle, axis)); transform.setScale(myAvatarScale); batch->setModelTransform(transform); overlay->render(args); } else { overlay->render(args); } } }
GLfloat CC3Camera::getEffectiveFieldOfView() { return (GLfloat)MIN(getFieldOfView() / getUniformScale(), kMaxEffectiveFOV); }