From 75c9e445453b0f0e58283d3fca282709d7d32ade Mon Sep 17 00:00:00 2001 From: Andrzej Kapolka Date: Mon, 3 Mar 2014 15:33:37 -0800 Subject: [PATCH] Render the billboard if we don't have both models. Closes #2178. --- interface/src/avatar/Avatar.cpp | 9 ++++----- interface/src/avatar/AvatarManager.cpp | 3 ++- interface/src/avatar/AvatarManager.h | 4 ++++ 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/interface/src/avatar/Avatar.cpp b/interface/src/avatar/Avatar.cpp index 7ada8b0764..be549beeba 100644 --- a/interface/src/avatar/Avatar.cpp +++ b/interface/src/avatar/Avatar.cpp @@ -112,7 +112,8 @@ glm::quat Avatar::getWorldAlignedOrientation () const { } float Avatar::getLODDistance() const { - return glm::distance(Application::getInstance()->getCamera()->getPosition(), _position) / _scale; + return Application::getInstance()->getAvatarManager().getLODDistanceMultiplier() * + glm::distance(Application::getInstance()->getCamera()->getPosition(), _position) / _scale; } void Avatar::simulate(float deltaTime) { @@ -305,13 +306,11 @@ glm::quat Avatar::computeRotationFromBodyToWorldUp(float proportion) const { } void Avatar::renderBody() { - if (_shouldRenderBillboard) { + if (_shouldRenderBillboard || !(_skeletonModel.isRenderable() && getHead()->getFaceModel().isRenderable())) { + // render the billboard until both models are loaded renderBillboard(); return; } - if (!(_skeletonModel.isRenderable() && getHead()->getFaceModel().isRenderable())) { - return; // wait until both models are loaded - } _skeletonModel.render(1.0f); getHead()->render(1.0f); getHand()->render(false); diff --git a/interface/src/avatar/AvatarManager.cpp b/interface/src/avatar/AvatarManager.cpp index 847baf782f..def93f034b 100644 --- a/interface/src/avatar/AvatarManager.cpp +++ b/interface/src/avatar/AvatarManager.cpp @@ -23,7 +23,8 @@ const QUuid MY_AVATAR_KEY; // NULL key AvatarManager::AvatarManager(QObject* parent) : - _avatarFades() { + _avatarFades(), + _lodDistanceMultiplier(1.0f) { // register a meta type for the weak pointer we'll use for the owning avatar mixer for each avatar qRegisterMetaType >("NodeWeakPointer"); _myAvatar = QSharedPointer(new MyAvatar()); diff --git a/interface/src/avatar/AvatarManager.h b/interface/src/avatar/AvatarManager.h index db24d5bf4e..47bc8fd34b 100644 --- a/interface/src/avatar/AvatarManager.h +++ b/interface/src/avatar/AvatarManager.h @@ -33,6 +33,8 @@ public: void clearOtherAvatars(); + float getLODDistanceMultiplier() const { return _lodDistanceMultiplier; } + public slots: void processAvatarMixerDatagram(const QByteArray& datagram, const QWeakPointer& mixerWeakPointer); @@ -52,6 +54,8 @@ private: QVector _avatarFades; QSharedPointer _myAvatar; + + float _lodDistanceMultiplier; }; #endif /* defined(__hifi__AvatarManager__) */