From e5becba4e959dbc789d5b83017ebd1c59cc3e754 Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Thu, 26 Oct 2017 20:38:07 -0700 Subject: [PATCH 01/17] migrate away from updateXXX standardize on setXXX --- .../src/RenderablePolyVoxEntityItem.cpp | 4 +- .../src/RenderablePolyVoxEntityItem.h | 2 +- libraries/entities/src/EntityItem.cpp | 197 +++++------------- libraries/entities/src/EntityItem.h | 15 +- 4 files changed, 67 insertions(+), 151 deletions(-) diff --git a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp index b11ab76c2f..e92bc636bd 100644 --- a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp @@ -641,10 +641,10 @@ ShapeType RenderablePolyVoxEntityItem::getShapeType() const { return SHAPE_TYPE_COMPOUND; } -void RenderablePolyVoxEntityItem::updateRegistrationPoint(const glm::vec3& value) { +void RenderablePolyVoxEntityItem::setRegistrationPoint(const glm::vec3& value) { if (value != _registrationPoint) { _meshDirty = true; - EntityItem::updateRegistrationPoint(value); + EntityItem::setRegistrationPoint(value); } } diff --git a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.h b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.h index fc12a2b5ee..6ac518f79b 100644 --- a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.h +++ b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.h @@ -98,7 +98,7 @@ public: std::shared_ptr getYPNeighbor(); std::shared_ptr getZPNeighbor(); - virtual void updateRegistrationPoint(const glm::vec3& value) override; + virtual void setRegistrationPoint(const glm::vec3& value) override; void setVoxelsFromData(QByteArray uncompressedData, quint16 voxelXSize, quint16 voxelYSize, quint16 voxelZSize); void forEachVoxelValue(const ivec3& voxelSize, std::function thunk); diff --git a/libraries/entities/src/EntityItem.cpp b/libraries/entities/src/EntityItem.cpp index 008ec9769f..41b5960667 100644 --- a/libraries/entities/src/EntityItem.cpp +++ b/libraries/entities/src/EntityItem.cpp @@ -737,7 +737,7 @@ int EntityItem::readEntityDataFromBuffer(const unsigned char* data, int bytesLef auto customUpdateRotationFromNetwork = [this, shouldUpdate, lastEdited](glm::quat value){ if (shouldUpdate(_lastUpdatedRotationTimestamp, value != _lastUpdatedRotationValue)) { - updateRotation(value); + setRotation(value); _lastUpdatedRotationTimestamp = lastEdited; _lastUpdatedRotationValue = value; } @@ -745,7 +745,7 @@ int EntityItem::readEntityDataFromBuffer(const unsigned char* data, int bytesLef auto customUpdateVelocityFromNetwork = [this, shouldUpdate, lastEdited](glm::vec3 value){ if (shouldUpdate(_lastUpdatedVelocityTimestamp, value != _lastUpdatedVelocityValue)) { - updateVelocity(value); + setVelocity(value); _lastUpdatedVelocityTimestamp = lastEdited; _lastUpdatedVelocityValue = value; } @@ -753,7 +753,7 @@ int EntityItem::readEntityDataFromBuffer(const unsigned char* data, int bytesLef auto customUpdateAngularVelocityFromNetwork = [this, shouldUpdate, lastEdited](glm::vec3 value){ if (shouldUpdate(_lastUpdatedAngularVelocityTimestamp, value != _lastUpdatedAngularVelocityValue)) { - updateAngularVelocity(value); + setAngularVelocity(value); _lastUpdatedAngularVelocityTimestamp = lastEdited; _lastUpdatedAngularVelocityValue = value; } @@ -775,13 +775,13 @@ int EntityItem::readEntityDataFromBuffer(const unsigned char* data, int bytesLef } READ_ENTITY_PROPERTY(PROP_DIMENSIONS, glm::vec3, updateDimensions); - READ_ENTITY_PROPERTY(PROP_DENSITY, float, updateDensity); - READ_ENTITY_PROPERTY(PROP_GRAVITY, glm::vec3, updateGravity); + READ_ENTITY_PROPERTY(PROP_DENSITY, float, setDensity); + READ_ENTITY_PROPERTY(PROP_GRAVITY, glm::vec3, setGravity); - READ_ENTITY_PROPERTY(PROP_DAMPING, float, updateDamping); - READ_ENTITY_PROPERTY(PROP_RESTITUTION, float, updateRestitution); - READ_ENTITY_PROPERTY(PROP_FRICTION, float, updateFriction); - READ_ENTITY_PROPERTY(PROP_LIFETIME, float, updateLifetime); + READ_ENTITY_PROPERTY(PROP_DAMPING, float, setDamping); + READ_ENTITY_PROPERTY(PROP_RESTITUTION, float, setRestitution); + READ_ENTITY_PROPERTY(PROP_FRICTION, float, setFriction); + READ_ENTITY_PROPERTY(PROP_LIFETIME, float, setLifetime); READ_ENTITY_PROPERTY(PROP_SCRIPT, QString, setScript); READ_ENTITY_PROPERTY(PROP_SCRIPT_TIMESTAMP, quint64, setScriptTimestamp); @@ -797,13 +797,13 @@ int EntityItem::readEntityDataFromBuffer(const unsigned char* data, int bytesLef READ_ENTITY_PROPERTY(PROP_SERVER_SCRIPTS, QString, setServerScripts); } - READ_ENTITY_PROPERTY(PROP_REGISTRATION_POINT, glm::vec3, updateRegistrationPoint); + READ_ENTITY_PROPERTY(PROP_REGISTRATION_POINT, glm::vec3, setRegistrationPoint); - READ_ENTITY_PROPERTY(PROP_ANGULAR_DAMPING, float, updateAngularDamping); + READ_ENTITY_PROPERTY(PROP_ANGULAR_DAMPING, float, setAngularDamping); READ_ENTITY_PROPERTY(PROP_VISIBLE, bool, setVisible); - READ_ENTITY_PROPERTY(PROP_COLLISIONLESS, bool, updateCollisionless); - READ_ENTITY_PROPERTY(PROP_COLLISION_MASK, uint8_t, updateCollisionMask); - READ_ENTITY_PROPERTY(PROP_DYNAMIC, bool, updateDynamic); + READ_ENTITY_PROPERTY(PROP_COLLISIONLESS, bool, setCollisionless); + READ_ENTITY_PROPERTY(PROP_COLLISION_MASK, uint8_t, setCollisionMask); + READ_ENTITY_PROPERTY(PROP_DYNAMIC, bool, setDynamic); READ_ENTITY_PROPERTY(PROP_LOCKED, bool, updateLocked); READ_ENTITY_PROPERTY(PROP_USER_DATA, QString, setUserData); @@ -827,7 +827,7 @@ int EntityItem::readEntityDataFromBuffer(const unsigned char* data, int bytesLef { // parentID and parentJointIndex are also protected by simulation ownership bool oldOverwrite = overwriteLocalData; overwriteLocalData = overwriteLocalData && !weOwnSimulation; - READ_ENTITY_PROPERTY(PROP_PARENT_ID, QUuid, updateParentID); + READ_ENTITY_PROPERTY(PROP_PARENT_ID, QUuid, setParentID); READ_ENTITY_PROPERTY(PROP_PARENT_JOINT_INDEX, quint16, setParentJointIndex); overwriteLocalData = oldOverwrite; } @@ -922,12 +922,6 @@ float EntityItem::computeMass() const { } void EntityItem::setDensity(float density) { - withWriteLock([&] { - _density = glm::max(glm::min(density, ENTITY_ITEM_MAX_DENSITY), ENTITY_ITEM_MIN_DENSITY); - }); -} - -void EntityItem::updateDensity(float density) { float clampedDensity = glm::max(glm::min(density, ENTITY_ITEM_MAX_DENSITY), ENTITY_ITEM_MIN_DENSITY); withWriteLock([&] { if (_density != clampedDensity) { @@ -1317,27 +1311,27 @@ bool EntityItem::setProperties(const EntityItemProperties& properties) { // these affect TerseUpdate properties SET_ENTITY_PROPERTY_FROM_PROPERTIES(simulationOwner, updateSimulationOwner); SET_ENTITY_PROPERTY_FROM_PROPERTIES(position, updatePosition); - SET_ENTITY_PROPERTY_FROM_PROPERTIES(rotation, updateRotation); - SET_ENTITY_PROPERTY_FROM_PROPERTIES(velocity, updateVelocity); - SET_ENTITY_PROPERTY_FROM_PROPERTIES(angularVelocity, updateAngularVelocity); + SET_ENTITY_PROPERTY_FROM_PROPERTIES(rotation, setRotation); + SET_ENTITY_PROPERTY_FROM_PROPERTIES(velocity, setVelocity); + SET_ENTITY_PROPERTY_FROM_PROPERTIES(angularVelocity, setAngularVelocity); SET_ENTITY_PROPERTY_FROM_PROPERTIES(acceleration, setAcceleration); // these (along with "position" above) affect tree structure SET_ENTITY_PROPERTY_FROM_PROPERTIES(dimensions, updateDimensions); - SET_ENTITY_PROPERTY_FROM_PROPERTIES(registrationPoint, updateRegistrationPoint); + SET_ENTITY_PROPERTY_FROM_PROPERTIES(registrationPoint, setRegistrationPoint); // these (along with all properties above) affect the simulation - SET_ENTITY_PROPERTY_FROM_PROPERTIES(density, updateDensity); - SET_ENTITY_PROPERTY_FROM_PROPERTIES(gravity, updateGravity); - SET_ENTITY_PROPERTY_FROM_PROPERTIES(damping, updateDamping); - SET_ENTITY_PROPERTY_FROM_PROPERTIES(angularDamping, updateAngularDamping); - SET_ENTITY_PROPERTY_FROM_PROPERTIES(restitution, updateRestitution); - SET_ENTITY_PROPERTY_FROM_PROPERTIES(friction, updateFriction); - SET_ENTITY_PROPERTY_FROM_PROPERTIES(collisionless, updateCollisionless); - SET_ENTITY_PROPERTY_FROM_PROPERTIES(collisionMask, updateCollisionMask); - SET_ENTITY_PROPERTY_FROM_PROPERTIES(dynamic, updateDynamic); - SET_ENTITY_PROPERTY_FROM_PROPERTIES(created, updateCreated); - SET_ENTITY_PROPERTY_FROM_PROPERTIES(lifetime, updateLifetime); + SET_ENTITY_PROPERTY_FROM_PROPERTIES(density, setDensity); + SET_ENTITY_PROPERTY_FROM_PROPERTIES(gravity, setGravity); + SET_ENTITY_PROPERTY_FROM_PROPERTIES(damping, setDamping); + SET_ENTITY_PROPERTY_FROM_PROPERTIES(angularDamping, setAngularDamping); + SET_ENTITY_PROPERTY_FROM_PROPERTIES(restitution, setRestitution); + SET_ENTITY_PROPERTY_FROM_PROPERTIES(friction, setFriction); + SET_ENTITY_PROPERTY_FROM_PROPERTIES(collisionless, setCollisionless); + SET_ENTITY_PROPERTY_FROM_PROPERTIES(collisionMask, setCollisionMask); + SET_ENTITY_PROPERTY_FROM_PROPERTIES(dynamic, setDynamic); + SET_ENTITY_PROPERTY_FROM_PROPERTIES(created, setCreated); + SET_ENTITY_PROPERTY_FROM_PROPERTIES(lifetime, setLifetime); SET_ENTITY_PROPERTY_FROM_PROPERTIES(locked, updateLocked); // non-simulation properties below @@ -1365,7 +1359,7 @@ bool EntityItem::setProperties(const EntityItemProperties& properties) { SET_ENTITY_PROPERTY_FROM_PROPERTIES(href, setHref); SET_ENTITY_PROPERTY_FROM_PROPERTIES(description, setDescription); SET_ENTITY_PROPERTY_FROM_PROPERTIES(actionData, setDynamicData); - SET_ENTITY_PROPERTY_FROM_PROPERTIES(parentID, updateParentID); + SET_ENTITY_PROPERTY_FROM_PROPERTIES(parentID, setParentID); SET_ENTITY_PROPERTY_FROM_PROPERTIES(parentJointIndex, setParentJointIndex); SET_ENTITY_PROPERTY_FROM_PROPERTIES(queryAACube, setQueryAACube); @@ -1702,9 +1696,12 @@ float EntityItem::getVolumeEstimate() const { return dimensions.x * dimensions.y * dimensions.z; } -void EntityItem::updateRegistrationPoint(const glm::vec3& value) { +void EntityItem::setRegistrationPoint(const glm::vec3& value) { if (value != _registrationPoint) { - setRegistrationPoint(value); + withWriteLock([&] { + _registrationPoint = glm::clamp(value, 0.0f, 1.0f); + }); + dimensionsChanged(); // Registration Point affects the bounding box markDirtyFlags(Simulation::DIRTY_SHAPE); } } @@ -1730,14 +1727,14 @@ void EntityItem::updatePosition(const glm::vec3& value) { } } -void EntityItem::updateParentID(const QUuid& value) { +void EntityItem::setParentID(const QUuid& value) { QUuid oldParentID = getParentID(); if (oldParentID != value) { EntityTreePointer tree = getTree(); if (!oldParentID.isNull()) { tree->removeFromChildrenOfAvatars(getThisPointer()); } - setParentID(value); + SpatiallyNestable::setParentID(value); // children are forced to be kinematic // may need to not collide with own avatar markDirtyFlags(Simulation::DIRTY_MOTION_TYPE | Simulation::DIRTY_COLLISION_GROUP); @@ -1758,7 +1755,7 @@ void EntityItem::updateDimensions(const glm::vec3& value) { } } -void EntityItem::updateRotation(const glm::quat& rotation) { +void EntityItem::setRotation(glm::quat rotation) { if (getLocalOrientation() != rotation) { setLocalOrientation(rotation); _dirtyFlags |= Simulation::DIRTY_ROTATION; @@ -1771,31 +1768,7 @@ void EntityItem::updateRotation(const glm::quat& rotation) { } } -void EntityItem::updateMass(float mass) { - // Setting the mass actually changes the _density (at fixed volume), however - // we must protect the density range to help maintain stability of physics simulation - // therefore this method might not accept the mass that is supplied. - - glm::vec3 dimensions = getDimensions(); - float volume = _volumeMultiplier * dimensions.x * dimensions.y * dimensions.z; - - // compute new density - float newDensity = _density; - const float MIN_VOLUME = 1.0e-6f; // 0.001mm^3 - if (volume < 1.0e-6f) { - // avoid divide by zero - newDensity = glm::min(mass / MIN_VOLUME, ENTITY_ITEM_MAX_DENSITY); - } else { - newDensity = glm::max(glm::min(mass / volume, ENTITY_ITEM_MAX_DENSITY), ENTITY_ITEM_MIN_DENSITY); - } - - if (_density != newDensity) { - _density = newDensity; - _dirtyFlags |= Simulation::DIRTY_MASS; - } -} - -void EntityItem::updateVelocity(const glm::vec3& value) { +void EntityItem::setVelocity(const glm::vec3& value) { glm::vec3 velocity = getLocalVelocity(); if (velocity != value) { if (getShapeType() == SHAPE_TYPE_STATIC_MESH) { @@ -1821,7 +1794,7 @@ void EntityItem::updateVelocity(const glm::vec3& value) { } } -void EntityItem::updateDamping(float value) { +void EntityItem::setDamping(float value) { auto clampedDamping = glm::clamp(value, 0.0f, 1.0f); if (_damping != clampedDamping) { _damping = clampedDamping; @@ -1829,7 +1802,7 @@ void EntityItem::updateDamping(float value) { } } -void EntityItem::updateGravity(const glm::vec3& value) { +void EntityItem::setGravity(const glm::vec3& value) { if (_gravity != value) { if (getShapeType() == SHAPE_TYPE_STATIC_MESH) { _gravity = Vectors::ZERO; @@ -1848,7 +1821,7 @@ void EntityItem::updateGravity(const glm::vec3& value) { } } -void EntityItem::updateAngularVelocity(const glm::vec3& value) { +void EntityItem::setAngularVelocity(const glm::vec3& value) { glm::vec3 angularVelocity = getLocalAngularVelocity(); if (angularVelocity != value) { if (getShapeType() == SHAPE_TYPE_STATIC_MESH) { @@ -1872,7 +1845,7 @@ void EntityItem::updateAngularVelocity(const glm::vec3& value) { } } -void EntityItem::updateAngularDamping(float value) { +void EntityItem::setAngularDamping(float value) { auto clampedDamping = glm::clamp(value, 0.0f, 1.0f); if (_angularDamping != clampedDamping) { _angularDamping = clampedDamping; @@ -1880,21 +1853,21 @@ void EntityItem::updateAngularDamping(float value) { } } -void EntityItem::updateCollisionless(bool value) { +void EntityItem::setCollisionless(bool value) { if (_collisionless != value) { _collisionless = value; _dirtyFlags |= Simulation::DIRTY_COLLISION_GROUP; } } -void EntityItem::updateCollisionMask(uint8_t value) { +void EntityItem::setCollisionMask(uint8_t value) { if ((_collisionMask & ENTITY_COLLISION_MASK_DEFAULT) != (value & ENTITY_COLLISION_MASK_DEFAULT)) { _collisionMask = (value & ENTITY_COLLISION_MASK_DEFAULT); _dirtyFlags |= Simulation::DIRTY_COLLISION_GROUP; } } -void EntityItem::updateDynamic(bool value) { +void EntityItem::setDynamic(bool value) { if (getDynamic() != value) { // dynamic and STATIC_MESH are incompatible so we check for that case if (value && getShapeType() == SHAPE_TYPE_STATIC_MESH) { @@ -1909,7 +1882,7 @@ void EntityItem::updateDynamic(bool value) { } } -void EntityItem::updateRestitution(float value) { +void EntityItem::setRestitution(float value) { float clampedValue = glm::max(glm::min(ENTITY_ITEM_MAX_RESTITUTION, value), ENTITY_ITEM_MIN_RESTITUTION); if (_restitution != clampedValue) { _restitution = clampedValue; @@ -1917,7 +1890,7 @@ void EntityItem::updateRestitution(float value) { } } -void EntityItem::updateFriction(float value) { +void EntityItem::setFriction(float value) { float clampedValue = glm::max(glm::min(ENTITY_ITEM_MAX_FRICTION, value), ENTITY_ITEM_MIN_FRICTION); withWriteLock([&] { if (_friction != clampedValue) { @@ -1927,28 +1900,14 @@ void EntityItem::updateFriction(float value) { }); } -void EntityItem::setRestitution(float value) { - float clampedValue = glm::max(glm::min(ENTITY_ITEM_MAX_RESTITUTION, value), ENTITY_ITEM_MIN_RESTITUTION); - withWriteLock([&] { - _restitution = clampedValue; - }); -} - -void EntityItem::setFriction(float value) { - float clampedValue = glm::max(glm::min(ENTITY_ITEM_MAX_FRICTION, value), ENTITY_ITEM_MIN_FRICTION); - withWriteLock([&] { - _friction = clampedValue; - }); -} - -void EntityItem::updateLifetime(float value) { +void EntityItem::setLifetime(float value) { if (_lifetime != value) { _lifetime = value; _dirtyFlags |= Simulation::DIRTY_LIFETIME; } } -void EntityItem::updateCreated(uint64_t value) { +void EntityItem::setCreated(uint64_t value) { if (_created != value) { _created = value; _dirtyFlags |= Simulation::DIRTY_LIFETIME; @@ -2618,12 +2577,6 @@ glm::vec3 EntityItem::getGravity() const { return result; } -void EntityItem::setGravity(const glm::vec3& value) { - withWriteLock([&] { - _gravity = value; - }); -} - glm::vec3 EntityItem::getAcceleration() const { glm::vec3 result; withReadLock([&] { @@ -2645,11 +2598,6 @@ float EntityItem::getDamping() const { }); return result; } -void EntityItem::setDamping(float value) { - withWriteLock([&] { - _damping = value; - }); -} float EntityItem::getRestitution() const { float result; @@ -2676,12 +2624,6 @@ float EntityItem::getLifetime() const { return result; } -void EntityItem::setLifetime(float value) { - withWriteLock([&] { - _lifetime = value; - }); -} - quint64 EntityItem::getCreated() const { quint64 result; withReadLock([&] { @@ -2690,12 +2632,6 @@ quint64 EntityItem::getCreated() const { return result; } -void EntityItem::setCreated(quint64 value) { - withWriteLock([&] { - _created = value; - }); -} - QString EntityItem::getScript() const { QString result; withReadLock([&] { @@ -2755,13 +2691,6 @@ glm::vec3 EntityItem::getRegistrationPoint() const { return result; } -void EntityItem::setRegistrationPoint(const glm::vec3& value) { - withWriteLock([&] { - _registrationPoint = glm::clamp(value, 0.0f, 1.0f); - }); - dimensionsChanged(); // Registration Point affects the bounding box -} - float EntityItem::getAngularDamping() const { float result; withReadLock([&] { @@ -2770,12 +2699,6 @@ float EntityItem::getAngularDamping() const { return result; } -void EntityItem::setAngularDamping(float value) { - withWriteLock([&] { - _angularDamping = value; - }); -} - QString EntityItem::getName() const { QString result; withReadLock([&] { @@ -2825,12 +2748,6 @@ bool EntityItem::getCollisionless() const { return result; } -void EntityItem::setCollisionless(bool value) { - withWriteLock([&] { - _collisionless = value; - }); -} - uint8_t EntityItem::getCollisionMask() const { uint8_t result; withReadLock([&] { @@ -2839,12 +2756,6 @@ uint8_t EntityItem::getCollisionMask() const { return result; } -void EntityItem::setCollisionMask(uint8_t value) { - withWriteLock([&] { - _collisionMask = value; - }); -} - bool EntityItem::getDynamic() const { if (SHAPE_TYPE_STATIC_MESH == getShapeType()) { return false; @@ -2856,12 +2767,6 @@ bool EntityItem::getDynamic() const { return result; } -void EntityItem::setDynamic(bool value) { - withWriteLock([&] { - _dynamic = value; - }); -} - bool EntityItem::getLocked() const { bool result; withReadLock([&] { diff --git a/libraries/entities/src/EntityItem.h b/libraries/entities/src/EntityItem.h index ce4bf13896..a05b0d6137 100644 --- a/libraries/entities/src/EntityItem.h +++ b/libraries/entities/src/EntityItem.h @@ -262,6 +262,8 @@ public: bool hasAngularVelocity() const { return getAngularVelocity() != ENTITY_ITEM_ZERO_VEC3; } bool hasLocalAngularVelocity() const { return getLocalAngularVelocity() != ENTITY_ITEM_ZERO_VEC3; } + virtual void setAngularVelocity(const glm::vec3& angularVelocity); + float getAngularDamping() const; void setAngularDamping(float value); @@ -354,10 +356,17 @@ public: virtual void setCollisionShape(const btCollisionShape* shape) {} // updateFoo() methods to be used when changes need to be accumulated in the _dirtyFlags - virtual void updateRegistrationPoint(const glm::vec3& value); + //virtual void setRegistrationPoint(const glm::vec3& value); void updatePosition(const glm::vec3& value); - void updateParentID(const QUuid& value); + void updateDimensions(const glm::vec3& value); + + virtual void setParentID(const QUuid& parentID); + virtual void setRotation(glm::quat orientation); + virtual void setVelocity(const glm::vec3& velocity); + + /* + void updateParentID(const QUuid& value); void updateRotation(const glm::quat& rotation); void updateDensity(float value); void updateMass(float value); @@ -373,6 +382,8 @@ public: void updateDynamic(bool value); void updateLifetime(float value); void updateCreated(uint64_t value); + */ + virtual void setShapeType(ShapeType type) { /* do nothing */ } uint32_t getDirtyFlags() const; From 431ee585773fc3988e7b502ed8c99d3f33bd8a7d Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Thu, 26 Oct 2017 21:30:59 -0700 Subject: [PATCH 02/17] more cleanup --- libraries/entities/src/EntityItem.cpp | 59 +++++++-------------------- libraries/entities/src/EntityItem.h | 32 --------------- 2 files changed, 14 insertions(+), 77 deletions(-) diff --git a/libraries/entities/src/EntityItem.cpp b/libraries/entities/src/EntityItem.cpp index 41b5960667..e6549160b8 100644 --- a/libraries/entities/src/EntityItem.cpp +++ b/libraries/entities/src/EntityItem.cpp @@ -774,7 +774,7 @@ int EntityItem::readEntityDataFromBuffer(const unsigned char* data, int bytesLef READ_ENTITY_PROPERTY(PROP_ACCELERATION, glm::vec3, customSetAcceleration); } - READ_ENTITY_PROPERTY(PROP_DIMENSIONS, glm::vec3, updateDimensions); + READ_ENTITY_PROPERTY(PROP_DIMENSIONS, glm::vec3, setDimensions); READ_ENTITY_PROPERTY(PROP_DENSITY, float, setDensity); READ_ENTITY_PROPERTY(PROP_GRAVITY, glm::vec3, setGravity); @@ -804,7 +804,7 @@ int EntityItem::readEntityDataFromBuffer(const unsigned char* data, int bytesLef READ_ENTITY_PROPERTY(PROP_COLLISIONLESS, bool, setCollisionless); READ_ENTITY_PROPERTY(PROP_COLLISION_MASK, uint8_t, setCollisionMask); READ_ENTITY_PROPERTY(PROP_DYNAMIC, bool, setDynamic); - READ_ENTITY_PROPERTY(PROP_LOCKED, bool, updateLocked); + READ_ENTITY_PROPERTY(PROP_LOCKED, bool, setLocked); READ_ENTITY_PROPERTY(PROP_USER_DATA, QString, setUserData); READ_ENTITY_PROPERTY(PROP_MARKETPLACE_ID, QString, setMarketplaceID); @@ -1309,7 +1309,7 @@ bool EntityItem::setProperties(const EntityItemProperties& properties) { bool somethingChanged = false; // these affect TerseUpdate properties - SET_ENTITY_PROPERTY_FROM_PROPERTIES(simulationOwner, updateSimulationOwner); + SET_ENTITY_PROPERTY_FROM_PROPERTIES(simulationOwner, setSimulationOwner); SET_ENTITY_PROPERTY_FROM_PROPERTIES(position, updatePosition); SET_ENTITY_PROPERTY_FROM_PROPERTIES(rotation, setRotation); SET_ENTITY_PROPERTY_FROM_PROPERTIES(velocity, setVelocity); @@ -1317,7 +1317,7 @@ bool EntityItem::setProperties(const EntityItemProperties& properties) { SET_ENTITY_PROPERTY_FROM_PROPERTIES(acceleration, setAcceleration); // these (along with "position" above) affect tree structure - SET_ENTITY_PROPERTY_FROM_PROPERTIES(dimensions, updateDimensions); + SET_ENTITY_PROPERTY_FROM_PROPERTIES(dimensions, setDimensions); SET_ENTITY_PROPERTY_FROM_PROPERTIES(registrationPoint, setRegistrationPoint); // these (along with all properties above) affect the simulation @@ -1332,7 +1332,7 @@ bool EntityItem::setProperties(const EntityItemProperties& properties) { SET_ENTITY_PROPERTY_FROM_PROPERTIES(dynamic, setDynamic); SET_ENTITY_PROPERTY_FROM_PROPERTIES(created, setCreated); SET_ENTITY_PROPERTY_FROM_PROPERTIES(lifetime, setLifetime); - SET_ENTITY_PROPERTY_FROM_PROPERTIES(locked, updateLocked); + SET_ENTITY_PROPERTY_FROM_PROPERTIES(locked, setLocked); // non-simulation properties below SET_ENTITY_PROPERTY_FROM_PROPERTIES(script, setScript); @@ -1424,17 +1424,6 @@ const Transform EntityItem::getTransformToCenter(bool& success) const { return result; } -void EntityItem::setDimensions(const glm::vec3& value) { - if (value.x <= 0.0f || value.y <= 0.0f || value.z <= 0.0f) { - return; - } - if (_dimensions != value) { - _dimensions = value; - locationChanged(); - dimensionsChanged(); - } -} - /// The maximum bounding cube for the entity, independent of it's rotation. /// This accounts for the registration point (upon which rotation occurs around). /// @@ -1536,25 +1525,6 @@ bool EntityItem::shouldPuffQueryAACube() const { return hasActions() || isChildOfMyAvatar() || isMovingRelativeToParent(); } -// NOTE: This should only be used in cases of old bitstreams which only contain radius data -// 0,0,0 --> maxDimension,maxDimension,maxDimension -// ... has a corner to corner distance of glm::length(maxDimension,maxDimension,maxDimension) -// ... radius = cornerToCornerLength / 2.0f -// ... radius * 2.0f = cornerToCornerLength -// ... cornerToCornerLength = sqrt(3 x maxDimension ^ 2) -// ... cornerToCornerLength = sqrt(3 x maxDimension ^ 2) -// ... radius * 2.0f = sqrt(3 x maxDimension ^ 2) -// ... (radius * 2.0f) ^2 = 3 x maxDimension ^ 2 -// ... ((radius * 2.0f) ^2) / 3 = maxDimension ^ 2 -// ... sqrt(((radius * 2.0f) ^2) / 3) = maxDimension -// ... sqrt((diameter ^2) / 3) = maxDimension -// -void EntityItem::setRadius(float value) { - float diameter = value * 2.0f; - float maxDimension = sqrt((diameter * diameter) / 3.0f); - setDimensions(glm::vec3(maxDimension, maxDimension, maxDimension)); -} - // TODO: get rid of all users of this function... // ... radius = cornerToCornerLength / 2.0f // ... cornerToCornerLength = sqrt(3 x maxDimension ^ 2) @@ -1746,11 +1716,14 @@ void EntityItem::setParentID(const QUuid& value) { } } -void EntityItem::updateDimensions(const glm::vec3& value) { - if (getDimensions() != value) { - setDimensions(value); +void EntityItem::setDimensions(const glm::vec3& value) { + const float MIN_ENTITY_DIMENSION = 0.00001f; + glm::vec3 newDimensions = glm::max(value, glm::vec3(MIN_ENTITY_DIMENSION)); + if (getDimensions() != newDimensions) { + _dimensions = newDimensions; markDirtyFlags(Simulation::DIRTY_SHAPE | Simulation::DIRTY_MASS); _queryAACubeSet = false; + locationChanged(); dimensionsChanged(); } } @@ -1983,6 +1956,7 @@ void EntityItem::setSimulationOwner(const QUuid& id, quint8 priority) { _simulationOwner.set(id, priority); } +/* void EntityItem::setSimulationOwner(const SimulationOwner& owner) { if (wantTerseEditLogging() && _simulationOwner != owner) { qCDebug(entities) << "sim ownership for" << getDebugName() << "is now" << owner; @@ -1990,8 +1964,9 @@ void EntityItem::setSimulationOwner(const SimulationOwner& owner) { _simulationOwner.set(owner); } +*/ -void EntityItem::updateSimulationOwner(const SimulationOwner& owner) { +void EntityItem::setSimulationOwner(const SimulationOwner& owner) { // NOTE: this method only used by EntityServer. The Interface uses special code in readEntityDataFromBuffer(). if (wantTerseEditLogging() && _simulationOwner != owner) { qCDebug(entities) << "sim ownership for" << getDebugName() << "is now" << owner; @@ -2776,12 +2751,6 @@ bool EntityItem::getLocked() const { } void EntityItem::setLocked(bool value) { - withWriteLock([&] { - _locked = value; - }); -} - -void EntityItem::updateLocked(bool value) { bool changed { false }; withWriteLock([&] { if (_locked != value) { diff --git a/libraries/entities/src/EntityItem.h b/libraries/entities/src/EntityItem.h index a05b0d6137..3b31acafad 100644 --- a/libraries/entities/src/EntityItem.h +++ b/libraries/entities/src/EntityItem.h @@ -293,7 +293,6 @@ public: bool getLocked() const; void setLocked(bool value); - void updateLocked(bool value); QString getUserData() const; virtual void setUserData(const QString& value); @@ -306,7 +305,6 @@ public: quint8 getSimulationPriority() const { return _simulationOwner.getPriority(); } QUuid getSimulatorID() const { return _simulationOwner.getID(); } - void updateSimulationOwner(const SimulationOwner& owner); void clearSimulationOwnership(); void setPendingOwnershipPriority(quint8 priority, const quint64& timestamp); uint8_t getPendingOwnershipPriority() const { return _simulationOwner.getPendingPriority(); } @@ -356,34 +354,10 @@ public: virtual void setCollisionShape(const btCollisionShape* shape) {} // updateFoo() methods to be used when changes need to be accumulated in the _dirtyFlags - //virtual void setRegistrationPoint(const glm::vec3& value); void updatePosition(const glm::vec3& value); - - void updateDimensions(const glm::vec3& value); - virtual void setParentID(const QUuid& parentID); virtual void setRotation(glm::quat orientation); virtual void setVelocity(const glm::vec3& velocity); - - /* - void updateParentID(const QUuid& value); - void updateRotation(const glm::quat& rotation); - void updateDensity(float value); - void updateMass(float value); - void updateVelocity(const glm::vec3& value); - void updateDamping(float value); - void updateRestitution(float value); - void updateFriction(float value); - void updateGravity(const glm::vec3& value); - void updateAngularVelocity(const glm::vec3& value); - void updateAngularDamping(float value); - void updateCollisionless(bool value); - void updateCollisionMask(uint8_t value); - void updateDynamic(bool value); - void updateLifetime(float value); - void updateCreated(uint64_t value); - */ - virtual void setShapeType(ShapeType type) { /* do nothing */ } uint32_t getDirtyFlags() const; @@ -590,12 +564,6 @@ protected: // damping = 1 - exp(-1 / timescale) // - // NOTE: Radius support is obsolete, but these private helper functions are available for this class to - // parse old data streams - - /// set radius in domain scale units (0.0 - 1.0) this will also reset dimensions to be equal for each axis - void setRadius(float value); - // DirtyFlags are set whenever a property changes that the EntitySimulation needs to know about. uint32_t _dirtyFlags { 0 }; // things that have changed from EXTERNAL changes (via script or packet) but NOT from simulation From f32282afdd308859544924f0c8d9a05b61456af1 Mon Sep 17 00:00:00 2001 From: luiscuenca Date: Fri, 27 Oct 2017 11:03:02 -0700 Subject: [PATCH 03/17] Clean update bug 8027 --- .../resources/html/createGlobalEventBridge.js | 48 ++++++++++++ interface/resources/qml/Browser.qml | 12 ++- libraries/ui/CMakeLists.txt | 4 +- libraries/ui/src/ui/OffscreenQmlSurface.cpp | 76 +++++++++++++++++++ libraries/ui/src/ui/OffscreenQmlSurface.h | 9 +++ plugins/hifiSixense/CMakeLists.txt | 3 + tests/controllers/CMakeLists.txt | 3 + tests/render-perf/CMakeLists.txt | 4 + 8 files changed, 153 insertions(+), 6 deletions(-) diff --git a/interface/resources/html/createGlobalEventBridge.js b/interface/resources/html/createGlobalEventBridge.js index 4a0de464c3..bccbdfaf7c 100644 --- a/interface/resources/html/createGlobalEventBridge.js +++ b/interface/resources/html/createGlobalEventBridge.js @@ -33,6 +33,54 @@ var EventBridge; // replace the TempEventBridge with the real one. var tempEventBridge = EventBridge; EventBridge = channel.objects.eventBridge; + EventBridge.audioOutputDeviceChanged.connect(function(deviceName) { + navigator.mediaDevices.getUserMedia({ audio: true, video: true }).then(function(mediaStream) { + navigator.mediaDevices.enumerateDevices().then(function(devices) { + devices.forEach(function(device) { + if (device.kind == "audiooutput") { + if (device.label == deviceName){ + console.log("Changing HTML audio output to device " + device.label); + var deviceId = device.deviceId; + var videos = document.getElementsByTagName("video"); + for (var i = 0; i < videos.length; i++){ + videos[i].setSinkId(deviceId); + } + var audios = document.getElementsByTagName("audio"); + for (var i = 0; i < audios.length; i++){ + audios[i].setSinkId(deviceId); + } + } + } + }); + + }).catch(function(err) { + console.log("Error getting media devices"+ err.name + ": " + err.message); + }); + }).catch(function(err) { + console.log("Error getting user media"+ err.name + ": " + err.message); + }); + }); + + // To be able to update the state of the output device selection for every element added to the DOM + // we need to listen to events that might precede the addition of this elements. + // A more robust hack will be to add a setInterval that look for DOM changes every 100-300 ms (low performance?) + + window.onload = function(){ + setTimeout(function() { + EventBridge.forceHtmlAudioOutputDeviceUpdate(); + }, 1200); + }; + document.onclick = function(){ + setTimeout(function() { + EventBridge.forceHtmlAudioOutputDeviceUpdate(); + }, 1200); + }; + document.onchange = function(){ + setTimeout(function() { + EventBridge.forceHtmlAudioOutputDeviceUpdate(); + }, 1200); + }; + tempEventBridge._callbacks.forEach(function (callback) { EventBridge.scriptEventReceived.connect(callback); }); diff --git a/interface/resources/qml/Browser.qml b/interface/resources/qml/Browser.qml index 55927fda24..8a6674bc14 100644 --- a/interface/resources/qml/Browser.qml +++ b/interface/resources/qml/Browser.qml @@ -212,7 +212,7 @@ ScrollingWindow { WebEngineScript { id: createGlobalEventBridge sourceCode: eventBridgeJavaScriptToInject - injectionPoint: WebEngineScript.DocumentCreation + injectionPoint: WebEngineScript.Deferred worldId: WebEngineScript.MainWorld } @@ -233,9 +233,13 @@ ScrollingWindow { anchors.right: parent.right onFeaturePermissionRequested: { - permissionsBar.securityOrigin = securityOrigin; - permissionsBar.feature = feature; - root.showPermissionsBar(); + if (feature == 2) { // QWebEnginePage::MediaAudioCapture + grantFeaturePermission(securityOrigin, feature, true); + } else { + permissionsBar.securityOrigin = securityOrigin; + permissionsBar.feature = feature; + root.showPermissionsBar(); + } } onLoadingChanged: { diff --git a/libraries/ui/CMakeLists.txt b/libraries/ui/CMakeLists.txt index f28157ff97..ae682a11ea 100644 --- a/libraries/ui/CMakeLists.txt +++ b/libraries/ui/CMakeLists.txt @@ -1,6 +1,6 @@ set(TARGET_NAME ui) -setup_hifi_library(OpenGL Network Qml Quick Script WebChannel WebEngine WebSockets XmlPatterns) -link_hifi_libraries(shared networking gl audio) +setup_hifi_library(OpenGL Multimedia Network Qml Quick Script WebChannel WebEngine WebSockets XmlPatterns) +link_hifi_libraries(shared networking gl audio audio-client plugins) # Required for some low level GL interaction in the OffscreenQMLSurface target_opengl() diff --git a/libraries/ui/src/ui/OffscreenQmlSurface.cpp b/libraries/ui/src/ui/OffscreenQmlSurface.cpp index ecd07a5874..6632b669e3 100644 --- a/libraries/ui/src/ui/OffscreenQmlSurface.cpp +++ b/libraries/ui/src/ui/OffscreenQmlSurface.cpp @@ -24,7 +24,11 @@ #include #include #include +#include +#include +#include +#include #include #include #include @@ -595,6 +599,14 @@ void OffscreenQmlSurface::create() { // Find a way to flag older scripts using this mechanism and wanr that this is deprecated _qmlContext->setContextProperty("eventBridgeWrapper", new EventBridgeWrapper(this, _qmlContext)); _renderControl->initialize(_canvas->getContext()); + + // Connect with the audio client and listen for audio device changes + auto audioIO = DependencyManager::get(); + connect(audioIO.data(), &AudioClient::deviceChanged, this, [&](QAudio::Mode mode, const QAudioDeviceInfo& device) { + if (mode == QAudio::Mode::AudioOutput) { + QMetaObject::invokeMethod(this, "changeAudioOutputDevice", Qt::DirectConnection, Q_ARG(QString, device.deviceName())); + } + }); // When Quick says there is a need to render, we will not render immediately. Instead, // a timer with a small interval is used to get better performance. @@ -605,6 +617,68 @@ void OffscreenQmlSurface::create() { _updateTimer.start(); } +void OffscreenQmlSurface::changeAudioOutputDevice(const QString& deviceName, bool isHtmlUpdate) { + if (_rootItem != nullptr && !isHtmlUpdate) { + QMetaObject::invokeMethod(this, "forceQmlAudioOutputDeviceUpdate", Qt::DirectConnection); + } + emit audioOutputDeviceChanged(deviceName); +} + +void OffscreenQmlSurface::forceHtmlAudioOutputDeviceUpdate() { + auto audioIO = DependencyManager::get(); + QString deviceName = audioIO->getActiveAudioDevice(QAudio::AudioOutput).deviceName(); + QMetaObject::invokeMethod(this, "changeAudioOutputDevice", Qt::DirectConnection, + Q_ARG(QString, deviceName), Q_ARG(bool, true)); +} + +void OffscreenQmlSurface::forceQmlAudioOutputDeviceUpdate() { + if (QThread::currentThread() != qApp->thread()) { + QMetaObject::invokeMethod(this, "forceQmlAudioOutputDeviceUpdate", Qt::QueuedConnection); + } + else { + int waitForAudioQmlMs = 500; + QTimer::singleShot(waitForAudioQmlMs, this, SLOT(updateQmlAudio())); + } +} + +void OffscreenQmlSurface::updateQmlAudio() { + auto audioIO = DependencyManager::get(); + QString deviceName = audioIO->getActiveAudioDevice(QAudio::AudioOutput).deviceName(); + for (auto player : _rootItem->findChildren()) { + auto mediaState = player->state(); + QMediaService *svc = player->service(); + if (nullptr == svc) { + return; + } + QAudioOutputSelectorControl *out = qobject_cast + (svc->requestControl(QAudioOutputSelectorControl_iid)); + if (nullptr == out) { + return; + } + QString deviceOuput; + auto outputs = out->availableOutputs(); + for (int i = 0; i < outputs.size(); i++) { + QString output = outputs[i]; + QString description = out->outputDescription(output); + if (description == deviceName) { + deviceOuput = output; + break; + } + } + out->setActiveOutput(deviceOuput); + svc->releaseControl(out); + // if multimedia was paused, it will start playing automatically after changing audio device + // this will reset it back to a paused state + if (mediaState == QMediaPlayer::State::PausedState) { + player->pause(); + } + else if (mediaState == QMediaPlayer::State::StoppedState) { + player->stop(); + } + } + qDebug() << "QML Audio changed to " << deviceName; +} + static uvec2 clampSize(const uvec2& size, uint32_t maxDimension) { return glm::clamp(size, glm::uvec2(1), glm::uvec2(maxDimension)); } @@ -798,6 +872,7 @@ void OffscreenQmlSurface::finishQmlLoad(QQmlComponent* qmlComponent, QQmlContext if (newItem) { newItem->setParentItem(_rootItem); } + QMetaObject::invokeMethod(this, "forceQmlAudioOutputDeviceUpdate", Qt::QueuedConnection); return; } @@ -817,6 +892,7 @@ void OffscreenQmlSurface::finishQmlLoad(QQmlComponent* qmlComponent, QQmlContext for (const auto& callback : callbacks) { callback(qmlContext, newObject); } + QMetaObject::invokeMethod(this, "forceQmlAudioOutputDeviceUpdate", Qt::QueuedConnection); } void OffscreenQmlSurface::updateQuick() { diff --git a/libraries/ui/src/ui/OffscreenQmlSurface.h b/libraries/ui/src/ui/OffscreenQmlSurface.h index 12ee9e59a1..0d053b373d 100644 --- a/libraries/ui/src/ui/OffscreenQmlSurface.h +++ b/libraries/ui/src/ui/OffscreenQmlSurface.h @@ -103,6 +103,15 @@ public slots: void onAboutToQuit(); void focusDestroyed(QObject *obj); + // audio output device +public slots: + void changeAudioOutputDevice(const QString& deviceName, bool isHtmlUpdate = false); + void forceHtmlAudioOutputDeviceUpdate(); + void forceQmlAudioOutputDeviceUpdate(); + void updateQmlAudio(); +signals: + void audioOutputDeviceChanged(const QString& deviceName); + // event bridge public slots: void emitScriptEvent(const QVariant& scriptMessage); diff --git a/plugins/hifiSixense/CMakeLists.txt b/plugins/hifiSixense/CMakeLists.txt index 55880584a8..a503fc5710 100644 --- a/plugins/hifiSixense/CMakeLists.txt +++ b/plugins/hifiSixense/CMakeLists.txt @@ -15,4 +15,7 @@ if (NOT ANDROID) setup_hifi_plugin(Script Qml Widgets) link_hifi_libraries(shared controllers ui plugins ui-plugins input-plugins) target_sixense() + if (WIN32) + target_link_libraries(${TARGET_NAME} Winmm.lib) + endif() endif () diff --git a/tests/controllers/CMakeLists.txt b/tests/controllers/CMakeLists.txt index 3221070837..623ee7d20e 100644 --- a/tests/controllers/CMakeLists.txt +++ b/tests/controllers/CMakeLists.txt @@ -17,5 +17,8 @@ if (WIN32) target_include_directories(${TARGET_NAME} PRIVATE ${OPENVR_INCLUDE_DIRS}) target_link_libraries(${TARGET_NAME} ${OPENVR_LIBRARIES}) endif() +if (WIN32) + target_link_libraries(${TARGET_NAME} Winmm.lib) +endif() package_libraries_for_deployment() diff --git a/tests/render-perf/CMakeLists.txt b/tests/render-perf/CMakeLists.txt index 5b83ff313b..b7f13c88c5 100644 --- a/tests/render-perf/CMakeLists.txt +++ b/tests/render-perf/CMakeLists.txt @@ -14,6 +14,10 @@ set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "Tests/manual-tests/") # link in the shared libraries link_hifi_libraries(shared networking model fbx ktx image octree gl gpu gpu-gl render model-networking networking render-utils entities entities-renderer animation audio avatars script-engine physics procedural midi ui) +if (WIN32) + target_link_libraries(${TARGET_NAME} Winmm.lib) +endif() + package_libraries_for_deployment() From 70b37f2e8a4dede381fdb64696be6c29f526862c Mon Sep 17 00:00:00 2001 From: luiscuenca Date: Fri, 27 Oct 2017 11:32:44 -0700 Subject: [PATCH 04/17] Cleaning some old tabs --- interface/resources/qml/Browser.qml | 14 +++++++------- plugins/hifiSixense/CMakeLists.txt | 6 +++--- tests/controllers/CMakeLists.txt | 2 +- tests/render-perf/CMakeLists.txt | 2 +- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/interface/resources/qml/Browser.qml b/interface/resources/qml/Browser.qml index 8a6674bc14..1dfc6875bb 100644 --- a/interface/resources/qml/Browser.qml +++ b/interface/resources/qml/Browser.qml @@ -233,13 +233,13 @@ ScrollingWindow { anchors.right: parent.right onFeaturePermissionRequested: { - if (feature == 2) { // QWebEnginePage::MediaAudioCapture - grantFeaturePermission(securityOrigin, feature, true); - } else { - permissionsBar.securityOrigin = securityOrigin; - permissionsBar.feature = feature; - root.showPermissionsBar(); - } + if (feature == 2) { // QWebEnginePage::MediaAudioCapture + grantFeaturePermission(securityOrigin, feature, true); + } else { + permissionsBar.securityOrigin = securityOrigin; + permissionsBar.feature = feature; + root.showPermissionsBar(); + } } onLoadingChanged: { diff --git a/plugins/hifiSixense/CMakeLists.txt b/plugins/hifiSixense/CMakeLists.txt index a503fc5710..6e642fce29 100644 --- a/plugins/hifiSixense/CMakeLists.txt +++ b/plugins/hifiSixense/CMakeLists.txt @@ -15,7 +15,7 @@ if (NOT ANDROID) setup_hifi_plugin(Script Qml Widgets) link_hifi_libraries(shared controllers ui plugins ui-plugins input-plugins) target_sixense() - if (WIN32) - target_link_libraries(${TARGET_NAME} Winmm.lib) - endif() + if (WIN32) + target_link_libraries(${TARGET_NAME} Winmm.lib) + endif() endif () diff --git a/tests/controllers/CMakeLists.txt b/tests/controllers/CMakeLists.txt index 623ee7d20e..062d69ca03 100644 --- a/tests/controllers/CMakeLists.txt +++ b/tests/controllers/CMakeLists.txt @@ -18,7 +18,7 @@ if (WIN32) target_link_libraries(${TARGET_NAME} ${OPENVR_LIBRARIES}) endif() if (WIN32) - target_link_libraries(${TARGET_NAME} Winmm.lib) + target_link_libraries(${TARGET_NAME} Winmm.lib) endif() package_libraries_for_deployment() diff --git a/tests/render-perf/CMakeLists.txt b/tests/render-perf/CMakeLists.txt index b7f13c88c5..59e043cd64 100644 --- a/tests/render-perf/CMakeLists.txt +++ b/tests/render-perf/CMakeLists.txt @@ -15,7 +15,7 @@ set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "Tests/manual-tests/") link_hifi_libraries(shared networking model fbx ktx image octree gl gpu gpu-gl render model-networking networking render-utils entities entities-renderer animation audio avatars script-engine physics procedural midi ui) if (WIN32) - target_link_libraries(${TARGET_NAME} Winmm.lib) + target_link_libraries(${TARGET_NAME} Winmm.lib) endif() package_libraries_for_deployment() From a466cf71242795deb2fb18d653c5e3e36d486034 Mon Sep 17 00:00:00 2001 From: luiscuenca Date: Fri, 27 Oct 2017 11:51:19 -0700 Subject: [PATCH 05/17] make wasapi compile first --- tests/recording/CMakeLists.txt | 4 ++++ tests/render-perf/CMakeLists.txt | 1 + 2 files changed, 5 insertions(+) diff --git a/tests/recording/CMakeLists.txt b/tests/recording/CMakeLists.txt index b5b1e6a54e..b1977c85b1 100644 --- a/tests/recording/CMakeLists.txt +++ b/tests/recording/CMakeLists.txt @@ -4,6 +4,10 @@ setup_hifi_project(Test) set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "Tests/manual-tests/") setup_memory_debugger() link_hifi_libraries(shared recording) +if (WIN32) + target_link_libraries(${TARGET_NAME} Winmm.lib) + add_dependency_external_projects(wasapi) +endif() package_libraries_for_deployment() # FIXME convert to unit tests diff --git a/tests/render-perf/CMakeLists.txt b/tests/render-perf/CMakeLists.txt index 59e043cd64..09b2dc6a50 100644 --- a/tests/render-perf/CMakeLists.txt +++ b/tests/render-perf/CMakeLists.txt @@ -16,6 +16,7 @@ link_hifi_libraries(shared networking model fbx ktx image octree gl gpu gpu-gl r if (WIN32) target_link_libraries(${TARGET_NAME} Winmm.lib) + add_dependency_external_projects(wasapi) endif() package_libraries_for_deployment() From 76223aa06f56d4bf923b7c52c75e8be5cb453424 Mon Sep 17 00:00:00 2001 From: luiscuenca Date: Fri, 27 Oct 2017 13:07:16 -0700 Subject: [PATCH 06/17] Force wasapi to compile with domain-server (TEST) --- domain-server/CMakeLists.txt | 1 + tests/recording/CMakeLists.txt | 1 - tests/render-perf/CMakeLists.txt | 1 - 3 files changed, 1 insertion(+), 2 deletions(-) diff --git a/domain-server/CMakeLists.txt b/domain-server/CMakeLists.txt index c1e275e4d3..4004bee598 100644 --- a/domain-server/CMakeLists.txt +++ b/domain-server/CMakeLists.txt @@ -44,6 +44,7 @@ if (UNIX) endif () if (WIN32) + add_dependency_external_projects(wasapi) package_libraries_for_deployment() endif () diff --git a/tests/recording/CMakeLists.txt b/tests/recording/CMakeLists.txt index b1977c85b1..7ed4f5b1b0 100644 --- a/tests/recording/CMakeLists.txt +++ b/tests/recording/CMakeLists.txt @@ -6,7 +6,6 @@ setup_memory_debugger() link_hifi_libraries(shared recording) if (WIN32) target_link_libraries(${TARGET_NAME} Winmm.lib) - add_dependency_external_projects(wasapi) endif() package_libraries_for_deployment() diff --git a/tests/render-perf/CMakeLists.txt b/tests/render-perf/CMakeLists.txt index 09b2dc6a50..59e043cd64 100644 --- a/tests/render-perf/CMakeLists.txt +++ b/tests/render-perf/CMakeLists.txt @@ -16,7 +16,6 @@ link_hifi_libraries(shared networking model fbx ktx image octree gl gpu gpu-gl r if (WIN32) target_link_libraries(${TARGET_NAME} Winmm.lib) - add_dependency_external_projects(wasapi) endif() package_libraries_for_deployment() From bda63e38a996c21f20f9ccb7a14c87cd7a1b4884 Mon Sep 17 00:00:00 2001 From: luiscuenca Date: Fri, 27 Oct 2017 13:38:13 -0700 Subject: [PATCH 07/17] Updating all wasapi dependencies --- domain-server/CMakeLists.txt | 1 - tests/controllers/CMakeLists.txt | 1 + tests/entities/CMakeLists.txt | 4 ++++ tests/gpu-test/CMakeLists.txt | 5 +++++ tests/qt59/CMakeLists.txt | 5 +++++ tests/recording/CMakeLists.txt | 3 ++- tests/render-perf/CMakeLists.txt | 1 + tests/render-texture-load/CMakeLists.txt | 3 ++- tests/render-utils/CMakeLists.txt | 4 ++++ tests/shaders/CMakeLists.txt | 4 ++++ 10 files changed, 28 insertions(+), 3 deletions(-) diff --git a/domain-server/CMakeLists.txt b/domain-server/CMakeLists.txt index 4004bee598..c1e275e4d3 100644 --- a/domain-server/CMakeLists.txt +++ b/domain-server/CMakeLists.txt @@ -44,7 +44,6 @@ if (UNIX) endif () if (WIN32) - add_dependency_external_projects(wasapi) package_libraries_for_deployment() endif () diff --git a/tests/controllers/CMakeLists.txt b/tests/controllers/CMakeLists.txt index 062d69ca03..c3d25cfe2e 100644 --- a/tests/controllers/CMakeLists.txt +++ b/tests/controllers/CMakeLists.txt @@ -19,6 +19,7 @@ if (WIN32) endif() if (WIN32) target_link_libraries(${TARGET_NAME} Winmm.lib) + add_dependency_external_projects(wasapi) endif() package_libraries_for_deployment() diff --git a/tests/entities/CMakeLists.txt b/tests/entities/CMakeLists.txt index 080ae7cdd9..0c33eb8555 100644 --- a/tests/entities/CMakeLists.txt +++ b/tests/entities/CMakeLists.txt @@ -9,4 +9,8 @@ set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "Tests/manual-tests/") # link in the shared libraries link_hifi_libraries(entities avatars shared octree gpu model fbx networking animation audio gl) +if (WIN32) + add_dependency_external_projects(wasapi) +endif () + package_libraries_for_deployment() diff --git a/tests/gpu-test/CMakeLists.txt b/tests/gpu-test/CMakeLists.txt index d73d7a111d..8e49d523b8 100644 --- a/tests/gpu-test/CMakeLists.txt +++ b/tests/gpu-test/CMakeLists.txt @@ -5,6 +5,11 @@ setup_hifi_project(Quick Gui OpenGL Script Widgets) setup_memory_debugger() set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "Tests/manual-tests/") link_hifi_libraries(networking gl gpu gpu-gl procedural shared fbx model model-networking animation script-engine render render-utils octree image ktx) + +if (WIN32) + add_dependency_external_projects(wasapi) +endif () + package_libraries_for_deployment() target_nsight() diff --git a/tests/qt59/CMakeLists.txt b/tests/qt59/CMakeLists.txt index e0e8138a1e..e3450ae069 100644 --- a/tests/qt59/CMakeLists.txt +++ b/tests/qt59/CMakeLists.txt @@ -11,7 +11,12 @@ setup_memory_debugger() setup_hifi_project(Gui) set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "Tests/manual-tests/") + # link in the shared libraries link_hifi_libraries(shared networking) +if (WIN32) + add_dependency_external_projects(wasapi) +endif() + package_libraries_for_deployment() diff --git a/tests/recording/CMakeLists.txt b/tests/recording/CMakeLists.txt index 7ed4f5b1b0..dbb942a27a 100644 --- a/tests/recording/CMakeLists.txt +++ b/tests/recording/CMakeLists.txt @@ -6,6 +6,7 @@ setup_memory_debugger() link_hifi_libraries(shared recording) if (WIN32) target_link_libraries(${TARGET_NAME} Winmm.lib) + add_dependency_external_projects(wasapi) endif() package_libraries_for_deployment() @@ -17,4 +18,4 @@ package_libraries_for_deployment() # # package_libraries_for_deployment() #endmacro () -#setup_hifi_testcase() +#setup_hifi_testcase() \ No newline at end of file diff --git a/tests/render-perf/CMakeLists.txt b/tests/render-perf/CMakeLists.txt index 59e043cd64..09b2dc6a50 100644 --- a/tests/render-perf/CMakeLists.txt +++ b/tests/render-perf/CMakeLists.txt @@ -16,6 +16,7 @@ link_hifi_libraries(shared networking model fbx ktx image octree gl gpu gpu-gl r if (WIN32) target_link_libraries(${TARGET_NAME} Winmm.lib) + add_dependency_external_projects(wasapi) endif() package_libraries_for_deployment() diff --git a/tests/render-texture-load/CMakeLists.txt b/tests/render-texture-load/CMakeLists.txt index 30030914ab..432a1f00d6 100644 --- a/tests/render-texture-load/CMakeLists.txt +++ b/tests/render-texture-load/CMakeLists.txt @@ -26,7 +26,8 @@ target_include_directories(${TARGET_NAME} SYSTEM PUBLIC ${QUAZIP_INCLUDE_DIRS}) target_link_libraries(${TARGET_NAME} ${QUAZIP_LIBRARIES}) if (WIN32) -add_paths_to_fixup_libs(${QUAZIP_DLL_PATH}) + add_paths_to_fixup_libs(${QUAZIP_DLL_PATH}) + add_dependency_external_projects(wasapi) endif () diff --git a/tests/render-utils/CMakeLists.txt b/tests/render-utils/CMakeLists.txt index 4944ad2cbc..4e67aef3be 100644 --- a/tests/render-utils/CMakeLists.txt +++ b/tests/render-utils/CMakeLists.txt @@ -11,4 +11,8 @@ setup_memory_debugger() link_hifi_libraries(render-utils gl gpu gpu-gl shared) target_link_libraries(${TARGET_NAME} ${CMAKE_THREAD_LIBS_INIT}) +if (WIN32) + add_dependency_external_projects(wasapi) +endif () + package_libraries_for_deployment() diff --git a/tests/shaders/CMakeLists.txt b/tests/shaders/CMakeLists.txt index bab1e0dcdc..ba4ca88127 100644 --- a/tests/shaders/CMakeLists.txt +++ b/tests/shaders/CMakeLists.txt @@ -17,4 +17,8 @@ include_directories("${PROJECT_BINARY_DIR}/../../libraries/render-utils/") include_directories("${PROJECT_BINARY_DIR}/../../libraries/entities-renderer/") include_directories("${PROJECT_BINARY_DIR}/../../libraries/model/") +if (WIN32) + add_dependency_external_projects(wasapi) +endif () + package_libraries_for_deployment() From 1000318dff63622d5074dc2982b632a586edfbc4 Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Fri, 27 Oct 2017 14:26:02 -0700 Subject: [PATCH 08/17] tweak min dimension to match current behavior --- libraries/entities/src/EntityItem.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/libraries/entities/src/EntityItem.cpp b/libraries/entities/src/EntityItem.cpp index e6549160b8..71e6990aaf 100644 --- a/libraries/entities/src/EntityItem.cpp +++ b/libraries/entities/src/EntityItem.cpp @@ -1717,8 +1717,7 @@ void EntityItem::setParentID(const QUuid& value) { } void EntityItem::setDimensions(const glm::vec3& value) { - const float MIN_ENTITY_DIMENSION = 0.00001f; - glm::vec3 newDimensions = glm::max(value, glm::vec3(MIN_ENTITY_DIMENSION)); + glm::vec3 newDimensions = glm::max(value, glm::vec3(0.0f)); // can never have negative dimensions if (getDimensions() != newDimensions) { _dimensions = newDimensions; markDirtyFlags(Simulation::DIRTY_SHAPE | Simulation::DIRTY_MASS); From a7a0f03ede8c3afbee422ec8bfbd9e448521a0cd Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Fri, 27 Oct 2017 18:39:17 -0700 Subject: [PATCH 09/17] rename SpatiallyNestable::getPosition() to SpatiallyNestable::getWorldPosition() --- assignment-client/src/Agent.cpp | 12 ++-- .../src/avatars/AvatarMixerClientData.h | 2 +- .../src/avatars/AvatarMixerSlave.cpp | 2 +- .../src/avatars/ScriptableAvatar.cpp | 2 +- interface/src/Application.cpp | 38 ++++++------- interface/src/avatar/AvatarActionHold.cpp | 2 +- interface/src/avatar/AvatarManager.cpp | 2 +- interface/src/avatar/AvatarManager.h | 2 +- interface/src/avatar/AvatarMotionState.cpp | 2 +- interface/src/avatar/MyAvatar.cpp | 56 +++++++++---------- interface/src/avatar/MyAvatar.h | 2 +- .../src/avatar/MyCharacterController.cpp | 2 +- interface/src/raypick/JointRayPick.cpp | 2 +- interface/src/ui/Stats.cpp | 2 +- interface/src/ui/overlays/Base3DOverlay.cpp | 4 +- interface/src/ui/overlays/Base3DOverlay.h | 2 +- interface/src/ui/overlays/Circle3DOverlay.cpp | 4 +- .../ui/overlays/ContextOverlayInterface.cpp | 2 +- interface/src/ui/overlays/Cube3DOverlay.cpp | 2 +- interface/src/ui/overlays/Grid3DOverlay.cpp | 2 +- interface/src/ui/overlays/Line3DOverlay.cpp | 4 +- interface/src/ui/overlays/ModelOverlay.cpp | 6 +- interface/src/ui/overlays/Overlays.cpp | 2 +- interface/src/ui/overlays/OverlaysPayload.cpp | 2 +- interface/src/ui/overlays/Planar3DOverlay.cpp | 2 +- .../src/ui/overlays/Rectangle3DOverlay.cpp | 2 +- interface/src/ui/overlays/Shape3DOverlay.cpp | 2 +- interface/src/ui/overlays/Volume3DOverlay.cpp | 2 +- interface/src/ui/overlays/Web3DOverlay.cpp | 6 +- .../src/avatars-renderer/Avatar.cpp | 42 +++++++------- libraries/avatars/src/AvatarData.cpp | 14 ++--- libraries/avatars/src/AvatarData.h | 2 +- libraries/avatars/src/AvatarHashMap.cpp | 4 +- libraries/avatars/src/HeadData.cpp | 4 +- libraries/avatars/src/ScriptAvatarData.cpp | 2 +- .../src/EntityTreeRenderer.cpp | 2 +- .../src/RenderableLightEntityItem.cpp | 2 +- .../src/RenderableModelEntityItem.cpp | 2 +- .../src/RenderablePolyLineEntityItem.cpp | 2 +- .../src/RenderablePolyVoxEntityItem.cpp | 6 +- .../src/RenderableShapeEntityItem.cpp | 2 +- .../src/RenderableWebEntityItem.cpp | 6 +- .../src/RenderableZoneEntityItem.cpp | 4 +- libraries/entities/src/EntityItem.cpp | 12 ++-- .../entities/src/EntityScriptingInterface.cpp | 4 +- libraries/entities/src/EntityTree.cpp | 4 +- libraries/entities/src/EntityTreeElement.cpp | 8 +-- libraries/entities/src/LineEntityItem.cpp | 2 +- libraries/entities/src/ModelEntityItem.cpp | 2 +- .../entities/src/ParticleEffectEntityItem.cpp | 2 +- libraries/entities/src/PolyLineEntityItem.cpp | 2 +- libraries/entities/src/PolyVoxEntityItem.cpp | 6 +- libraries/entities/src/ShapeEntityItem.cpp | 2 +- libraries/entities/src/TextEntityItem.cpp | 2 +- libraries/entities/src/WebEntityItem.cpp | 2 +- libraries/entities/src/ZoneEntityItem.cpp | 2 +- libraries/physics/src/EntityMotionState.cpp | 4 +- libraries/physics/src/EntityMotionState.h | 2 +- libraries/physics/src/ObjectActionTractor.cpp | 2 +- .../physics/src/PhysicalEntitySimulation.cpp | 2 +- libraries/shared/src/SpatiallyNestable.cpp | 24 ++++---- libraries/shared/src/SpatiallyNestable.h | 10 ++-- 62 files changed, 180 insertions(+), 180 deletions(-) diff --git a/assignment-client/src/Agent.cpp b/assignment-client/src/Agent.cpp index 4efc3343d1..f166a780ff 100644 --- a/assignment-client/src/Agent.cpp +++ b/assignment-client/src/Agent.cpp @@ -441,7 +441,7 @@ void Agent::executeScript() { Transform audioTransform; auto headOrientation = scriptedAvatar->getHeadOrientation(); - audioTransform.setTranslation(scriptedAvatar->getPosition()); + audioTransform.setTranslation(scriptedAvatar->getWorldPosition()); audioTransform.setRotation(headOrientation); QByteArray encodedBuffer; @@ -452,7 +452,7 @@ void Agent::executeScript() { } AbstractAudioInterface::emitAudioPacket(encodedBuffer.data(), encodedBuffer.size(), audioSequenceNumber, - audioTransform, scriptedAvatar->getPosition(), glm::vec3(0), + audioTransform, scriptedAvatar->getWorldPosition(), glm::vec3(0), packetType, _selectedCodecName); }); @@ -742,10 +742,10 @@ void Agent::processAgentAvatarAudio() { audioPacket->writePrimitive(numAvailableSamples); // use the orientation and position of this avatar for the source of this audio - audioPacket->writePrimitive(scriptedAvatar->getPosition()); + audioPacket->writePrimitive(scriptedAvatar->getWorldPosition()); glm::quat headOrientation = scriptedAvatar->getHeadOrientation(); audioPacket->writePrimitive(headOrientation); - audioPacket->writePrimitive(scriptedAvatar->getPosition()); + audioPacket->writePrimitive(scriptedAvatar->getWorldPosition()); audioPacket->writePrimitive(glm::vec3(0)); // no matter what, the loudness should be set to 0 @@ -759,10 +759,10 @@ void Agent::processAgentAvatarAudio() { audioPacket->writePrimitive((quint8)0); // use the orientation and position of this avatar for the source of this audio - audioPacket->writePrimitive(scriptedAvatar->getPosition()); + audioPacket->writePrimitive(scriptedAvatar->getWorldPosition()); glm::quat headOrientation = scriptedAvatar->getHeadOrientation(); audioPacket->writePrimitive(headOrientation); - audioPacket->writePrimitive(scriptedAvatar->getPosition()); + audioPacket->writePrimitive(scriptedAvatar->getWorldPosition()); // HUH? why do we write this twice?? audioPacket->writePrimitive(glm::vec3(0)); QByteArray encodedBuffer; diff --git a/assignment-client/src/avatars/AvatarMixerClientData.h b/assignment-client/src/avatars/AvatarMixerClientData.h index 12b0286088..d5c7784da7 100644 --- a/assignment-client/src/avatars/AvatarMixerClientData.h +++ b/assignment-client/src/avatars/AvatarMixerClientData.h @@ -91,7 +91,7 @@ public: void loadJSONStats(QJsonObject& jsonObject) const; - glm::vec3 getPosition() const { return _avatar ? _avatar->getPosition() : glm::vec3(0); } + glm::vec3 getPosition() const { return _avatar ? _avatar->getWorldPosition() : glm::vec3(0); } glm::vec3 getGlobalBoundingBoxCorner() const { return _avatar ? _avatar->getGlobalBoundingBoxCorner() : glm::vec3(0); } bool isRadiusIgnoring(const QUuid& other) const { return _radiusIgnoredOthers.find(other) != _radiusIgnoredOthers.end(); } void addToRadiusIgnoringSet(const QUuid& other) { _radiusIgnoredOthers.insert(other); } diff --git a/assignment-client/src/avatars/AvatarMixerSlave.cpp b/assignment-client/src/avatars/AvatarMixerSlave.cpp index 5d36a6d261..dd045c24ea 100644 --- a/assignment-client/src/avatars/AvatarMixerSlave.cpp +++ b/assignment-client/src/avatars/AvatarMixerSlave.cpp @@ -209,7 +209,7 @@ void AvatarMixerSlave::broadcastAvatarDataToAgent(const SharedNodePointer& node) assert(avatarNode); // we can't have gotten here without the avatarData being a valid key in the map return nodeData->getLastBroadcastTime(avatarNode->getUUID()); }, [&](AvatarSharedPointer avatar)->float{ - glm::vec3 nodeBoxHalfScale = (avatar->getPosition() - avatar->getGlobalBoundingBoxCorner() * avatar->getSensorToWorldScale()); + glm::vec3 nodeBoxHalfScale = (avatar->getWorldPosition() - avatar->getGlobalBoundingBoxCorner() * avatar->getSensorToWorldScale()); return glm::max(nodeBoxHalfScale.x, glm::max(nodeBoxHalfScale.y, nodeBoxHalfScale.z)); }, [&](AvatarSharedPointer avatar)->bool { if (avatar == thisAvatar) { diff --git a/assignment-client/src/avatars/ScriptableAvatar.cpp b/assignment-client/src/avatars/ScriptableAvatar.cpp index 5060891284..c9ded2d6fb 100644 --- a/assignment-client/src/avatars/ScriptableAvatar.cpp +++ b/assignment-client/src/avatars/ScriptableAvatar.cpp @@ -20,7 +20,7 @@ QByteArray ScriptableAvatar::toByteArrayStateful(AvatarDataDetail dataDetail, bool dropFaceTracking) { - _globalPosition = getPosition(); + _globalPosition = getWorldPosition(); return AvatarData::toByteArrayStateful(dataDetail); } diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index f2bb52ea47..b1f461f227 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -893,7 +893,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo connect(audioIO.data(), &AudioClient::muteEnvironmentRequested, [](glm::vec3 position, float radius) { auto audioClient = DependencyManager::get(); auto audioScriptingInterface = DependencyManager::get(); - auto myAvatarPosition = DependencyManager::get()->getMyAvatar()->getPosition(); + auto myAvatarPosition = DependencyManager::get()->getMyAvatar()->getWorldPosition(); float distance = glm::distance(myAvatarPosition, position); bool shouldMute = !audioClient->isMuted() && (distance < radius); @@ -966,7 +966,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo auto addressManager = DependencyManager::get(); // use our MyAvatar position and quat for address manager path - addressManager->setPositionGetter([this]{ return getMyAvatar()->getPosition(); }); + addressManager->setPositionGetter([this]{ return getMyAvatar()->getWorldPosition(); }); addressManager->setOrientationGetter([this]{ return getMyAvatar()->getOrientation(); }); connect(addressManager.data(), &AddressManager::hostChanged, this, &Application::updateWindowTitle); @@ -1501,7 +1501,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo static const QString FAST_STATS_ARG = "--fast-heartbeat"; static int SEND_STATS_INTERVAL_MS = arguments().indexOf(FAST_STATS_ARG) != -1 ? 1000 : 10000; - static glm::vec3 lastAvatarPosition = myAvatar->getPosition(); + static glm::vec3 lastAvatarPosition = myAvatar->getWorldPosition(); static glm::mat4 lastHMDHeadPose = getHMDSensorPose(); static controller::Pose lastLeftHandPose = myAvatar->getLeftHandPose(); static controller::Pose lastRightHandPose = myAvatar->getRightHandPose(); @@ -1629,7 +1629,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo properties["bytes_downloaded"] = bytesDownloaded; auto myAvatar = getMyAvatar(); - glm::vec3 avatarPosition = myAvatar->getPosition(); + glm::vec3 avatarPosition = myAvatar->getWorldPosition(); properties["avatar_has_moved"] = lastAvatarPosition != avatarPosition; lastAvatarPosition = avatarPosition; @@ -1711,7 +1711,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo checkNearbyAvatarsTimer->setInterval(CHECK_NEARBY_AVATARS_INTERVAL_MS); // 10 seconds, Qt::CoarseTimer ok connect(checkNearbyAvatarsTimer, &QTimer::timeout, this, [this]() { auto avatarManager = DependencyManager::get(); - int nearbyAvatars = avatarManager->numberOfAvatarsInRange(avatarManager->getMyAvatar()->getPosition(), + int nearbyAvatars = avatarManager->numberOfAvatarsInRange(avatarManager->getMyAvatar()->getWorldPosition(), NEARBY_AVATAR_RADIUS_METERS) - 1; if (nearbyAvatars != lastCountOfNearbyAvatars) { lastCountOfNearbyAvatars = nearbyAvatars; @@ -2455,11 +2455,11 @@ void Application::updateCamera(RenderArgs& renderArgs) { glm::quat hmdRotation = extractRotation(myAvatar->getHMDSensorMatrix()); _myCamera.setOrientation(cameraEntity->getRotation() * hmdRotation); glm::vec3 hmdOffset = extractTranslation(myAvatar->getHMDSensorMatrix()); - _myCamera.setPosition(cameraEntity->getPosition() + (hmdRotation * hmdOffset)); + _myCamera.setPosition(cameraEntity->getWorldPosition() + (hmdRotation * hmdOffset)); } else { _myCamera.setOrientation(cameraEntity->getRotation()); - _myCamera.setPosition(cameraEntity->getPosition()); + _myCamera.setPosition(cameraEntity->getWorldPosition()); } } } @@ -3871,7 +3871,7 @@ void Application::idle() { auto entity = getEntities()->getTree()->findEntityByID(_keyboardFocusedEntity.get()); if (entity && _keyboardFocusHighlight) { _keyboardFocusHighlight->setRotation(entity->getRotation()); - _keyboardFocusHighlight->setPosition(entity->getPosition()); + _keyboardFocusHighlight->setWorldPosition(entity->getWorldPosition()); } } else { // Only Web overlays can have focus. @@ -3879,7 +3879,7 @@ void Application::idle() { std::dynamic_pointer_cast(getOverlays().getOverlay(_keyboardFocusedOverlay.get())); if (overlay && _keyboardFocusHighlight) { _keyboardFocusHighlight->setRotation(overlay->getRotation()); - _keyboardFocusHighlight->setPosition(overlay->getPosition()); + _keyboardFocusHighlight->setWorldPosition(overlay->getWorldPosition()); } } } @@ -4013,7 +4013,7 @@ bool Application::exportEntities(const QString& filename, !entityIDs.contains(parentID) || !entityTree->findEntityByEntityItemID(parentID))) { // If parent wasn't selected, we want absolute position, which isn't in properties. - auto position = entityItem->getPosition(); + auto position = entityItem->getWorldPosition(); root.x = glm::min(root.x, position.x); root.y = glm::min(root.y, position.y); root.z = glm::min(root.z, position.z); @@ -4216,7 +4216,7 @@ void Application::init() { return 0.0f; } - auto distance = glm::distance(getMyAvatar()->getPosition(), item.getPosition()); + auto distance = glm::distance(getMyAvatar()->getWorldPosition(), item.getWorldPosition()); return atan2(maxSize, distance); }); @@ -4520,7 +4520,7 @@ void Application::setKeyboardFocusHighlight(const glm::vec3& position, const glm // Position focus _keyboardFocusHighlight->setRotation(rotation); - _keyboardFocusHighlight->setPosition(position); + _keyboardFocusHighlight->setWorldPosition(position); _keyboardFocusHighlight->setDimensions(dimensions); _keyboardFocusHighlight->setVisible(true); } @@ -4557,7 +4557,7 @@ void Application::setKeyboardFocusEntity(const EntityItemID& entityItemID) { } _lastAcceptedKeyPress = usecTimestampNow(); - setKeyboardFocusHighlight(entity->getPosition(), entity->getRotation(), + setKeyboardFocusHighlight(entity->getWorldPosition(), entity->getRotation(), entity->getDimensions() * FOCUS_HIGHLIGHT_EXPANSION_FACTOR); } } @@ -4594,7 +4594,7 @@ void Application::setKeyboardFocusOverlay(const OverlayID& overlayID) { if (overlay->getProperty("showKeyboardFocusHighlight").toBool()) { auto size = overlay->getSize() * FOCUS_HIGHLIGHT_EXPANSION_FACTOR; const float OVERLAY_DEPTH = 0.0105f; - setKeyboardFocusHighlight(overlay->getPosition(), overlay->getRotation(), glm::vec3(size.x, size.y, OVERLAY_DEPTH)); + setKeyboardFocusHighlight(overlay->getWorldPosition(), overlay->getRotation(), glm::vec3(size.x, size.y, OVERLAY_DEPTH)); } else if (_keyboardFocusHighlight) { _keyboardFocusHighlight->setVisible(false); } @@ -4686,7 +4686,7 @@ void Application::update(float deltaTime) { controller::InputCalibrationData calibrationData = { myAvatar->getSensorToWorldMatrix(), - createMatFromQuatAndPos(myAvatar->getOrientation(), myAvatar->getPosition()), + createMatFromQuatAndPos(myAvatar->getOrientation(), myAvatar->getWorldPosition()), myAvatar->getHMDSensorMatrix(), myAvatar->getCenterEyeCalibrationMat(), myAvatar->getHeadCalibrationMat(), @@ -4796,7 +4796,7 @@ void Application::update(float deltaTime) { }; // copy controller poses from userInputMapper to myAvatar. - glm::mat4 myAvatarMatrix = createMatFromQuatAndPos(myAvatar->getOrientation(), myAvatar->getPosition()); + glm::mat4 myAvatarMatrix = createMatFromQuatAndPos(myAvatar->getOrientation(), myAvatar->getWorldPosition()); glm::mat4 worldToSensorMatrix = glm::inverse(myAvatar->getSensorToWorldMatrix()); glm::mat4 avatarToSensorMatrix = worldToSensorMatrix * myAvatarMatrix; for (auto& action : avatarControllerActions) { @@ -5412,7 +5412,7 @@ std::shared_ptr Application::getMyAvatar() const { } glm::vec3 Application::getAvatarPosition() const { - return getMyAvatar()->getPosition(); + return getMyAvatar()->getWorldPosition(); } void Application::copyViewFrustum(ViewFrustum& viewOut) const { @@ -5624,7 +5624,7 @@ bool Application::nearbyEntitiesAreReadyForPhysics() { // whose bounding boxes cannot be computed (it is too loose for our purposes here). Instead we manufacture // custom filters and use the general-purpose EntityTree::findEntities(filter, ...) QVector entities; - AABox avatarBox(getMyAvatar()->getPosition() - glm::vec3(PHYSICS_READY_RANGE), glm::vec3(2 * PHYSICS_READY_RANGE)); + AABox avatarBox(getMyAvatar()->getWorldPosition() - glm::vec3(PHYSICS_READY_RANGE), glm::vec3(2 * PHYSICS_READY_RANGE)); // create two functions that use avatarBox (entityScan and elementScan), the second calls the first std::function entityScan = [=](EntityItemPointer& entity) { if (entity->shouldBePhysical()) { @@ -6438,7 +6438,7 @@ void Application::addAssetToWorldAddEntity(QString filePath, QString mapping) { properties.setCollisionless(true); // Temporarily set so that doesn't collide with avatar. properties.setVisible(false); // Temporarily set so that don't see at large unresized dimensions. glm::vec3 positionOffset = getMyAvatar()->getOrientation() * (getMyAvatar()->getSensorToWorldScale() * glm::vec3(0.0f, 0.0f, -2.0f)); - properties.setPosition(getMyAvatar()->getPosition() + positionOffset); + properties.setPosition(getMyAvatar()->getWorldPosition() + positionOffset); properties.setRotation(getMyAvatar()->getOrientation()); properties.setGravity(glm::vec3(0.0f, 0.0f, 0.0f)); auto entityID = DependencyManager::get()->addEntity(properties); diff --git a/interface/src/avatar/AvatarActionHold.cpp b/interface/src/avatar/AvatarActionHold.cpp index a47bbbad1b..668994883d 100644 --- a/interface/src/avatar/AvatarActionHold.cpp +++ b/interface/src/avatar/AvatarActionHold.cpp @@ -529,7 +529,7 @@ void AvatarActionHold::lateAvatarUpdate(const AnimPose& prePhysicsRoomPose, cons rigidBody->setWorldTransform(worldTrans); bool positionSuccess; - ownerEntity->setPosition(bulletToGLM(worldTrans.getOrigin()) + ObjectMotionState::getWorldOffset(), positionSuccess, false); + ownerEntity->setWorldPosition(bulletToGLM(worldTrans.getOrigin()) + ObjectMotionState::getWorldOffset(), positionSuccess, false); bool orientationSuccess; ownerEntity->setOrientation(bulletToGLM(worldTrans.getRotation()), orientationSuccess, false); } diff --git a/interface/src/avatar/AvatarManager.cpp b/interface/src/avatar/AvatarManager.cpp index e8b800db69..d9d56b76b1 100644 --- a/interface/src/avatar/AvatarManager.cpp +++ b/interface/src/avatar/AvatarManager.cpp @@ -435,7 +435,7 @@ void AvatarManager::handleCollisionEvents(const CollisionEvents& collisionEvents static const int MAX_INJECTOR_COUNT = 3; if (_collisionInjectors.size() < MAX_INJECTOR_COUNT) { auto injector = AudioInjector::playSound(collisionSound, energyFactorOfFull, AVATAR_STRETCH_FACTOR, - myAvatar->getPosition()); + myAvatar->getWorldPosition()); _collisionInjectors.emplace_back(injector); } myAvatar->collisionWithEntity(collision); diff --git a/interface/src/avatar/AvatarManager.h b/interface/src/avatar/AvatarManager.h index 39a4f7a4af..fc93bbbfe3 100644 --- a/interface/src/avatar/AvatarManager.h +++ b/interface/src/avatar/AvatarManager.h @@ -41,7 +41,7 @@ public: void init(); std::shared_ptr getMyAvatar() { return _myAvatar; } - glm::vec3 getMyAvatarPosition() const { return _myAvatar->getPosition(); } + glm::vec3 getMyAvatarPosition() const { return _myAvatar->getWorldPosition(); } // Null/Default-constructed QUuids will return MyAvatar Q_INVOKABLE virtual ScriptAvatarData* getAvatar(QUuid avatarID) override { return new ScriptAvatar(getAvatarBySessionID(avatarID)); } diff --git a/interface/src/avatar/AvatarMotionState.cpp b/interface/src/avatar/AvatarMotionState.cpp index 91c83afcbd..01cfb93333 100644 --- a/interface/src/avatar/AvatarMotionState.cpp +++ b/interface/src/avatar/AvatarMotionState.cpp @@ -106,7 +106,7 @@ float AvatarMotionState::getObjectAngularDamping() const { // virtual glm::vec3 AvatarMotionState::getObjectPosition() const { - return _avatar->getPosition(); + return _avatar->getWorldPosition(); } // virtual diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index 3189ad3c77..9458789685 100755 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -196,7 +196,7 @@ MyAvatar::MyAvatar(QThread* thread) : setDisplayName(dummyAvatar.getDisplayName()); } - setPosition(dummyAvatar.getPosition()); + setWorldPosition(dummyAvatar.getWorldPosition()); setOrientation(dummyAvatar.getOrientation()); if (!dummyAvatar.getAttachmentData().isEmpty()) { @@ -276,7 +276,7 @@ void MyAvatar::simulateAttachments(float deltaTime) { QByteArray MyAvatar::toByteArrayStateful(AvatarDataDetail dataDetail, bool dropFaceTracking) { CameraMode mode = qApp->getCamera().getMode(); - _globalPosition = getPosition(); + _globalPosition = getWorldPosition(); // This might not be right! Isn't the capsule local offset in avatar space, and don't we need to add the radius to the y as well? -HRS 5/26/17 _globalBoundingBoxDimensions.x = _characterController.getCapsuleRadius(); _globalBoundingBoxDimensions.y = _characterController.getCapsuleHalfHeight(); @@ -284,11 +284,11 @@ QByteArray MyAvatar::toByteArrayStateful(AvatarDataDetail dataDetail, bool dropF _globalBoundingBoxOffset = _characterController.getCapsuleLocalOffset(); if (mode == CAMERA_MODE_THIRD_PERSON || mode == CAMERA_MODE_INDEPENDENT) { // fake the avatar position that is sent up to the AvatarMixer - glm::vec3 oldPosition = getPosition(); - setPosition(getSkeletonPosition()); + glm::vec3 oldPosition = getWorldPosition(); + setWorldPosition(getSkeletonPosition()); QByteArray array = AvatarData::toByteArrayStateful(dataDetail); // copy the correct position back - setPosition(oldPosition); + setWorldPosition(oldPosition); return array; } return AvatarData::toByteArrayStateful(dataDetail); @@ -321,14 +321,14 @@ void MyAvatar::centerBody() { if (_characterController.getState() == CharacterController::State::Ground) { // the avatar's physical aspect thinks it is standing on something // therefore need to be careful to not "center" the body below the floor - float downStep = glm::dot(worldBodyPos - getPosition(), _worldUpDirection); + float downStep = glm::dot(worldBodyPos - getWorldPosition(), _worldUpDirection); if (downStep < -0.5f * _characterController.getCapsuleHalfHeight() + _characterController.getCapsuleRadius()) { worldBodyPos -= downStep * _worldUpDirection; } } // this will become our new position. - setPosition(worldBodyPos); + setWorldPosition(worldBodyPos); setOrientation(worldBodyRot); // reset the body in sensor space @@ -372,7 +372,7 @@ void MyAvatar::reset(bool andRecenter, bool andReload, bool andHead) { auto worldBodyRot = glmExtractRotation(worldBodyMatrix); // this will become our new position. - setPosition(worldBodyPos); + setWorldPosition(worldBodyPos); setOrientation(worldBodyRot); // now sample the new hmd orientation AFTER sensor reset, which should be identity. @@ -410,7 +410,7 @@ void MyAvatar::update(float deltaTime) { #endif if (_goToPending) { - setPosition(_goToPosition); + setWorldPosition(_goToPosition); setOrientation(_goToOrientation); _headControllerFacingMovingAverage = _headControllerFacing; // reset moving average _goToPending = false; @@ -444,7 +444,7 @@ void MyAvatar::update(float deltaTime) { // This might not be right! Isn't the capsule local offset in avatar space? -HRS 5/26/17 halfBoundingBoxDimensions += _characterController.getCapsuleLocalOffset(); QMetaObject::invokeMethod(audio.data(), "setAvatarBoundingBoxParameters", - Q_ARG(glm::vec3, (getPosition() - halfBoundingBoxDimensions)), + Q_ARG(glm::vec3, (getWorldPosition() - halfBoundingBoxDimensions)), Q_ARG(glm::vec3, (halfBoundingBoxDimensions*2.0f))); if (getIdentityDataChanged()) { @@ -537,7 +537,7 @@ void MyAvatar::simulate(float deltaTime) { if (!_skeletonModel->hasSkeleton()) { // All the simulation that can be done has been done - getHead()->setPosition(getPosition()); // so audio-position isn't 0,0,0 + getHead()->setPosition(getWorldPosition()); // so audio-position isn't 0,0,0 return; } @@ -555,7 +555,7 @@ void MyAvatar::simulate(float deltaTime) { Head* head = getHead(); glm::vec3 headPosition; if (!_skeletonModel->getHeadPosition(headPosition)) { - headPosition = getPosition(); + headPosition = getWorldPosition(); } head->setPosition(headPosition); head->setScale(getModelScale()); @@ -666,7 +666,7 @@ void MyAvatar::updateSensorToWorldMatrix() { // update the sensor mat so that the body position will end up in the desired // position when driven from the head. float sensorToWorldScale = getEyeHeight() / getUserEyeHeight(); - glm::mat4 desiredMat = createMatFromScaleQuatAndPos(glm::vec3(sensorToWorldScale), getOrientation(), getPosition()); + glm::mat4 desiredMat = createMatFromScaleQuatAndPos(glm::vec3(sensorToWorldScale), getOrientation(), getWorldPosition()); _sensorToWorldMatrix = desiredMat * glm::inverse(_bodySensorMatrix); lateUpdatePalms(); @@ -783,7 +783,7 @@ controller::Pose MyAvatar::getRightHandTipPose() const { } glm::vec3 MyAvatar::worldToJointPoint(const glm::vec3& position, const int jointIndex) const { - glm::vec3 jointPos = getPosition();//default value if no or invalid joint specified + glm::vec3 jointPos = getWorldPosition();//default value if no or invalid joint specified glm::quat jointRot = getRotation();//default value if no or invalid joint specified if (jointIndex != -1) { if (_skeletonModel->getJointPositionInWorldFrame(jointIndex, jointPos)) { @@ -818,7 +818,7 @@ glm::quat MyAvatar::worldToJointRotation(const glm::quat& worldRot, const int jo } glm::vec3 MyAvatar::jointToWorldPoint(const glm::vec3& jointSpacePos, const int jointIndex) const { - glm::vec3 jointPos = getPosition();//default value if no or invalid joint specified + glm::vec3 jointPos = getWorldPosition();//default value if no or invalid joint specified glm::quat jointRot = getRotation();//default value if no or invalid joint specified if (jointIndex != -1) { @@ -1230,7 +1230,7 @@ void MyAvatar::updateLookAtTargetAvatar() { float angleTo = coneSphereAngle(getHead()->getEyePosition(), lookForward, avatar->getHead()->getEyePosition(), radius); if (angleTo < (smallestAngleTo * (isCurrentTarget ? KEEP_LOOKING_AT_CURRENT_ANGLE_FACTOR : 1.0f))) { _lookAtTargetAvatar = avatarPointer; - _targetAvatarPosition = avatarPointer->getPosition(); + _targetAvatarPosition = avatarPointer->getWorldPosition(); } if (_lookAtSnappingEnabled && avatar->getLookAtSnappingEnabled() && isLookingAtMe(avatar)) { @@ -1301,7 +1301,7 @@ eyeContactTarget MyAvatar::getEyeContactTarget() { } glm::vec3 MyAvatar::getDefaultEyePosition() const { - return getPosition() + getOrientation() * Quaternions::Y_180 * _skeletonModel->getDefaultEyeModelPosition(); + return getWorldPosition() + getOrientation() * Quaternions::Y_180 * _skeletonModel->getDefaultEyeModelPosition(); } const float SCRIPT_PRIORITY = 1.0f + 1.0f; @@ -1460,9 +1460,9 @@ glm::vec3 MyAvatar::getSkeletonPosition() const { // The avatar is rotated PI about the yAxis, so we have to correct for it // to get the skeleton offset contribution in the world-frame. const glm::quat FLIP = glm::angleAxis(PI, glm::vec3(0.0f, 1.0f, 0.0f)); - return getPosition() + getOrientation() * FLIP * _skeletonOffset; + return getWorldPosition() + getOrientation() * FLIP * _skeletonOffset; } - return Avatar::getPosition(); + return Avatar::getWorldPosition(); } void MyAvatar::rebuildCollisionShape() { @@ -1508,7 +1508,7 @@ controller::Pose MyAvatar::getControllerPoseInWorldFrame(controller::Action acti controller::Pose MyAvatar::getControllerPoseInAvatarFrame(controller::Action action) const { auto pose = getControllerPoseInWorldFrame(action); if (pose.valid) { - glm::mat4 invAvatarMatrix = glm::inverse(createMatFromQuatAndPos(getOrientation(), getPosition())); + glm::mat4 invAvatarMatrix = glm::inverse(createMatFromQuatAndPos(getOrientation(), getWorldPosition())); return pose.transform(invAvatarMatrix); } else { return controller::Pose(); // invalid pose @@ -1575,7 +1575,7 @@ void MyAvatar::prepareForPhysicsSimulation() { _characterController.setParentVelocity(parentVelocity); _characterController.setScaleFactor(getSensorToWorldScale()); - _characterController.setPositionAndOrientation(getPosition(), getOrientation()); + _characterController.setPositionAndOrientation(getWorldPosition(), getOrientation()); auto headPose = getControllerPoseInAvatarFrame(controller::Action::HEAD); if (headPose.isValid()) { _follow.prePhysicsUpdate(*this, deriveBodyFromHMDSensor(), _bodySensorMatrix, hasDriveInput()); @@ -1609,7 +1609,7 @@ void MyAvatar::harvestResultsFromPhysicsSimulation(float deltaTime) { if (_characterController.isEnabledAndReady()) { _characterController.getPositionAndOrientation(position, orientation); } else { - position = getPosition(); + position = getWorldPosition(); orientation = getOrientation(); } nextAttitude(position, orientation); @@ -1619,7 +1619,7 @@ void MyAvatar::harvestResultsFromPhysicsSimulation(float deltaTime) { setVelocity(_characterController.getLinearVelocity() + _characterController.getFollowVelocity()); if (_characterController.isStuck()) { _physicsSafetyPending = true; - _goToPosition = getPosition(); + _goToPosition = getWorldPosition(); } } else { setVelocity(getVelocity() + _characterController.getFollowVelocity()); @@ -1846,7 +1846,7 @@ void MyAvatar::postUpdate(float deltaTime, const render::ScenePointer& scene) { } } - DebugDraw::getInstance().updateMyAvatarPos(getPosition()); + DebugDraw::getInstance().updateMyAvatarPos(getWorldPosition()); DebugDraw::getInstance().updateMyAvatarRot(getOrientation()); AnimPose postUpdateRoomPose(_sensorToWorldMatrix); @@ -1854,7 +1854,7 @@ void MyAvatar::postUpdate(float deltaTime, const render::ScenePointer& scene) { updateHoldActions(_prePhysicsRoomPose, postUpdateRoomPose); if (_enableDebugDrawDetailedCollision) { - AnimPose rigToWorldPose(glm::vec3(1.0f), getRotation() * Quaternions::Y_180, getPosition()); + AnimPose rigToWorldPose(glm::vec3(1.0f), getRotation() * Quaternions::Y_180, getWorldPosition()); const int NUM_DEBUG_COLORS = 8; const glm::vec4 DEBUG_COLORS[NUM_DEBUG_COLORS] = { glm::vec4(1.0f, 1.0f, 1.0f, 1.0f), @@ -2105,7 +2105,7 @@ void MyAvatar::updatePosition(float deltaTime) { if (_moving) { // scan for walkability - glm::vec3 position = getPosition(); + glm::vec3 position = getWorldPosition(); MyCharacterController::RayShotgunResult result; glm::vec3 step = deltaTime * (getRotation() * _actionMotorVelocity); _characterController.testRayShotgun(position, step, result); @@ -2916,7 +2916,7 @@ float MyAvatar::getAudioEnergy() { } bool MyAvatar::didTeleport() { - glm::vec3 pos = getPosition(); + glm::vec3 pos = getWorldPosition(); glm::vec3 changeInPosition = pos - lastPosition; lastPosition = pos; return (changeInPosition.length() > MAX_AVATAR_MOVEMENT_PER_FRAME); @@ -2960,7 +2960,7 @@ glm::mat4 MyAvatar::computeCameraRelativeHandControllerMatrix(const glm::mat4& c glm::mat4 controllerWorldMatrix = getSensorToWorldMatrix() * delta * controllerSensorMatrix; // transform controller into avatar space - glm::mat4 avatarMatrix = createMatFromQuatAndPos(getOrientation(), getPosition()); + glm::mat4 avatarMatrix = createMatFromQuatAndPos(getOrientation(), getWorldPosition()); return glm::inverse(avatarMatrix) * controllerWorldMatrix; } diff --git a/interface/src/avatar/MyAvatar.h b/interface/src/avatar/MyAvatar.h index 16ed9ea5b4..263a2f34c4 100644 --- a/interface/src/avatar/MyAvatar.h +++ b/interface/src/avatar/MyAvatar.h @@ -114,7 +114,7 @@ class MyAvatar : public Avatar { // FIXME: `glm::vec3 position` is not accessible from QML, so this exposes position in a QML-native type Q_PROPERTY(QVector3D qmlPosition READ getQmlPosition) - QVector3D getQmlPosition() { auto p = getPosition(); return QVector3D(p.x, p.y, p.z); } + QVector3D getQmlPosition() { auto p = getWorldPosition(); return QVector3D(p.x, p.y, p.z); } Q_PROPERTY(bool shouldRenderLocally READ getShouldRenderLocally WRITE setShouldRenderLocally) Q_PROPERTY(glm::vec3 motorVelocity READ getScriptedMotorVelocity WRITE setScriptedMotorVelocity) diff --git a/interface/src/avatar/MyCharacterController.cpp b/interface/src/avatar/MyCharacterController.cpp index 761e2e5bff..57b5e96ee5 100755 --- a/interface/src/avatar/MyCharacterController.cpp +++ b/interface/src/avatar/MyCharacterController.cpp @@ -65,7 +65,7 @@ void MyCharacterController::updateShapeIfNecessary() { _rigidBody->setSleepingThresholds(0.0f, 0.0f); _rigidBody->setAngularFactor(0.0f); _rigidBody->setWorldTransform(btTransform(glmToBullet(_avatar->getOrientation()), - glmToBullet(_avatar->getPosition()))); + glmToBullet(_avatar->getWorldPosition()))); _rigidBody->setDamping(0.0f, 0.0f); if (_state == State::Hover) { _rigidBody->setGravity(btVector3(0.0f, 0.0f, 0.0f)); diff --git a/interface/src/raypick/JointRayPick.cpp b/interface/src/raypick/JointRayPick.cpp index cf3f380ca0..fc0ecf94e5 100644 --- a/interface/src/raypick/JointRayPick.cpp +++ b/interface/src/raypick/JointRayPick.cpp @@ -28,7 +28,7 @@ const PickRay JointRayPick::getPickRay(bool& valid) const { if (jointIndex != INVALID_JOINT || useAvatarHead) { glm::vec3 jointPos = useAvatarHead ? myAvatar->getHeadPosition() : myAvatar->getAbsoluteJointTranslationInObjectFrame(jointIndex); glm::quat jointRot = useAvatarHead ? myAvatar->getHeadOrientation() : myAvatar->getAbsoluteJointRotationInObjectFrame(jointIndex); - glm::vec3 avatarPos = myAvatar->getPosition(); + glm::vec3 avatarPos = myAvatar->getWorldPosition(); glm::quat avatarRot = myAvatar->getOrientation(); glm::vec3 pos = useAvatarHead ? jointPos : avatarPos + (avatarRot * jointPos); diff --git a/interface/src/ui/Stats.cpp b/interface/src/ui/Stats.cpp index d4a300c337..4fa5e5726b 100644 --- a/interface/src/ui/Stats.cpp +++ b/interface/src/ui/Stats.cpp @@ -192,7 +192,7 @@ void Stats::updateStats(bool force) { // Third column, avatar stats auto myAvatar = avatarManager->getMyAvatar(); - glm::vec3 avatarPos = myAvatar->getPosition(); + glm::vec3 avatarPos = myAvatar->getWorldPosition(); STAT_UPDATE(position, QVector3D(avatarPos.x, avatarPos.y, avatarPos.z)); STAT_UPDATE_FLOAT(speed, glm::length(myAvatar->getVelocity()), 0.01f); STAT_UPDATE_FLOAT(yaw, myAvatar->getBodyYaw(), 0.1f); diff --git a/interface/src/ui/overlays/Base3DOverlay.cpp b/interface/src/ui/overlays/Base3DOverlay.cpp index 42425932df..457f06aaa2 100644 --- a/interface/src/ui/overlays/Base3DOverlay.cpp +++ b/interface/src/ui/overlays/Base3DOverlay.cpp @@ -114,7 +114,7 @@ void Base3DOverlay::setProperties(const QVariantMap& originalProperties) { properties["parentJointIndex"] = getParentJointIndex(); } if (!properties["position"].isValid() && !properties["localPosition"].isValid()) { - properties["position"] = vec3toVariant(getPosition()); + properties["position"] = vec3toVariant(getWorldPosition()); } if (!properties["orientation"].isValid() && !properties["localOrientation"].isValid()) { properties["orientation"] = quatToVariant(getOrientation()); @@ -214,7 +214,7 @@ QVariant Base3DOverlay::getProperty(const QString& property) { return _name; } if (property == "position" || property == "start" || property == "p1" || property == "point") { - return vec3toVariant(getPosition()); + return vec3toVariant(getWorldPosition()); } if (property == "localPosition") { return vec3toVariant(getLocalPosition()); diff --git a/interface/src/ui/overlays/Base3DOverlay.h b/interface/src/ui/overlays/Base3DOverlay.h index 436cfbf97b..817e9b2acf 100644 --- a/interface/src/ui/overlays/Base3DOverlay.h +++ b/interface/src/ui/overlays/Base3DOverlay.h @@ -33,7 +33,7 @@ public: virtual bool is3D() const override { return true; } // TODO: consider implementing registration points in this class - glm::vec3 getCenter() const { return getPosition(); } + glm::vec3 getCenter() const { return getWorldPosition(); } float getLineWidth() const { return _lineWidth; } bool getIsSolid() const { return _isSolid; } diff --git a/interface/src/ui/overlays/Circle3DOverlay.cpp b/interface/src/ui/overlays/Circle3DOverlay.cpp index 536b2c764f..88172950ee 100644 --- a/interface/src/ui/overlays/Circle3DOverlay.cpp +++ b/interface/src/ui/overlays/Circle3DOverlay.cpp @@ -415,11 +415,11 @@ bool Circle3DOverlay::findRayIntersection(const glm::vec3& origin, const glm::ve // Scale the dimensions by the diameter glm::vec2 dimensions = getOuterRadius() * 2.0f * getDimensions(); - bool intersects = findRayRectangleIntersection(origin, direction, getRotation(), getPosition(), dimensions, distance); + bool intersects = findRayRectangleIntersection(origin, direction, getRotation(), getWorldPosition(), dimensions, distance); if (intersects) { glm::vec3 hitPosition = origin + (distance * direction); - glm::vec3 localHitPosition = glm::inverse(getRotation()) * (hitPosition - getPosition()); + glm::vec3 localHitPosition = glm::inverse(getRotation()) * (hitPosition - getWorldPosition()); localHitPosition.x /= getDimensions().x; localHitPosition.y /= getDimensions().y; float distanceToHit = glm::length(localHitPosition); diff --git a/interface/src/ui/overlays/ContextOverlayInterface.cpp b/interface/src/ui/overlays/ContextOverlayInterface.cpp index 70b75a0b17..ccbf9fb1b2 100644 --- a/interface/src/ui/overlays/ContextOverlayInterface.cpp +++ b/interface/src/ui/overlays/ContextOverlayInterface.cpp @@ -161,7 +161,7 @@ bool ContextOverlayInterface::createOrDestroyContextOverlay(const EntityItemID& _contextOverlay->setIsFacingAvatar(true); _contextOverlayID = qApp->getOverlays().addOverlay(_contextOverlay); } - _contextOverlay->setPosition(contextOverlayPosition); + _contextOverlay->setWorldPosition(contextOverlayPosition); _contextOverlay->setDimensions(contextOverlayDimensions); _contextOverlay->setRotation(entityProperties.getRotation()); _contextOverlay->setVisible(true); diff --git a/interface/src/ui/overlays/Cube3DOverlay.cpp b/interface/src/ui/overlays/Cube3DOverlay.cpp index b6df1dbc31..d95b8c7761 100644 --- a/interface/src/ui/overlays/Cube3DOverlay.cpp +++ b/interface/src/ui/overlays/Cube3DOverlay.cpp @@ -144,7 +144,7 @@ QVariant Cube3DOverlay::getProperty(const QString& property) { Transform Cube3DOverlay::evalRenderTransform() { // TODO: handle registration point?? - glm::vec3 position = getPosition(); + glm::vec3 position = getWorldPosition(); glm::vec3 dimensions = getDimensions(); glm::quat rotation = getRotation(); diff --git a/interface/src/ui/overlays/Grid3DOverlay.cpp b/interface/src/ui/overlays/Grid3DOverlay.cpp index ca275368cb..afce710d08 100644 --- a/interface/src/ui/overlays/Grid3DOverlay.cpp +++ b/interface/src/ui/overlays/Grid3DOverlay.cpp @@ -69,7 +69,7 @@ void Grid3DOverlay::render(RenderArgs* args) { auto minCorner = glm::vec2(-0.5f, -0.5f); auto maxCorner = glm::vec2(0.5f, 0.5f); - auto position = getPosition(); + auto position = getWorldPosition(); if (_followCamera) { // Get the camera position rounded to the nearest major grid line // This grid is for UI and should lie on worldlines diff --git a/interface/src/ui/overlays/Line3DOverlay.cpp b/interface/src/ui/overlays/Line3DOverlay.cpp index bdb35d4f49..8869817829 100644 --- a/interface/src/ui/overlays/Line3DOverlay.cpp +++ b/interface/src/ui/overlays/Line3DOverlay.cpp @@ -45,7 +45,7 @@ Line3DOverlay::~Line3DOverlay() { } glm::vec3 Line3DOverlay::getStart() const { - return getPosition(); + return getWorldPosition(); } glm::vec3 Line3DOverlay::getEnd() const { @@ -69,7 +69,7 @@ glm::vec3 Line3DOverlay::getEnd() const { } void Line3DOverlay::setStart(const glm::vec3& start) { - setPosition(start); + setWorldPosition(start); } void Line3DOverlay::setEnd(const glm::vec3& end) { diff --git a/interface/src/ui/overlays/ModelOverlay.cpp b/interface/src/ui/overlays/ModelOverlay.cpp index 2a13249958..eedacd2d67 100644 --- a/interface/src/ui/overlays/ModelOverlay.cpp +++ b/interface/src/ui/overlays/ModelOverlay.cpp @@ -121,7 +121,7 @@ void ModelOverlay::setDrawHUDLayer(bool drawHUDLayer) { } void ModelOverlay::setProperties(const QVariantMap& properties) { - auto origPosition = getPosition(); + auto origPosition = getWorldPosition(); auto origRotation = getRotation(); auto origDimensions = getDimensions(); auto origScale = getSNScale(); @@ -143,7 +143,7 @@ void ModelOverlay::setProperties(const QVariantMap& properties) { _scaleToFit = false; } - if (origPosition != getPosition() || origRotation != getRotation() || origDimensions != getDimensions() || origScale != getSNScale()) { + if (origPosition != getWorldPosition() || origRotation != getRotation() || origDimensions != getDimensions() || origScale != getSNScale()) { _updateModel = true; } @@ -384,7 +384,7 @@ void ModelOverlay::locationChanged(bool tellPhysics) { // FIXME Start using the _renderTransform instead of calling for Transform and Dimensions from here, do the custom things needed in evalRenderTransform() if (_model && _model->isActive()) { _model->setRotation(getRotation()); - _model->setTranslation(getPosition()); + _model->setTranslation(getWorldPosition()); } } diff --git a/interface/src/ui/overlays/Overlays.cpp b/interface/src/ui/overlays/Overlays.cpp index fd5aae4027..ca79d0b663 100644 --- a/interface/src/ui/overlays/Overlays.cpp +++ b/interface/src/ui/overlays/Overlays.cpp @@ -827,7 +827,7 @@ PointerEvent Overlays::calculateOverlayPointerEvent(OverlayID overlayID, PickRay if (!overlay) { return PointerEvent(); } - glm::vec3 position = overlay->getPosition(); + glm::vec3 position = overlay->getWorldPosition(); glm::quat rotation = overlay->getRotation(); glm::vec2 dimensions = overlay->getSize(); diff --git a/interface/src/ui/overlays/OverlaysPayload.cpp b/interface/src/ui/overlays/OverlaysPayload.cpp index 194c530df0..40d70d5348 100644 --- a/interface/src/ui/overlays/OverlaysPayload.cpp +++ b/interface/src/ui/overlays/OverlaysPayload.cpp @@ -69,7 +69,7 @@ namespace render { auto batch = args->_batch; auto avatar = DependencyManager::get()->getMyAvatar(); glm::quat myAvatarRotation = avatar->getOrientation(); - glm::vec3 myAvatarPosition = avatar->getPosition(); + glm::vec3 myAvatarPosition = avatar->getWorldPosition(); float angle = glm::degrees(glm::angle(myAvatarRotation)); glm::vec3 axis = glm::axis(myAvatarRotation); float myAvatarScale = avatar->getModelScale(); diff --git a/interface/src/ui/overlays/Planar3DOverlay.cpp b/interface/src/ui/overlays/Planar3DOverlay.cpp index ac3fe66ddc..ae5e0f32d0 100644 --- a/interface/src/ui/overlays/Planar3DOverlay.cpp +++ b/interface/src/ui/overlays/Planar3DOverlay.cpp @@ -69,7 +69,7 @@ QVariant Planar3DOverlay::getProperty(const QString& property) { bool Planar3DOverlay::findRayIntersection(const glm::vec3& origin, const glm::vec3& direction, float& distance, BoxFace& face, glm::vec3& surfaceNormal) { // FIXME - face and surfaceNormal not being returned - return findRayRectangleIntersection(origin, direction, getRotation(), getPosition(), getDimensions(), distance); + return findRayRectangleIntersection(origin, direction, getRotation(), getWorldPosition(), getDimensions(), distance); } Transform Planar3DOverlay::evalRenderTransform() { diff --git a/interface/src/ui/overlays/Rectangle3DOverlay.cpp b/interface/src/ui/overlays/Rectangle3DOverlay.cpp index 47d47b76a5..2010b00d4d 100644 --- a/interface/src/ui/overlays/Rectangle3DOverlay.cpp +++ b/interface/src/ui/overlays/Rectangle3DOverlay.cpp @@ -58,7 +58,7 @@ void Rectangle3DOverlay::render(RenderArgs* args) { const float MAX_COLOR = 255.0f; glm::vec4 rectangleColor(color.red / MAX_COLOR, color.green / MAX_COLOR, color.blue / MAX_COLOR, alpha); - glm::vec3 position = getPosition(); + glm::vec3 position = getWorldPosition(); glm::vec2 dimensions = getDimensions(); glm::vec2 halfDimensions = dimensions * 0.5f; glm::quat rotation = getRotation(); diff --git a/interface/src/ui/overlays/Shape3DOverlay.cpp b/interface/src/ui/overlays/Shape3DOverlay.cpp index a3b51d40bf..7e9f44ef1d 100644 --- a/interface/src/ui/overlays/Shape3DOverlay.cpp +++ b/interface/src/ui/overlays/Shape3DOverlay.cpp @@ -121,7 +121,7 @@ QVariant Shape3DOverlay::getProperty(const QString& property) { Transform Shape3DOverlay::evalRenderTransform() { // TODO: handle registration point?? - glm::vec3 position = getPosition(); + glm::vec3 position = getWorldPosition(); glm::vec3 dimensions = getDimensions(); glm::quat rotation = getRotation(); diff --git a/interface/src/ui/overlays/Volume3DOverlay.cpp b/interface/src/ui/overlays/Volume3DOverlay.cpp index 8aa8490937..4e685bed0e 100644 --- a/interface/src/ui/overlays/Volume3DOverlay.cpp +++ b/interface/src/ui/overlays/Volume3DOverlay.cpp @@ -21,7 +21,7 @@ Volume3DOverlay::Volume3DOverlay(const Volume3DOverlay* volume3DOverlay) : AABox Volume3DOverlay::getBounds() const { auto extents = Extents{_localBoundingBox}; extents.rotate(getRotation()); - extents.shiftBy(getPosition()); + extents.shiftBy(getWorldPosition()); return AABox(extents); } diff --git a/interface/src/ui/overlays/Web3DOverlay.cpp b/interface/src/ui/overlays/Web3DOverlay.cpp index 0c75803d35..5d8e433615 100644 --- a/interface/src/ui/overlays/Web3DOverlay.cpp +++ b/interface/src/ui/overlays/Web3DOverlay.cpp @@ -151,7 +151,7 @@ void Web3DOverlay::buildWebSurface() { _webSurface = DependencyManager::get()->acquire(_url); setupQmlSurface(); } - _webSurface->getSurfaceContext()->setContextProperty("globalPosition", vec3toVariant(getPosition())); + _webSurface->getSurfaceContext()->setContextProperty("globalPosition", vec3toVariant(getWorldPosition())); _webSurface->resize(QSize(_resolution.x, _resolution.y)); _webSurface->resume(); }); @@ -171,7 +171,7 @@ void Web3DOverlay::hoverLeaveOverlay(const PointerEvent& event) { void Web3DOverlay::update(float deltatime) { if (_webSurface) { // update globalPosition - _webSurface->getSurfaceContext()->setContextProperty("globalPosition", vec3toVariant(getPosition())); + _webSurface->getSurfaceContext()->setContextProperty("globalPosition", vec3toVariant(getWorldPosition())); } Parent::update(deltatime); } @@ -615,7 +615,7 @@ bool Web3DOverlay::findRayIntersection(const glm::vec3& origin, const glm::vec3& // Don't call applyTransformTo() or setTransform() here because this code runs too frequently. // Produce the dimensions of the overlay based on the image's aspect ratio and the overlay's scale. - return findRayRectangleIntersection(origin, direction, getRotation(), getPosition(), getSize(), distance); + return findRayRectangleIntersection(origin, direction, getRotation(), getWorldPosition(), getSize(), distance); } Web3DOverlay* Web3DOverlay::createClone() const { diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp index f674a2206e..67efeda90d 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp +++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp @@ -145,18 +145,18 @@ void Avatar::init() { glm::vec3 Avatar::getChestPosition() const { // for now, let's just assume that the "chest" is halfway between the root and the neck glm::vec3 neckPosition; - return _skeletonModel->getNeckPosition(neckPosition) ? (getPosition() + neckPosition) * 0.5f : getPosition(); + return _skeletonModel->getNeckPosition(neckPosition) ? (getWorldPosition() + neckPosition) * 0.5f : getWorldPosition(); } glm::vec3 Avatar::getNeckPosition() const { glm::vec3 neckPosition; - return _skeletonModel->getNeckPosition(neckPosition) ? neckPosition : getPosition(); + return _skeletonModel->getNeckPosition(neckPosition) ? neckPosition : getWorldPosition(); } AABox Avatar::getBounds() const { if (!_skeletonModel->isRenderable() || _skeletonModel->needsFixupInScene()) { // approximately 2m tall, scaled to user request. - return AABox(getPosition() - glm::vec3(getModelScale()), getModelScale() * 2.0f); + return AABox(getWorldPosition() - glm::vec3(getModelScale()), getModelScale() * 2.0f); } return _skeletonModel->getRenderableMeshBound(); } @@ -359,9 +359,9 @@ void Avatar::simulate(float deltaTime, bool inView) { locationChanged(); // joints changed, so if there are any children, update them. _hasNewJointData = false; - glm::vec3 headPosition = getPosition(); + glm::vec3 headPosition = getWorldPosition(); if (!_skeletonModel->getHeadPosition(headPosition)) { - headPosition = getPosition(); + headPosition = getWorldPosition(); } head->setPosition(headPosition); } @@ -427,7 +427,7 @@ bool Avatar::isLookingAtMe(AvatarSharedPointer avatar) const { } void Avatar::slamPosition(const glm::vec3& newPosition) { - setPosition(newPosition); + setWorldPosition(newPosition); _positionDeltaAccumulator = glm::vec3(0.0f); setVelocity(glm::vec3(0.0f)); _lastVelocity = glm::vec3(0.0f); @@ -439,7 +439,7 @@ void Avatar::updateAttitude(const glm::quat& orientation) { } void Avatar::applyPositionDelta(const glm::vec3& delta) { - setPosition(getPosition() + delta); + setWorldPosition(getWorldPosition() + delta); _positionDeltaAccumulator += delta; } @@ -588,7 +588,7 @@ void Avatar::render(RenderArgs* renderArgs) { glm::vec3 viewPos = renderArgs->getViewFrustum().getPosition(); const float MAX_DISTANCE_SQUARED_FOR_SHOWING_POINTING_LASERS = 100.0f; // 10^2 - if (glm::distance2(viewPos, getPosition()) < MAX_DISTANCE_SQUARED_FOR_SHOWING_POINTING_LASERS) { + if (glm::distance2(viewPos, getWorldPosition()) < MAX_DISTANCE_SQUARED_FOR_SHOWING_POINTING_LASERS) { auto geometryCache = DependencyManager::get(); // render pointing lasers @@ -647,7 +647,7 @@ void Avatar::render(RenderArgs* renderArgs) { } ViewFrustum frustum = renderArgs->getViewFrustum(); - if (!frustum.sphereIntersectsFrustum(getPosition(), getBoundingRadius())) { + if (!frustum.sphereIntersectsFrustum(getWorldPosition(), getBoundingRadius())) { return; } @@ -658,7 +658,7 @@ void Avatar::render(RenderArgs* renderArgs) { } if (showReceiveStats || showNamesAboveHeads) { - glm::vec3 toTarget = frustum.getPosition() - getPosition(); + glm::vec3 toTarget = frustum.getPosition() - getWorldPosition(); float distanceToTarget = glm::length(toTarget); const float DISPLAYNAME_DISTANCE = 20.0f; updateDisplayNameAlpha(distanceToTarget < DISPLAYNAME_DISTANCE); @@ -721,7 +721,7 @@ void Avatar::simulateAttachments(float deltaTime) { glm::quat jointRotation; if (attachment.isSoft) { // soft attachments do not have transform offsets - model->setTranslation(getPosition()); + model->setTranslation(getWorldPosition()); model->setRotation(getOrientation() * Quaternions::Y_180); model->simulate(deltaTime); } else { @@ -775,9 +775,9 @@ glm::vec3 Avatar::getDisplayNamePosition() const { const float HEAD_PROPORTION = 0.75f; float size = getBoundingRadius(); - DEBUG_VALUE("_position =", getPosition()); + DEBUG_VALUE("_position =", getWorldPosition()); DEBUG_VALUE("size =", size); - namePosition = getPosition() + bodyUpDirection * (size * HEAD_PROPORTION); + namePosition = getWorldPosition() + bodyUpDirection * (size * HEAD_PROPORTION); } if (glm::any(glm::isnan(namePosition)) || glm::any(glm::isinf(namePosition))) { @@ -902,7 +902,7 @@ glm::vec3 Avatar::getSkeletonPosition() const { // The avatar is rotated PI about the yAxis, so we have to correct for it // to get the skeleton offset contribution in the world-frame. const glm::quat FLIP = glm::angleAxis(PI, glm::vec3(0.0f, 1.0f, 0.0f)); - return getPosition() + getOrientation() * FLIP * _skeletonOffset; + return getWorldPosition() + getOrientation() * FLIP * _skeletonOffset; } QVector Avatar::getJointRotations() const { @@ -1166,7 +1166,7 @@ glm::vec3 Avatar::getJointPosition(const QString& name) const { void Avatar::scaleVectorRelativeToPosition(glm::vec3 &positionToScale) const { //Scale a world space vector as if it was relative to the position - positionToScale = getPosition() + getModelScale() * (positionToScale - getPosition()); + positionToScale = getWorldPosition() + getModelScale() * (positionToScale - getWorldPosition()); } void Avatar::setSkeletonModelURL(const QUrl& skeletonModelURL) { @@ -1254,12 +1254,12 @@ int Avatar::parseDataFromBuffer(const QByteArray& buffer) { } // change in position implies movement - glm::vec3 oldPosition = getPosition(); + glm::vec3 oldPosition = getWorldPosition(); int bytesRead = AvatarData::parseDataFromBuffer(buffer); const float MOVE_DISTANCE_THRESHOLD = 0.001f; - _moving = glm::distance(oldPosition, getPosition()) > MOVE_DISTANCE_THRESHOLD; + _moving = glm::distance(oldPosition, getWorldPosition()) > MOVE_DISTANCE_THRESHOLD; if (_moving) { addPhysicsFlags(Simulation::DIRTY_POSITION); } @@ -1333,7 +1333,7 @@ float Avatar::getHeadHeight() const { Extents extents = _skeletonModel->getMeshExtents(); glm::vec3 neckPosition; if (!extents.isEmpty() && extents.isValid() && _skeletonModel->getNeckPosition(neckPosition)) { - return extents.maximum.y / 2.0f - neckPosition.y + getPosition().y; + return extents.maximum.y / 2.0f - neckPosition.y + getWorldPosition().y; } const float DEFAULT_HEAD_HEIGHT = 0.25f; @@ -1378,8 +1378,8 @@ void Avatar::getCapsule(glm::vec3& start, glm::vec3& end, float& radius) { ShapeInfo shapeInfo; computeShapeInfo(shapeInfo); glm::vec3 halfExtents = shapeInfo.getHalfExtents(); // x = radius, y = halfHeight - start = getPosition() - glm::vec3(0, halfExtents.y, 0) + shapeInfo.getOffset(); - end = getPosition() + glm::vec3(0, halfExtents.y, 0) + shapeInfo.getOffset(); + start = getWorldPosition() - glm::vec3(0, halfExtents.y, 0) + shapeInfo.getOffset(); + end = getWorldPosition() + glm::vec3(0, halfExtents.y, 0) + shapeInfo.getOffset(); radius = halfExtents.x; } @@ -1472,7 +1472,7 @@ glm::quat Avatar::getUncachedRightPalmRotation() const { } void Avatar::setPositionViaScript(const glm::vec3& position) { - setPosition(position); + setWorldPosition(position); updateAttitude(getOrientation()); } diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index 877bcd9353..2fe62a4ca2 100644 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -118,12 +118,12 @@ void AvatarData::setTargetScale(float targetScale) { } glm::vec3 AvatarData::getHandPosition() const { - return getOrientation() * _handPosition + getPosition(); + return getOrientation() * _handPosition + getWorldPosition(); } void AvatarData::setHandPosition(const glm::vec3& handPosition) { // store relative to position/orientation - _handPosition = glm::inverse(getOrientation()) * (handPosition - getPosition()); + _handPosition = glm::inverse(getOrientation()) * (handPosition - getWorldPosition()); } void AvatarData::lazyInitHeadData() const { @@ -1901,7 +1901,7 @@ void AvatarData::setRecordingBasis(std::shared_ptr recordingBasis) { if (!recordingBasis) { recordingBasis = std::make_shared(); recordingBasis->setRotation(getOrientation()); - recordingBasis->setTranslation(getPosition()); + recordingBasis->setTranslation(getWorldPosition()); // TODO: find a different way to record/playback the Scale of the avatar //recordingBasis->setScale(getTargetScale()); } @@ -2059,11 +2059,11 @@ void AvatarData::fromJson(const QJsonObject& json, bool useFrameSkeleton) { auto relativeTransform = Transform::fromJson(json[JSON_AVATAR_RELATIVE]); auto worldTransform = currentBasis->worldTransform(relativeTransform); - setPosition(worldTransform.getTranslation()); + setWorldPosition(worldTransform.getTranslation()); orientation = worldTransform.getRotation(); } else { // We still set the position in the case that there is no movement. - setPosition(currentBasis->getTranslation()); + setWorldPosition(currentBasis->getTranslation()); orientation = currentBasis->getRotation(); } setOrientation(orientation); @@ -2186,7 +2186,7 @@ void AvatarData::setBodyRoll(float bodyRoll) { } void AvatarData::setPositionViaScript(const glm::vec3& position) { - SpatiallyNestable::setPosition(position); + SpatiallyNestable::setWorldPosition(position); } void AvatarData::setOrientationViaScript(const glm::quat& orientation) { @@ -2413,7 +2413,7 @@ void AvatarData::sortAvatars( // (a) apparentSize // (b) proximity to center of view // (c) time since last update - glm::vec3 avatarPosition = avatar->getPosition(); + glm::vec3 avatarPosition = avatar->getWorldPosition(); glm::vec3 offset = avatarPosition - frustumCenter; float distance = glm::length(offset) + 0.001f; // add 1mm to avoid divide by zero diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index 89fe270af1..5ce4395baa 100644 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -351,7 +351,7 @@ public: class AvatarData : public QObject, public SpatiallyNestable { Q_OBJECT - Q_PROPERTY(glm::vec3 position READ getPosition WRITE setPositionViaScript) + Q_PROPERTY(glm::vec3 position READ getWorldPosition WRITE setPositionViaScript) Q_PROPERTY(float scale READ getTargetScale WRITE setTargetScale) Q_PROPERTY(float density READ getDensity) Q_PROPERTY(glm::vec3 handPosition READ getHandPosition WRITE setHandPosition) diff --git a/libraries/avatars/src/AvatarHashMap.cpp b/libraries/avatars/src/AvatarHashMap.cpp index 3712080cdb..61b13d7749 100644 --- a/libraries/avatars/src/AvatarHashMap.cpp +++ b/libraries/avatars/src/AvatarHashMap.cpp @@ -33,7 +33,7 @@ QVector AvatarHashMap::getAvatarIdentifiers() { bool AvatarHashMap::isAvatarInRange(const glm::vec3& position, const float range) { auto hashCopy = getHashCopy(); foreach(const AvatarSharedPointer& sharedAvatar, hashCopy) { - glm::vec3 avatarPosition = sharedAvatar->getPosition(); + glm::vec3 avatarPosition = sharedAvatar->getWorldPosition(); float distance = glm::distance(avatarPosition, position); if (distance < range) { return true; @@ -47,7 +47,7 @@ int AvatarHashMap::numberOfAvatarsInRange(const glm::vec3& position, float range auto rangeMeters2 = rangeMeters * rangeMeters; int count = 0; for (const AvatarSharedPointer& sharedAvatar : hashCopy) { - glm::vec3 avatarPosition = sharedAvatar->getPosition(); + glm::vec3 avatarPosition = sharedAvatar->getWorldPosition(); auto distance2 = glm::distance2(avatarPosition, position); if (distance2 < rangeMeters2) { ++count; diff --git a/libraries/avatars/src/HeadData.cpp b/libraries/avatars/src/HeadData.cpp index 1fda984e78..6ff36331cf 100644 --- a/libraries/avatars/src/HeadData.cpp +++ b/libraries/avatars/src/HeadData.cpp @@ -155,7 +155,7 @@ QJsonObject HeadData::toJson() const { auto lookat = getLookAtPosition(); if (lookat != vec3()) { vec3 relativeLookAt = glm::inverse(_owningAvatar->getOrientation()) * - (getLookAtPosition() - _owningAvatar->getPosition()); + (getLookAtPosition() - _owningAvatar->getWorldPosition()); headJson[JSON_AVATAR_HEAD_LOOKAT] = toJsonValue(relativeLookAt); } return headJson; @@ -185,7 +185,7 @@ void HeadData::fromJson(const QJsonObject& json) { if (json.contains(JSON_AVATAR_HEAD_LOOKAT)) { auto relativeLookAt = vec3FromJsonValue(json[JSON_AVATAR_HEAD_LOOKAT]); if (glm::length2(relativeLookAt) > 0.01f) { - setLookAtPosition((_owningAvatar->getOrientation() * relativeLookAt) + _owningAvatar->getPosition()); + setLookAtPosition((_owningAvatar->getOrientation() * relativeLookAt) + _owningAvatar->getWorldPosition()); } } diff --git a/libraries/avatars/src/ScriptAvatarData.cpp b/libraries/avatars/src/ScriptAvatarData.cpp index d0643d28f8..cac3f600ca 100644 --- a/libraries/avatars/src/ScriptAvatarData.cpp +++ b/libraries/avatars/src/ScriptAvatarData.cpp @@ -24,7 +24,7 @@ ScriptAvatarData::ScriptAvatarData(AvatarSharedPointer avatarData) : // glm::vec3 ScriptAvatarData::getPosition() const { if (AvatarSharedPointer sharedAvatarData = _avatarData.lock()) { - return sharedAvatarData->getPosition(); + return sharedAvatarData->getWorldPosition(); } else { return glm::vec3(); } diff --git a/libraries/entities-renderer/src/EntityTreeRenderer.cpp b/libraries/entities-renderer/src/EntityTreeRenderer.cpp index bf17f34749..a9277ff19a 100644 --- a/libraries/entities-renderer/src/EntityTreeRenderer.cpp +++ b/libraries/entities-renderer/src/EntityTreeRenderer.cpp @@ -509,7 +509,7 @@ static glm::vec2 projectOntoEntityXYPlane(EntityItemPointer entity, const PickRa if (entity) { - glm::vec3 entityPosition = entity->getPosition(); + glm::vec3 entityPosition = entity->getWorldPosition(); glm::quat entityRotation = entity->getRotation(); glm::vec3 entityDimensions = entity->getDimensions(); glm::vec3 entityRegistrationPoint = entity->getRegistrationPoint(); diff --git a/libraries/entities-renderer/src/RenderableLightEntityItem.cpp b/libraries/entities-renderer/src/RenderableLightEntityItem.cpp index 738b1a253e..e00cd98e65 100644 --- a/libraries/entities-renderer/src/RenderableLightEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableLightEntityItem.cpp @@ -28,7 +28,7 @@ void LightEntityRenderer::doRenderUpdateAsynchronousTyped(const TypedEntityPoint lightPayload.setVisible(_visible); auto light = lightPayload.editLight(); - light->setPosition(entity->getPosition()); + light->setPosition(entity->getWorldPosition()); light->setOrientation(entity->getRotation()); bool success; diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index 7db19704b4..67b7b175b7 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -124,7 +124,7 @@ void RenderableModelEntityItem::doInitialModelSimulation() { model->setScaleToFit(true, getDimensions()); model->setSnapModelToRegistrationPoint(true, getRegistrationPoint()); model->setRotation(getRotation()); - model->setTranslation(getPosition()); + model->setTranslation(getWorldPosition()); if (_needsInitialSimulation) { model->simulate(0.0f); diff --git a/libraries/entities-renderer/src/RenderablePolyLineEntityItem.cpp b/libraries/entities-renderer/src/RenderablePolyLineEntityItem.cpp index 3fd1d024c1..e4706fa15e 100644 --- a/libraries/entities-renderer/src/RenderablePolyLineEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderablePolyLineEntityItem.cpp @@ -154,7 +154,7 @@ void PolyLineEntityRenderer::doRenderUpdateAsynchronousTyped(const TypedEntityPo entity->resetPolyLineChanged(); _polylineTransform = Transform(); - _polylineTransform.setTranslation(entity->getPosition()); + _polylineTransform.setTranslation(entity->getWorldPosition()); _polylineTransform.setRotation(entity->getRotation()); if (pointsChanged) { diff --git a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp index e92bc636bd..fd7407287d 100644 --- a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp @@ -232,7 +232,7 @@ glm::mat4 RenderablePolyVoxEntityItem::voxelToLocalMatrix() const { glm::vec3 scale = dimensions / voxelVolumeSize; // meters / voxel-units bool success; // TODO -- Does this actually have to happen in world space? glm::vec3 center = getCenterPosition(success); // this handles registrationPoint changes - glm::vec3 position = getPosition(success); + glm::vec3 position = getWorldPosition(success); glm::vec3 positionToCenter = center - position; positionToCenter -= dimensions * Vectors::HALF - getSurfacePositionAdjustment(); @@ -248,7 +248,7 @@ glm::mat4 RenderablePolyVoxEntityItem::localToVoxelMatrix() const { glm::mat4 RenderablePolyVoxEntityItem::voxelToWorldMatrix() const { glm::mat4 rotation = glm::mat4_cast(getRotation()); - glm::mat4 translation = glm::translate(getPosition()); + glm::mat4 translation = glm::translate(getWorldPosition()); return translation * rotation * voxelToLocalMatrix(); } @@ -579,7 +579,7 @@ bool RenderablePolyVoxEntityItem::findDetailedRayIntersection(const glm::vec3& o // the PolyVox ray intersection code requires a near and far point. // set ray cast length to long enough to cover all of the voxel space - float distanceToEntity = glm::distance(origin, getPosition()); + float distanceToEntity = glm::distance(origin, getWorldPosition()); glm::vec3 dimensions = getDimensions(); float largestDimension = glm::compMax(dimensions) * 2.0f; glm::vec3 farPoint = origin + normDirection * (distanceToEntity + largestDimension); diff --git a/libraries/entities-renderer/src/RenderableShapeEntityItem.cpp b/libraries/entities-renderer/src/RenderableShapeEntityItem.cpp index 332d87f930..dffde3386b 100644 --- a/libraries/entities-renderer/src/RenderableShapeEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableShapeEntityItem.cpp @@ -81,7 +81,7 @@ void ShapeEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& sce _color = vec4(toGlm(entity->getXColor()), entity->getLocalRenderAlpha()); _shape = entity->getShape(); - _position = entity->getPosition(); + _position = entity->getWorldPosition(); _dimensions = entity->getDimensions(); _orientation = entity->getOrientation(); _renderTransform = getModelTransform(); diff --git a/libraries/entities-renderer/src/RenderableWebEntityItem.cpp b/libraries/entities-renderer/src/RenderableWebEntityItem.cpp index a2e574a829..231f9c35b6 100644 --- a/libraries/entities-renderer/src/RenderableWebEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableWebEntityItem.cpp @@ -69,7 +69,7 @@ void WebEntityRenderer::onRemoveFromSceneTyped(const TypedEntityPointer& entity) } bool WebEntityRenderer::needsRenderUpdateFromTypedEntity(const TypedEntityPointer& entity) const { - if (_contextPosition != entity->getPosition()) { + if (_contextPosition != entity->getWorldPosition()) { return true; } @@ -127,9 +127,9 @@ void WebEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& scene buildWebSurface(entity); } - if (_contextPosition != entity->getPosition()) { + if (_contextPosition != entity->getWorldPosition()) { // update globalPosition - _contextPosition = entity->getPosition(); + _contextPosition = entity->getWorldPosition(); _webSurface->getSurfaceContext()->setContextProperty("globalPosition", vec3toVariant(_contextPosition)); } diff --git a/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp b/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp index 0235f1b7a3..e56e692890 100644 --- a/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp @@ -200,7 +200,7 @@ void ZoneEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& scen bool hazeChanged = entity->hazePropertiesChanged(); entity->resetRenderingPropertiesChanged(); - _lastPosition = entity->getPosition(); + _lastPosition = entity->getWorldPosition(); _lastRotation = entity->getRotation(); _lastDimensions = entity->getDimensions(); @@ -271,7 +271,7 @@ bool ZoneEntityRenderer::needsRenderUpdateFromTypedEntity(const TypedEntityPoint return true; } - if (entity->getPosition() != _lastPosition) { + if (entity->getWorldPosition() != _lastPosition) { return true; } if (entity->getDimensions() != _lastDimensions) { diff --git a/libraries/entities/src/EntityItem.cpp b/libraries/entities/src/EntityItem.cpp index 71e6990aaf..e1ff932915 100644 --- a/libraries/entities/src/EntityItem.cpp +++ b/libraries/entities/src/EntityItem.cpp @@ -888,7 +888,7 @@ int EntityItem::readEntityDataFromBuffer(const unsigned char* data, int bytesLef } void EntityItem::debugDump() const { - auto position = getPosition(); + auto position = getWorldPosition(); qCDebug(entities) << "EntityItem id:" << getEntityItemID(); qCDebug(entities, " edited ago:%f", (double)getEditedAgo()); qCDebug(entities, " position:%f,%f,%f", (double)position.x, (double)position.y, (double)position.z); @@ -1168,7 +1168,7 @@ bool EntityItem::wantTerseEditLogging() const { } glm::mat4 EntityItem::getEntityToWorldMatrix() const { - glm::mat4 translation = glm::translate(getPosition()); + glm::mat4 translation = glm::translate(getWorldPosition()); glm::mat4 rotation = glm::mat4_cast(getRotation()); glm::mat4 scale = glm::scale(getDimensions()); glm::mat4 registration = glm::translate(ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - getRegistrationPoint()); @@ -1429,7 +1429,7 @@ const Transform EntityItem::getTransformToCenter(bool& success) const { /// AACube EntityItem::getMaximumAACube(bool& success) const { if (_recalcMaxAACube) { - glm::vec3 centerOfRotation = getPosition(success); // also where _registration point is + glm::vec3 centerOfRotation = getWorldPosition(success); // also where _registration point is if (success) { _recalcMaxAACube = false; // we want to compute the furthestExtent that an entity can extend out from its "position" @@ -1457,7 +1457,7 @@ AACube EntityItem::getMaximumAACube(bool& success) const { AACube EntityItem::getMinimumAACube(bool& success) const { if (_recalcMinAACube) { // position represents the position of the registration point. - glm::vec3 position = getPosition(success); + glm::vec3 position = getWorldPosition(success); if (success) { _recalcMinAACube = false; glm::vec3 dimensions = getDimensions(); @@ -1487,7 +1487,7 @@ AACube EntityItem::getMinimumAACube(bool& success) const { AABox EntityItem::getAABox(bool& success) const { if (_recalcAABox) { // position represents the position of the registration point. - glm::vec3 position = getPosition(success); + glm::vec3 position = getWorldPosition(success); if (success) { _recalcAABox = false; glm::vec3 dimensions = getDimensions(); @@ -2381,7 +2381,7 @@ void EntityItem::dimensionsChanged() { void EntityItem::globalizeProperties(EntityItemProperties& properties, const QString& messageTemplate, const glm::vec3& offset) const { // TODO -- combine this with convertLocationToScriptSemantics bool success; - auto globalPosition = getPosition(success); + auto globalPosition = getWorldPosition(success); if (success) { properties.setPosition(globalPosition + offset); properties.setRotation(getRotation()); diff --git a/libraries/entities/src/EntityScriptingInterface.cpp b/libraries/entities/src/EntityScriptingInterface.cpp index ed7a1469b3..329a616609 100644 --- a/libraries/entities/src/EntityScriptingInterface.cpp +++ b/libraries/entities/src/EntityScriptingInterface.cpp @@ -385,7 +385,7 @@ QUuid EntityScriptingInterface::editEntity(QUuid id, const EntityItemProperties& properties.setParentJointIndex(entity->getParentJointIndex()); } if (!scriptSideProperties.localPositionChanged() && !scriptSideProperties.positionChanged()) { - properties.setPosition(entity->getPosition()); + properties.setPosition(entity->getWorldPosition()); } if (!scriptSideProperties.localRotationChanged() && !scriptSideProperties.rotationChanged()) { properties.setRotation(entity->getOrientation()); @@ -1797,7 +1797,7 @@ glm::mat4 EntityScriptingInterface::getEntityTransform(const QUuid& entityID) { _entityTree->withReadLock([&] { EntityItemPointer entity = _entityTree->findEntityByEntityItemID(EntityItemID(entityID)); if (entity) { - glm::mat4 translation = glm::translate(entity->getPosition()); + glm::mat4 translation = glm::translate(entity->getWorldPosition()); glm::mat4 rotation = glm::mat4_cast(entity->getRotation()); result = translation * rotation; } diff --git a/libraries/entities/src/EntityTree.cpp b/libraries/entities/src/EntityTree.cpp index bde82d96a1..64fbc6aefb 100644 --- a/libraries/entities/src/EntityTree.cpp +++ b/libraries/entities/src/EntityTree.cpp @@ -681,7 +681,7 @@ bool EntityTree::findNearPointOperation(const OctreeElementPointer& element, voi // we may have gotten NULL back, meaning no entity was available if (thisClosestEntity) { - glm::vec3 entityPosition = thisClosestEntity->getPosition(); + glm::vec3 entityPosition = thisClosestEntity->getWorldPosition(); float distanceFromPointToEntity = glm::distance(entityPosition, args->position); // If we're within our target radius @@ -1054,7 +1054,7 @@ bool EntityTree::filterProperties(EntityItemPointer& existingEntity, EntityItemP bool accepted = true; auto entityEditFilters = DependencyManager::get(); if (entityEditFilters) { - auto position = existingEntity ? existingEntity->getPosition() : propertiesIn.getPosition(); + auto position = existingEntity ? existingEntity->getWorldPosition() : propertiesIn.getPosition(); auto entityID = existingEntity ? existingEntity->getEntityItemID() : EntityItemID(); accepted = entityEditFilters->filter(position, propertiesIn, propertiesOut, wasChanged, filterType, entityID); } diff --git a/libraries/entities/src/EntityTreeElement.cpp b/libraries/entities/src/EntityTreeElement.cpp index 2696377028..4b588fc23c 100644 --- a/libraries/entities/src/EntityTreeElement.cpp +++ b/libraries/entities/src/EntityTreeElement.cpp @@ -663,7 +663,7 @@ bool EntityTreeElement::findDetailedRayIntersection(const glm::vec3& origin, con // extents is the entity relative, scaled, centered extents of the entity glm::mat4 rotation = glm::mat4_cast(entity->getRotation()); - glm::mat4 translation = glm::translate(entity->getPosition()); + glm::mat4 translation = glm::translate(entity->getWorldPosition()); glm::mat4 entityToWorldMatrix = translation * rotation; glm::mat4 worldToEntityMatrix = glm::inverse(entityToWorldMatrix); @@ -718,7 +718,7 @@ bool EntityTreeElement::findSpherePenetration(const glm::vec3& center, float rad bool result = false; withReadLock([&] { foreach(EntityItemPointer entity, _entityItems) { - glm::vec3 entityCenter = entity->getPosition(); + glm::vec3 entityCenter = entity->getWorldPosition(); float entityRadius = entity->getRadius(); // don't penetrate yourself @@ -743,7 +743,7 @@ EntityItemPointer EntityTreeElement::getClosestEntity(glm::vec3 position) const float closestEntityDistance = FLT_MAX; withReadLock([&] { foreach(EntityItemPointer entity, _entityItems) { - float distanceToEntity = glm::distance2(position, entity->getPosition()); + float distanceToEntity = glm::distance2(position, entity->getWorldPosition()); if (distanceToEntity < closestEntityDistance) { closestEntity = entity; } @@ -788,7 +788,7 @@ void EntityTreeElement::getEntities(const glm::vec3& searchPosition, float searc // determine the worldToEntityMatrix that doesn't include scale because // we're going to use the registration aware aa box in the entity frame glm::mat4 rotation = glm::mat4_cast(entity->getRotation()); - glm::mat4 translation = glm::translate(entity->getPosition()); + glm::mat4 translation = glm::translate(entity->getWorldPosition()); glm::mat4 entityToWorldMatrix = translation * rotation; glm::mat4 worldToEntityMatrix = glm::inverse(entityToWorldMatrix); diff --git a/libraries/entities/src/LineEntityItem.cpp b/libraries/entities/src/LineEntityItem.cpp index 119236e32d..02d16f2537 100644 --- a/libraries/entities/src/LineEntityItem.cpp +++ b/libraries/entities/src/LineEntityItem.cpp @@ -156,7 +156,7 @@ void LineEntityItem::debugDump() const { quint64 now = usecTimestampNow(); qCDebug(entities) << " LINE EntityItem id:" << getEntityItemID() << "---------------------------------------------"; qCDebug(entities) << " color:" << _color[0] << "," << _color[1] << "," << _color[2]; - qCDebug(entities) << " position:" << debugTreeVector(getPosition()); + qCDebug(entities) << " position:" << debugTreeVector(getWorldPosition()); qCDebug(entities) << " dimensions:" << debugTreeVector(getDimensions()); qCDebug(entities) << " getLastEdited:" << debugTime(getLastEdited(), now); } diff --git a/libraries/entities/src/ModelEntityItem.cpp b/libraries/entities/src/ModelEntityItem.cpp index 26f063f7cc..313721ff54 100644 --- a/libraries/entities/src/ModelEntityItem.cpp +++ b/libraries/entities/src/ModelEntityItem.cpp @@ -189,7 +189,7 @@ void ModelEntityItem::appendSubclassData(OctreePacketData* packetData, EncodeBit void ModelEntityItem::debugDump() const { qCDebug(entities) << "ModelEntityItem id:" << getEntityItemID(); qCDebug(entities) << " edited ago:" << getEditedAgo(); - qCDebug(entities) << " position:" << getPosition(); + qCDebug(entities) << " position:" << getWorldPosition(); qCDebug(entities) << " dimensions:" << getDimensions(); qCDebug(entities) << " model URL:" << getModelURL(); qCDebug(entities) << " compound shape URL:" << getCompoundShapeURL(); diff --git a/libraries/entities/src/ParticleEffectEntityItem.cpp b/libraries/entities/src/ParticleEffectEntityItem.cpp index b216144ded..05c0feca18 100644 --- a/libraries/entities/src/ParticleEffectEntityItem.cpp +++ b/libraries/entities/src/ParticleEffectEntityItem.cpp @@ -591,7 +591,7 @@ void ParticleEffectEntityItem::debugDump() const { _particleProperties.color.gradient.target.red << "," << _particleProperties.color.gradient.target.green << "," << _particleProperties.color.gradient.target.blue; - qCDebug(entities) << " position:" << debugTreeVector(getPosition()); + qCDebug(entities) << " position:" << debugTreeVector(getWorldPosition()); qCDebug(entities) << " dimensions:" << debugTreeVector(getDimensions()); qCDebug(entities) << " getLastEdited:" << debugTime(getLastEdited(), now); } diff --git a/libraries/entities/src/PolyLineEntityItem.cpp b/libraries/entities/src/PolyLineEntityItem.cpp index 7cd70fdb21..e69fb2e100 100644 --- a/libraries/entities/src/PolyLineEntityItem.cpp +++ b/libraries/entities/src/PolyLineEntityItem.cpp @@ -256,7 +256,7 @@ void PolyLineEntityItem::debugDump() const { quint64 now = usecTimestampNow(); qCDebug(entities) << " QUAD EntityItem id:" << getEntityItemID() << "---------------------------------------------"; qCDebug(entities) << " color:" << _color[0] << "," << _color[1] << "," << _color[2]; - qCDebug(entities) << " position:" << debugTreeVector(getPosition()); + qCDebug(entities) << " position:" << debugTreeVector(getWorldPosition()); qCDebug(entities) << " dimensions:" << debugTreeVector(getDimensions()); qCDebug(entities) << " getLastEdited:" << debugTime(getLastEdited(), now); } diff --git a/libraries/entities/src/PolyVoxEntityItem.cpp b/libraries/entities/src/PolyVoxEntityItem.cpp index e577a6c1a7..abcc075bcf 100644 --- a/libraries/entities/src/PolyVoxEntityItem.cpp +++ b/libraries/entities/src/PolyVoxEntityItem.cpp @@ -228,7 +228,7 @@ void PolyVoxEntityItem::appendSubclassData(OctreePacketData* packetData, EncodeB void PolyVoxEntityItem::debugDump() const { quint64 now = usecTimestampNow(); qCDebug(entities) << " POLYVOX EntityItem id:" << getEntityItemID() << "---------------------------------------------"; - qCDebug(entities) << " position:" << debugTreeVector(getPosition()); + qCDebug(entities) << " position:" << debugTreeVector(getWorldPosition()); qCDebug(entities) << " dimensions:" << debugTreeVector(getDimensions()); qCDebug(entities) << " getLastEdited:" << debugTime(getLastEdited(), now); } @@ -396,7 +396,7 @@ glm::mat4 PolyVoxEntityItem::voxelToLocalMatrix() const { glm::vec3 scale = dimensions / voxelVolumeSize; // meters / voxel-units bool success; // TODO -- Does this actually have to happen in world space? glm::vec3 center = getCenterPosition(success); // this handles registrationPoint changes - glm::vec3 position = getPosition(success); + glm::vec3 position = getWorldPosition(success); glm::vec3 positionToCenter = center - position; positionToCenter -= dimensions * Vectors::HALF - getSurfacePositionAdjustment(); @@ -412,7 +412,7 @@ glm::mat4 PolyVoxEntityItem::localToVoxelMatrix() const { glm::mat4 PolyVoxEntityItem::voxelToWorldMatrix() const { glm::mat4 rotation = glm::mat4_cast(getRotation()); - glm::mat4 translation = glm::translate(getPosition()); + glm::mat4 translation = glm::translate(getWorldPosition()); return translation * rotation * voxelToLocalMatrix(); } diff --git a/libraries/entities/src/ShapeEntityItem.cpp b/libraries/entities/src/ShapeEntityItem.cpp index 9a1a500a54..654fecb156 100644 --- a/libraries/entities/src/ShapeEntityItem.cpp +++ b/libraries/entities/src/ShapeEntityItem.cpp @@ -235,7 +235,7 @@ void ShapeEntityItem::debugDump() const { qCDebug(entities) << " shape:" << stringFromShape(_shape) << " (EnumId: " << _shape << " )"; qCDebug(entities) << " collisionShapeType:" << ShapeInfo::getNameForShapeType(getShapeType()); qCDebug(entities) << " color:" << _color[0] << "," << _color[1] << "," << _color[2]; - qCDebug(entities) << " position:" << debugTreeVector(getPosition()); + qCDebug(entities) << " position:" << debugTreeVector(getWorldPosition()); qCDebug(entities) << " dimensions:" << debugTreeVector(getDimensions()); qCDebug(entities) << " getLastEdited:" << debugTime(getLastEdited(), now); qCDebug(entities) << "SHAPE EntityItem Ptr:" << this; diff --git a/libraries/entities/src/TextEntityItem.cpp b/libraries/entities/src/TextEntityItem.cpp index 074691e1d4..0f113248f7 100644 --- a/libraries/entities/src/TextEntityItem.cpp +++ b/libraries/entities/src/TextEntityItem.cpp @@ -135,7 +135,7 @@ bool TextEntityItem::findDetailedRayIntersection(const glm::vec3& origin, const glm::vec3 dimensions = getDimensions(); glm::vec2 xyDimensions(dimensions.x, dimensions.y); glm::quat rotation = getRotation(); - glm::vec3 position = getPosition() + rotation * + glm::vec3 position = getWorldPosition() + rotation * (dimensions * (ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - getRegistrationPoint())); // FIXME - should set face and surfaceNormal diff --git a/libraries/entities/src/WebEntityItem.cpp b/libraries/entities/src/WebEntityItem.cpp index dd4bf518e0..91137431fe 100644 --- a/libraries/entities/src/WebEntityItem.cpp +++ b/libraries/entities/src/WebEntityItem.cpp @@ -112,7 +112,7 @@ bool WebEntityItem::findDetailedRayIntersection(const glm::vec3& origin, const g glm::vec3 dimensions = getDimensions(); glm::vec2 xyDimensions(dimensions.x, dimensions.y); glm::quat rotation = getRotation(); - glm::vec3 position = getPosition() + rotation * (dimensions * (ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - getRegistrationPoint())); + glm::vec3 position = getWorldPosition() + rotation * (dimensions * (ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - getRegistrationPoint())); if (findRayRectangleIntersection(origin, direction, rotation, position, xyDimensions, distance)) { surfaceNormal = rotation * Vectors::UNIT_Z; diff --git a/libraries/entities/src/ZoneEntityItem.cpp b/libraries/entities/src/ZoneEntityItem.cpp index 588c1f9386..debe3eab61 100644 --- a/libraries/entities/src/ZoneEntityItem.cpp +++ b/libraries/entities/src/ZoneEntityItem.cpp @@ -241,7 +241,7 @@ void ZoneEntityItem::appendSubclassData(OctreePacketData* packetData, EncodeBits void ZoneEntityItem::debugDump() const { quint64 now = usecTimestampNow(); qCDebug(entities) << " ZoneEntityItem id:" << getEntityItemID() << "---------------------------------------------"; - qCDebug(entities) << " position:" << debugTreeVector(getPosition()); + qCDebug(entities) << " position:" << debugTreeVector(getWorldPosition()); qCDebug(entities) << " dimensions:" << debugTreeVector(getDimensions()); qCDebug(entities) << " getLastEdited:" << debugTime(getLastEdited(), now); qCDebug(entities) << " _backgroundMode:" << EntityItemProperties::getBackgroundModeString(_backgroundMode); diff --git a/libraries/physics/src/EntityMotionState.cpp b/libraries/physics/src/EntityMotionState.cpp index 6884482074..be56bffb18 100644 --- a/libraries/physics/src/EntityMotionState.cpp +++ b/libraries/physics/src/EntityMotionState.cpp @@ -108,7 +108,7 @@ void EntityMotionState::handleDeactivation() { _entity->setLocalTransformAndVelocities(localTransform, ENTITY_ITEM_ZERO_VEC3, ENTITY_ITEM_ZERO_VEC3); // and also to RigidBody btTransform worldTrans; - worldTrans.setOrigin(glmToBullet(_entity->getPosition())); + worldTrans.setOrigin(glmToBullet(_entity->getWorldPosition())); worldTrans.setRotation(glmToBullet(_entity->getRotation())); _body->setWorldTransform(worldTrans); // no need to update velocities... should already be zero @@ -256,7 +256,7 @@ void EntityMotionState::setWorldTransform(const btTransform& worldTrans) { assert(entityTreeIsLocked()); measureBodyAcceleration(); bool positionSuccess; - _entity->setPosition(bulletToGLM(worldTrans.getOrigin()) + ObjectMotionState::getWorldOffset(), positionSuccess, false); + _entity->setWorldPosition(bulletToGLM(worldTrans.getOrigin()) + ObjectMotionState::getWorldOffset(), positionSuccess, false); if (!positionSuccess) { static QString repeatedMessage = LogHandler::getInstance().addRepeatedMessageRegex("EntityMotionState::setWorldTransform " diff --git a/libraries/physics/src/EntityMotionState.h b/libraries/physics/src/EntityMotionState.h index 968f53700c..839309e60e 100644 --- a/libraries/physics/src/EntityMotionState.h +++ b/libraries/physics/src/EntityMotionState.h @@ -57,7 +57,7 @@ public: virtual float getObjectLinearDamping() const override { return _entity->getDamping(); } virtual float getObjectAngularDamping() const override { return _entity->getAngularDamping(); } - virtual glm::vec3 getObjectPosition() const override { return _entity->getPosition() - ObjectMotionState::getWorldOffset(); } + virtual glm::vec3 getObjectPosition() const override { return _entity->getWorldPosition() - ObjectMotionState::getWorldOffset(); } virtual glm::quat getObjectRotation() const override { return _entity->getRotation(); } virtual glm::vec3 getObjectLinearVelocity() const override { return _entity->getVelocity(); } virtual glm::vec3 getObjectAngularVelocity() const override { return _entity->getAngularVelocity(); } diff --git a/libraries/physics/src/ObjectActionTractor.cpp b/libraries/physics/src/ObjectActionTractor.cpp index 1a1790b0e0..6ab7daae7f 100644 --- a/libraries/physics/src/ObjectActionTractor.cpp +++ b/libraries/physics/src/ObjectActionTractor.cpp @@ -55,7 +55,7 @@ bool ObjectActionTractor::getTarget(float deltaTimeStep, glm::quat& rotation, gl if (!_otherID.isNull()) { if (other) { rotation = _desiredRotationalTarget * other->getRotation(); - position = other->getRotation() * _desiredPositionalTarget + other->getPosition(); + position = other->getRotation() * _desiredPositionalTarget + other->getWorldPosition(); } else { // we should have an "other" but can't find it, so disable the tractor. linearTimeScale = FLT_MAX; diff --git a/libraries/physics/src/PhysicalEntitySimulation.cpp b/libraries/physics/src/PhysicalEntitySimulation.cpp index b6f460cf39..3e87b9437d 100644 --- a/libraries/physics/src/PhysicalEntitySimulation.cpp +++ b/libraries/physics/src/PhysicalEntitySimulation.cpp @@ -223,7 +223,7 @@ void PhysicalEntitySimulation::getObjectsToAddToPhysics(VectorOfMotionStates& re if (numPoints > MAX_HULL_POINTS) { qWarning() << "convex hull with" << numPoints << "points for entity" << entity->getName() - << "at" << entity->getPosition() << " will be reduced"; + << "at" << entity->getWorldPosition() << " will be reduced"; } } btCollisionShape* shape = const_cast(ObjectMotionState::getShapeManager()->getShape(shapeInfo)); diff --git a/libraries/shared/src/SpatiallyNestable.cpp b/libraries/shared/src/SpatiallyNestable.cpp index 8dbd2dd5e0..9713ce8a17 100644 --- a/libraries/shared/src/SpatiallyNestable.cpp +++ b/libraries/shared/src/SpatiallyNestable.cpp @@ -367,26 +367,26 @@ glm::vec3 SpatiallyNestable::localToWorldAngularVelocity(const glm::vec3& angula return parentTransform.getRotation() * angularVelocity; } -glm::vec3 SpatiallyNestable::getPosition(bool& success) const { +glm::vec3 SpatiallyNestable::getWorldPosition(bool& success) const { return getTransform(success).getTranslation(); } -glm::vec3 SpatiallyNestable::getPosition() const { +glm::vec3 SpatiallyNestable::getWorldPosition() const { bool success; - auto result = getPosition(success); + auto result = getWorldPosition(success); #ifdef WANT_DEBUG if (!success) { - qCDebug(shared) << "Warning -- getPosition failed" << getID(); + qCDebug(shared) << "Warning -- getWorldPosition failed" << getID(); } #endif return result; } -glm::vec3 SpatiallyNestable::getPosition(int jointIndex, bool& success) const { +glm::vec3 SpatiallyNestable::getWorldPosition(int jointIndex, bool& success) const { return getTransform(jointIndex, success).getTranslation(); } -void SpatiallyNestable::setPosition(const glm::vec3& position, bool& success, bool tellPhysics) { +void SpatiallyNestable::setWorldPosition(const glm::vec3& position, bool& success, bool tellPhysics) { // guard against introducing NaN into the transform if (isNaN(position)) { success = false; @@ -410,12 +410,12 @@ void SpatiallyNestable::setPosition(const glm::vec3& position, bool& success, bo } } -void SpatiallyNestable::setPosition(const glm::vec3& position) { +void SpatiallyNestable::setWorldPosition(const glm::vec3& position) { bool success; - setPosition(position, success); + setWorldPosition(position, success); #ifdef WANT_DEBUG if (!success) { - qCDebug(shared) << "Warning -- setPosition failed" << getID(); + qCDebug(shared) << "Warning -- setWorldPosition failed" << getID(); } #endif } @@ -624,7 +624,7 @@ const Transform SpatiallyNestable::getTransform(int jointIndex, bool& success, i bool setPositionSuccess; AACube aaCube = getQueryAACube(setPositionSuccess); if (setPositionSuccess) { - _this->setPosition(aaCube.calcCenter()); + _this->setWorldPosition(aaCube.calcCenter()); } return jointInWorldFrame; } @@ -958,7 +958,7 @@ void SpatiallyNestable::locationChanged(bool tellPhysics) { } AACube SpatiallyNestable::getMaximumAACube(bool& success) const { - return AACube(getPosition(success) - glm::vec3(defaultAACubeSize / 2.0f), defaultAACubeSize); + return AACube(getWorldPosition(success) - glm::vec3(defaultAACubeSize / 2.0f), defaultAACubeSize); } const float PARENTED_EXPANSION_FACTOR = 3.0f; @@ -1044,7 +1044,7 @@ AACube SpatiallyNestable::getQueryAACube(bool& success) const { } success = false; bool getPositionSuccess; - return AACube(getPosition(getPositionSuccess) - glm::vec3(defaultAACubeSize / 2.0f), defaultAACubeSize); + return AACube(getWorldPosition(getPositionSuccess) - glm::vec3(defaultAACubeSize / 2.0f), defaultAACubeSize); } AACube SpatiallyNestable::getQueryAACube() const { diff --git a/libraries/shared/src/SpatiallyNestable.h b/libraries/shared/src/SpatiallyNestable.h index 37f6cfdfd9..6b082fed82 100644 --- a/libraries/shared/src/SpatiallyNestable.h +++ b/libraries/shared/src/SpatiallyNestable.h @@ -78,10 +78,10 @@ public: virtual Transform getParentTransform(bool& success, int depth = 0) const; - virtual glm::vec3 getPosition(bool& success) const; - virtual glm::vec3 getPosition() const; - virtual void setPosition(const glm::vec3& position, bool& success, bool tellPhysics = true); - virtual void setPosition(const glm::vec3& position); + virtual glm::vec3 getWorldPosition(bool& success) const; + virtual glm::vec3 getWorldPosition() const; + virtual void setWorldPosition(const glm::vec3& position, bool& success, bool tellPhysics = true); + virtual void setWorldPosition(const glm::vec3& position); virtual glm::quat getOrientation(bool& success) const; virtual glm::quat getOrientation() const; @@ -122,7 +122,7 @@ public: // get world-frame values for a specific joint virtual const Transform getTransform(int jointIndex, bool& success, int depth = 0) const; - virtual glm::vec3 getPosition(int jointIndex, bool& success) const; + virtual glm::vec3 getWorldPosition(int jointIndex, bool& success) const; virtual glm::vec3 getSNScale(int jointIndex, bool& success) const; // object's parent's frame From f63db42c0e0da7953563d3f24be10293147e646e Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Sat, 28 Oct 2017 10:14:25 -0700 Subject: [PATCH 10/17] migrate SpatiallyNestable::getOrientation to getWorldOrientation, remove redundant getRotation --- interface/src/Application.cpp | 36 +++++------ interface/src/avatar/AvatarActionHold.cpp | 2 +- interface/src/avatar/AvatarMotionState.cpp | 2 +- interface/src/avatar/MyAvatar.cpp | 60 +++++++++---------- .../src/avatar/MyCharacterController.cpp | 2 +- interface/src/avatar/MyHead.cpp | 2 +- interface/src/raypick/JointRayPick.cpp | 2 +- interface/src/raypick/LaserPointer.cpp | 2 +- interface/src/ui/overlays/Base3DOverlay.cpp | 4 +- interface/src/ui/overlays/Billboardable.cpp | 2 +- interface/src/ui/overlays/Circle3DOverlay.cpp | 4 +- .../ui/overlays/ContextOverlayInterface.cpp | 2 +- interface/src/ui/overlays/Cube3DOverlay.cpp | 2 +- interface/src/ui/overlays/Grid3DOverlay.cpp | 2 +- interface/src/ui/overlays/ModelOverlay.cpp | 6 +- interface/src/ui/overlays/Overlays.cpp | 2 +- interface/src/ui/overlays/OverlaysPayload.cpp | 2 +- interface/src/ui/overlays/Planar3DOverlay.cpp | 2 +- .../src/ui/overlays/Rectangle3DOverlay.cpp | 2 +- interface/src/ui/overlays/Shape3DOverlay.cpp | 2 +- interface/src/ui/overlays/Volume3DOverlay.cpp | 2 +- interface/src/ui/overlays/Web3DOverlay.cpp | 2 +- .../src/avatars-renderer/Avatar.cpp | 12 ++-- .../src/avatars-renderer/Avatar.h | 4 +- .../src/avatars-renderer/Head.cpp | 2 +- .../src/avatars-renderer/SkeletonModel.cpp | 2 +- libraries/avatars/src/AvatarData.cpp | 28 ++++----- libraries/avatars/src/AvatarData.h | 2 +- libraries/avatars/src/HeadData.cpp | 12 ++-- libraries/avatars/src/ScriptAvatarData.cpp | 2 +- .../src/EntityTreeRenderer.cpp | 2 +- .../src/RenderableLightEntityItem.cpp | 2 +- .../src/RenderableModelEntityItem.cpp | 2 +- .../src/RenderablePolyLineEntityItem.cpp | 2 +- .../src/RenderablePolyVoxEntityItem.cpp | 2 +- .../src/RenderableShapeEntityItem.cpp | 2 +- .../src/RenderableZoneEntityItem.cpp | 4 +- libraries/entities/src/EntityItem.cpp | 8 +-- .../entities/src/EntityScriptingInterface.cpp | 4 +- libraries/entities/src/EntityTreeElement.cpp | 4 +- libraries/entities/src/PolyVoxEntityItem.cpp | 2 +- libraries/entities/src/TextEntityItem.cpp | 2 +- libraries/entities/src/WebEntityItem.cpp | 2 +- libraries/physics/src/EntityMotionState.cpp | 6 +- libraries/physics/src/EntityMotionState.h | 2 +- libraries/physics/src/ObjectActionTractor.cpp | 4 +- libraries/shared/src/SpatiallyNestable.cpp | 14 ++--- libraries/shared/src/SpatiallyNestable.h | 14 ++--- 48 files changed, 141 insertions(+), 145 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index b1f461f227..41560d56f1 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -967,7 +967,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo // use our MyAvatar position and quat for address manager path addressManager->setPositionGetter([this]{ return getMyAvatar()->getWorldPosition(); }); - addressManager->setOrientationGetter([this]{ return getMyAvatar()->getOrientation(); }); + addressManager->setOrientationGetter([this]{ return getMyAvatar()->getWorldOrientation(); }); connect(addressManager.data(), &AddressManager::hostChanged, this, &Application::updateWindowTitle); connect(this, &QCoreApplication::aboutToQuit, addressManager.data(), &AddressManager::storeCurrentAddress); @@ -2400,7 +2400,7 @@ void Application::updateCamera(RenderArgs& renderArgs) { auto hmdWorldMat = myAvatar->getSensorToWorldMatrix() * myAvatar->getHMDSensorMatrix(); _myCamera.setOrientation(glm::normalize(glmExtractRotation(hmdWorldMat))); _myCamera.setPosition(extractTranslation(hmdWorldMat) + - myAvatar->getOrientation() * boomOffset); + myAvatar->getWorldOrientation() * boomOffset); } else { _myCamera.setOrientation(myAvatar->getHead()->getOrientation()); @@ -2410,13 +2410,13 @@ void Application::updateCamera(RenderArgs& renderArgs) { } else { _myCamera.setPosition(myAvatar->getDefaultEyePosition() - + myAvatar->getOrientation() * boomOffset); + + myAvatar->getWorldOrientation() * boomOffset); } } } else if (_myCamera.getMode() == CAMERA_MODE_MIRROR) { if (isHMDMode()) { - auto mirrorBodyOrientation = myAvatar->getOrientation() * glm::quat(glm::vec3(0.0f, PI + _rotateMirror, 0.0f)); + auto mirrorBodyOrientation = myAvatar->getWorldOrientation() * glm::quat(glm::vec3(0.0f, PI + _rotateMirror, 0.0f)); glm::quat hmdRotation = extractRotation(myAvatar->getHMDSensorMatrix()); // Mirror HMD yaw and roll @@ -2439,11 +2439,11 @@ void Application::updateCamera(RenderArgs& renderArgs) { + mirrorBodyOrientation * hmdOffset); } else { - _myCamera.setOrientation(myAvatar->getOrientation() + _myCamera.setOrientation(myAvatar->getWorldOrientation() * glm::quat(glm::vec3(0.0f, PI + _rotateMirror, 0.0f))); _myCamera.setPosition(myAvatar->getDefaultEyePosition() + glm::vec3(0, _raiseMirror * myAvatar->getModelScale(), 0) - + (myAvatar->getOrientation() * glm::quat(glm::vec3(0.0f, _rotateMirror, 0.0f))) * + + (myAvatar->getWorldOrientation() * glm::quat(glm::vec3(0.0f, _rotateMirror, 0.0f))) * glm::vec3(0.0f, 0.0f, -1.0f) * MIRROR_FULLSCREEN_DISTANCE * _scaleMirror); } renderArgs._renderMode = RenderArgs::MIRROR_RENDER_MODE; @@ -2453,12 +2453,12 @@ void Application::updateCamera(RenderArgs& renderArgs) { if (cameraEntity != nullptr) { if (isHMDMode()) { glm::quat hmdRotation = extractRotation(myAvatar->getHMDSensorMatrix()); - _myCamera.setOrientation(cameraEntity->getRotation() * hmdRotation); + _myCamera.setOrientation(cameraEntity->getWorldOrientation() * hmdRotation); glm::vec3 hmdOffset = extractTranslation(myAvatar->getHMDSensorMatrix()); _myCamera.setPosition(cameraEntity->getWorldPosition() + (hmdRotation * hmdOffset)); } else { - _myCamera.setOrientation(cameraEntity->getRotation()); + _myCamera.setOrientation(cameraEntity->getWorldOrientation()); _myCamera.setPosition(cameraEntity->getWorldPosition()); } } @@ -3870,7 +3870,7 @@ void Application::idle() { if (!_keyboardFocusedEntity.get().isInvalidID()) { auto entity = getEntities()->getTree()->findEntityByID(_keyboardFocusedEntity.get()); if (entity && _keyboardFocusHighlight) { - _keyboardFocusHighlight->setRotation(entity->getRotation()); + _keyboardFocusHighlight->setWorldOrientation(entity->getWorldOrientation()); _keyboardFocusHighlight->setWorldPosition(entity->getWorldPosition()); } } else { @@ -3878,7 +3878,7 @@ void Application::idle() { auto overlay = std::dynamic_pointer_cast(getOverlays().getOverlay(_keyboardFocusedOverlay.get())); if (overlay && _keyboardFocusHighlight) { - _keyboardFocusHighlight->setRotation(overlay->getRotation()); + _keyboardFocusHighlight->setWorldOrientation(overlay->getWorldOrientation()); _keyboardFocusHighlight->setWorldPosition(overlay->getWorldPosition()); } } @@ -4293,7 +4293,7 @@ void Application::updateMyAvatarLookAtPosition() { // TODO -- this code is probably wrong, getHeadPose() returns something in sensor frame, not avatar glm::mat4 headPose = getActiveDisplayPlugin()->getHeadPose(); glm::quat hmdRotation = glm::quat_cast(headPose); - lookAtSpot = _myCamera.getPosition() + myAvatar->getOrientation() * (hmdRotation * lookAtPosition); + lookAtSpot = _myCamera.getPosition() + myAvatar->getWorldOrientation() * (hmdRotation * lookAtPosition); } else { lookAtSpot = myAvatar->getHead()->getEyePosition() + (myAvatar->getHead()->getFinalOrientationInWorldFrame() * lookAtPosition); @@ -4519,7 +4519,7 @@ void Application::setKeyboardFocusHighlight(const glm::vec3& position, const glm } // Position focus - _keyboardFocusHighlight->setRotation(rotation); + _keyboardFocusHighlight->setWorldOrientation(rotation); _keyboardFocusHighlight->setWorldPosition(position); _keyboardFocusHighlight->setDimensions(dimensions); _keyboardFocusHighlight->setVisible(true); @@ -4557,7 +4557,7 @@ void Application::setKeyboardFocusEntity(const EntityItemID& entityItemID) { } _lastAcceptedKeyPress = usecTimestampNow(); - setKeyboardFocusHighlight(entity->getWorldPosition(), entity->getRotation(), + setKeyboardFocusHighlight(entity->getWorldPosition(), entity->getWorldOrientation(), entity->getDimensions() * FOCUS_HIGHLIGHT_EXPANSION_FACTOR); } } @@ -4594,7 +4594,7 @@ void Application::setKeyboardFocusOverlay(const OverlayID& overlayID) { if (overlay->getProperty("showKeyboardFocusHighlight").toBool()) { auto size = overlay->getSize() * FOCUS_HIGHLIGHT_EXPANSION_FACTOR; const float OVERLAY_DEPTH = 0.0105f; - setKeyboardFocusHighlight(overlay->getWorldPosition(), overlay->getRotation(), glm::vec3(size.x, size.y, OVERLAY_DEPTH)); + setKeyboardFocusHighlight(overlay->getWorldPosition(), overlay->getWorldOrientation(), glm::vec3(size.x, size.y, OVERLAY_DEPTH)); } else if (_keyboardFocusHighlight) { _keyboardFocusHighlight->setVisible(false); } @@ -4686,7 +4686,7 @@ void Application::update(float deltaTime) { controller::InputCalibrationData calibrationData = { myAvatar->getSensorToWorldMatrix(), - createMatFromQuatAndPos(myAvatar->getOrientation(), myAvatar->getWorldPosition()), + createMatFromQuatAndPos(myAvatar->getWorldOrientation(), myAvatar->getWorldPosition()), myAvatar->getHMDSensorMatrix(), myAvatar->getCenterEyeCalibrationMat(), myAvatar->getHeadCalibrationMat(), @@ -4796,7 +4796,7 @@ void Application::update(float deltaTime) { }; // copy controller poses from userInputMapper to myAvatar. - glm::mat4 myAvatarMatrix = createMatFromQuatAndPos(myAvatar->getOrientation(), myAvatar->getWorldPosition()); + glm::mat4 myAvatarMatrix = createMatFromQuatAndPos(myAvatar->getWorldOrientation(), myAvatar->getWorldPosition()); glm::mat4 worldToSensorMatrix = glm::inverse(myAvatar->getSensorToWorldMatrix()); glm::mat4 avatarToSensorMatrix = worldToSensorMatrix * myAvatarMatrix; for (auto& action : avatarControllerActions) { @@ -6437,9 +6437,9 @@ void Application::addAssetToWorldAddEntity(QString filePath, QString mapping) { properties.setShapeType(SHAPE_TYPE_SIMPLE_COMPOUND); properties.setCollisionless(true); // Temporarily set so that doesn't collide with avatar. properties.setVisible(false); // Temporarily set so that don't see at large unresized dimensions. - glm::vec3 positionOffset = getMyAvatar()->getOrientation() * (getMyAvatar()->getSensorToWorldScale() * glm::vec3(0.0f, 0.0f, -2.0f)); + glm::vec3 positionOffset = getMyAvatar()->getWorldOrientation() * (getMyAvatar()->getSensorToWorldScale() * glm::vec3(0.0f, 0.0f, -2.0f)); properties.setPosition(getMyAvatar()->getWorldPosition() + positionOffset); - properties.setRotation(getMyAvatar()->getOrientation()); + properties.setRotation(getMyAvatar()->getWorldOrientation()); properties.setGravity(glm::vec3(0.0f, 0.0f, 0.0f)); auto entityID = DependencyManager::get()->addEntity(properties); diff --git a/interface/src/avatar/AvatarActionHold.cpp b/interface/src/avatar/AvatarActionHold.cpp index 668994883d..66184513da 100644 --- a/interface/src/avatar/AvatarActionHold.cpp +++ b/interface/src/avatar/AvatarActionHold.cpp @@ -531,5 +531,5 @@ void AvatarActionHold::lateAvatarUpdate(const AnimPose& prePhysicsRoomPose, cons bool positionSuccess; ownerEntity->setWorldPosition(bulletToGLM(worldTrans.getOrigin()) + ObjectMotionState::getWorldOffset(), positionSuccess, false); bool orientationSuccess; - ownerEntity->setOrientation(bulletToGLM(worldTrans.getRotation()), orientationSuccess, false); + ownerEntity->setWorldOrientation(bulletToGLM(worldTrans.getRotation()), orientationSuccess, false); } diff --git a/interface/src/avatar/AvatarMotionState.cpp b/interface/src/avatar/AvatarMotionState.cpp index 01cfb93333..4f6f2b0b71 100644 --- a/interface/src/avatar/AvatarMotionState.cpp +++ b/interface/src/avatar/AvatarMotionState.cpp @@ -111,7 +111,7 @@ glm::vec3 AvatarMotionState::getObjectPosition() const { // virtual glm::quat AvatarMotionState::getObjectRotation() const { - return _avatar->getOrientation(); + return _avatar->getWorldOrientation(); } // virtual diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index 9458789685..c7af0fa77e 100755 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -197,7 +197,7 @@ MyAvatar::MyAvatar(QThread* thread) : } setWorldPosition(dummyAvatar.getWorldPosition()); - setOrientation(dummyAvatar.getOrientation()); + setWorldOrientation(dummyAvatar.getWorldOrientation()); if (!dummyAvatar.getAttachmentData().isEmpty()) { setAttachmentData(dummyAvatar.getAttachmentData()); @@ -250,11 +250,11 @@ void MyAvatar::registerMetaTypes(ScriptEnginePointer engine) { } void MyAvatar::setOrientationVar(const QVariant& newOrientationVar) { - Avatar::setOrientation(quatFromVariant(newOrientationVar)); + Avatar::setWorldOrientation(quatFromVariant(newOrientationVar)); } QVariant MyAvatar::getOrientationVar() const { - return quatToVariant(Avatar::getOrientation()); + return quatToVariant(Avatar::getWorldOrientation()); } glm::quat MyAvatar::getOrientationOutbound() const { @@ -329,7 +329,7 @@ void MyAvatar::centerBody() { // this will become our new position. setWorldPosition(worldBodyPos); - setOrientation(worldBodyRot); + setWorldOrientation(worldBodyRot); // reset the body in sensor space _bodySensorMatrix = newBodySensorMatrix; @@ -373,7 +373,7 @@ void MyAvatar::reset(bool andRecenter, bool andReload, bool andHead) { // this will become our new position. setWorldPosition(worldBodyPos); - setOrientation(worldBodyRot); + setWorldOrientation(worldBodyRot); // now sample the new hmd orientation AFTER sensor reset, which should be identity. glm::mat4 identity; @@ -411,7 +411,7 @@ void MyAvatar::update(float deltaTime) { if (_goToPending) { setWorldPosition(_goToPosition); - setOrientation(_goToOrientation); + setWorldOrientation(_goToOrientation); _headControllerFacingMovingAverage = _headControllerFacing; // reset moving average _goToPending = false; // updateFromHMDSensorMatrix (called from paintGL) expects that the sensorToWorldMatrix is updated for any position changes @@ -666,7 +666,7 @@ void MyAvatar::updateSensorToWorldMatrix() { // update the sensor mat so that the body position will end up in the desired // position when driven from the head. float sensorToWorldScale = getEyeHeight() / getUserEyeHeight(); - glm::mat4 desiredMat = createMatFromScaleQuatAndPos(glm::vec3(sensorToWorldScale), getOrientation(), getWorldPosition()); + glm::mat4 desiredMat = createMatFromScaleQuatAndPos(glm::vec3(sensorToWorldScale), getWorldOrientation(), getWorldPosition()); _sensorToWorldMatrix = desiredMat * glm::inverse(_bodySensorMatrix); lateUpdatePalms(); @@ -784,7 +784,7 @@ controller::Pose MyAvatar::getRightHandTipPose() const { glm::vec3 MyAvatar::worldToJointPoint(const glm::vec3& position, const int jointIndex) const { glm::vec3 jointPos = getWorldPosition();//default value if no or invalid joint specified - glm::quat jointRot = getRotation();//default value if no or invalid joint specified + glm::quat jointRot = getWorldOrientation();//default value if no or invalid joint specified if (jointIndex != -1) { if (_skeletonModel->getJointPositionInWorldFrame(jointIndex, jointPos)) { _skeletonModel->getJointRotationInWorldFrame(jointIndex, jointRot); @@ -799,7 +799,7 @@ glm::vec3 MyAvatar::worldToJointPoint(const glm::vec3& position, const int joint } glm::vec3 MyAvatar::worldToJointDirection(const glm::vec3& worldDir, const int jointIndex) const { - glm::quat jointRot = getRotation();//default value if no or invalid joint specified + glm::quat jointRot = getWorldOrientation();//default value if no or invalid joint specified if ((jointIndex != -1) && (!_skeletonModel->getJointRotationInWorldFrame(jointIndex, jointRot))) { qWarning() << "Invalid joint index specified: " << jointIndex; } @@ -809,7 +809,7 @@ glm::vec3 MyAvatar::worldToJointDirection(const glm::vec3& worldDir, const int j } glm::quat MyAvatar::worldToJointRotation(const glm::quat& worldRot, const int jointIndex) const { - glm::quat jointRot = getRotation();//default value if no or invalid joint specified + glm::quat jointRot = getWorldOrientation();//default value if no or invalid joint specified if ((jointIndex != -1) && (!_skeletonModel->getJointRotationInWorldFrame(jointIndex, jointRot))) { qWarning() << "Invalid joint index specified: " << jointIndex; } @@ -819,7 +819,7 @@ glm::quat MyAvatar::worldToJointRotation(const glm::quat& worldRot, const int jo glm::vec3 MyAvatar::jointToWorldPoint(const glm::vec3& jointSpacePos, const int jointIndex) const { glm::vec3 jointPos = getWorldPosition();//default value if no or invalid joint specified - glm::quat jointRot = getRotation();//default value if no or invalid joint specified + glm::quat jointRot = getWorldOrientation();//default value if no or invalid joint specified if (jointIndex != -1) { if (_skeletonModel->getJointPositionInWorldFrame(jointIndex, jointPos)) { @@ -836,7 +836,7 @@ glm::vec3 MyAvatar::jointToWorldPoint(const glm::vec3& jointSpacePos, const int } glm::vec3 MyAvatar::jointToWorldDirection(const glm::vec3& jointSpaceDir, const int jointIndex) const { - glm::quat jointRot = getRotation();//default value if no or invalid joint specified + glm::quat jointRot = getWorldOrientation();//default value if no or invalid joint specified if ((jointIndex != -1) && (!_skeletonModel->getJointRotationInWorldFrame(jointIndex, jointRot))) { qWarning() << "Invalid joint index specified: " << jointIndex; } @@ -845,7 +845,7 @@ glm::vec3 MyAvatar::jointToWorldDirection(const glm::vec3& jointSpaceDir, const } glm::quat MyAvatar::jointToWorldRotation(const glm::quat& jointSpaceRot, const int jointIndex) const { - glm::quat jointRot = getRotation();//default value if no or invalid joint specified + glm::quat jointRot = getWorldOrientation();//default value if no or invalid joint specified if ((jointIndex != -1) && (!_skeletonModel->getJointRotationInWorldFrame(jointIndex, jointRot))) { qWarning() << "Invalid joint index specified: " << jointIndex; } @@ -1301,7 +1301,7 @@ eyeContactTarget MyAvatar::getEyeContactTarget() { } glm::vec3 MyAvatar::getDefaultEyePosition() const { - return getWorldPosition() + getOrientation() * Quaternions::Y_180 * _skeletonModel->getDefaultEyeModelPosition(); + return getWorldPosition() + getWorldOrientation() * Quaternions::Y_180 * _skeletonModel->getDefaultEyeModelPosition(); } const float SCRIPT_PRIORITY = 1.0f + 1.0f; @@ -1460,7 +1460,7 @@ glm::vec3 MyAvatar::getSkeletonPosition() const { // The avatar is rotated PI about the yAxis, so we have to correct for it // to get the skeleton offset contribution in the world-frame. const glm::quat FLIP = glm::angleAxis(PI, glm::vec3(0.0f, 1.0f, 0.0f)); - return getWorldPosition() + getOrientation() * FLIP * _skeletonOffset; + return getWorldPosition() + getWorldOrientation() * FLIP * _skeletonOffset; } return Avatar::getWorldPosition(); } @@ -1508,7 +1508,7 @@ controller::Pose MyAvatar::getControllerPoseInWorldFrame(controller::Action acti controller::Pose MyAvatar::getControllerPoseInAvatarFrame(controller::Action action) const { auto pose = getControllerPoseInWorldFrame(action); if (pose.valid) { - glm::mat4 invAvatarMatrix = glm::inverse(createMatFromQuatAndPos(getOrientation(), getWorldPosition())); + glm::mat4 invAvatarMatrix = glm::inverse(createMatFromQuatAndPos(getWorldOrientation(), getWorldPosition())); return pose.transform(invAvatarMatrix); } else { return controller::Pose(); // invalid pose @@ -1527,7 +1527,7 @@ void MyAvatar::updateMotors() { // we decompose camera's rotation and store the twist part in motorRotation // however, we need to perform the decomposition in the avatar-frame // using the local UP axis and then transform back into world-frame - glm::quat orientation = getOrientation(); + glm::quat orientation = getWorldOrientation(); glm::quat headOrientation = glm::inverse(orientation) * getMyHead()->getHeadOrientation(); // avatar-frame glm::quat liftRotation; swingTwistDecomposition(headOrientation, Vectors::UNIT_Y, liftRotation, motorRotation); @@ -1547,7 +1547,7 @@ void MyAvatar::updateMotors() { if (_scriptedMotorFrame == SCRIPTED_MOTOR_CAMERA_FRAME) { motorRotation = getMyHead()->getHeadOrientation() * glm::angleAxis(PI, Vectors::UNIT_Y); } else if (_scriptedMotorFrame == SCRIPTED_MOTOR_AVATAR_FRAME) { - motorRotation = getOrientation() * glm::angleAxis(PI, Vectors::UNIT_Y); + motorRotation = getWorldOrientation() * glm::angleAxis(PI, Vectors::UNIT_Y); } else { // world-frame motorRotation = glm::quat(); @@ -1575,7 +1575,7 @@ void MyAvatar::prepareForPhysicsSimulation() { _characterController.setParentVelocity(parentVelocity); _characterController.setScaleFactor(getSensorToWorldScale()); - _characterController.setPositionAndOrientation(getWorldPosition(), getOrientation()); + _characterController.setPositionAndOrientation(getWorldPosition(), getWorldOrientation()); auto headPose = getControllerPoseInAvatarFrame(controller::Action::HEAD); if (headPose.isValid()) { _follow.prePhysicsUpdate(*this, deriveBodyFromHMDSensor(), _bodySensorMatrix, hasDriveInput()); @@ -1610,7 +1610,7 @@ void MyAvatar::harvestResultsFromPhysicsSimulation(float deltaTime) { _characterController.getPositionAndOrientation(position, orientation); } else { position = getWorldPosition(); - orientation = getOrientation(); + orientation = getWorldOrientation(); } nextAttitude(position, orientation); _bodySensorMatrix = _follow.postPhysicsUpdate(*this, _bodySensorMatrix); @@ -1847,14 +1847,14 @@ void MyAvatar::postUpdate(float deltaTime, const render::ScenePointer& scene) { } DebugDraw::getInstance().updateMyAvatarPos(getWorldPosition()); - DebugDraw::getInstance().updateMyAvatarRot(getOrientation()); + DebugDraw::getInstance().updateMyAvatarRot(getWorldOrientation()); AnimPose postUpdateRoomPose(_sensorToWorldMatrix); updateHoldActions(_prePhysicsRoomPose, postUpdateRoomPose); if (_enableDebugDrawDetailedCollision) { - AnimPose rigToWorldPose(glm::vec3(1.0f), getRotation() * Quaternions::Y_180, getWorldPosition()); + AnimPose rigToWorldPose(glm::vec3(1.0f), getWorldOrientation() * Quaternions::Y_180, getWorldPosition()); const int NUM_DEBUG_COLORS = 8; const glm::vec4 DEBUG_COLORS[NUM_DEBUG_COLORS] = { glm::vec4(1.0f, 1.0f, 1.0f, 1.0f), @@ -1972,7 +1972,7 @@ void MyAvatar::updateOrientation(float deltaTime) { speedFactor = glm::min(speed / _lastDrivenSpeed, 1.0f); } - float direction = glm::dot(getVelocity(), getRotation() * Vectors::UNIT_NEG_Z) > 0.0f ? 1.0f : -1.0f; + float direction = glm::dot(getVelocity(), getWorldOrientation() * Vectors::UNIT_NEG_Z) > 0.0f ? 1.0f : -1.0f; float rollAngle = glm::degrees(asinf(glm::dot(IDENTITY_UP, _hmdSensorOrientation * IDENTITY_RIGHT))); float rollSign = rollAngle < 0.0f ? -1.0f : 1.0f; @@ -1985,12 +1985,12 @@ void MyAvatar::updateOrientation(float deltaTime) { // update body orientation by movement inputs glm::quat initialOrientation = getOrientationOutbound(); - setOrientation(getOrientation() * glm::quat(glm::radians(glm::vec3(0.0f, totalBodyYaw, 0.0f)))); + setWorldOrientation(getWorldOrientation() * glm::quat(glm::radians(glm::vec3(0.0f, totalBodyYaw, 0.0f)))); if (snapTurn) { // Whether or not there is an existing smoothing going on, just reset the smoothing timer and set the starting position as the avatar's current position, then smooth to the new position. _smoothOrientationInitial = initialOrientation; - _smoothOrientationTarget = getOrientation(); + _smoothOrientationTarget = getWorldOrientation(); _smoothOrientationTimer = 0.0f; } @@ -2107,7 +2107,7 @@ void MyAvatar::updatePosition(float deltaTime) { // scan for walkability glm::vec3 position = getWorldPosition(); MyCharacterController::RayShotgunResult result; - glm::vec3 step = deltaTime * (getRotation() * _actionMotorVelocity); + glm::vec3 step = deltaTime * (getWorldOrientation() * _actionMotorVelocity); _characterController.testRayShotgun(position, step, result); _characterController.setStepUpEnabled(result.walkable); } @@ -2325,7 +2325,7 @@ void MyAvatar::goToLocation(const glm::vec3& newPosition, _goToPending = true; _goToPosition = newPosition; - _goToOrientation = getOrientation(); + _goToOrientation = getWorldOrientation(); if (hasOrientation) { qCDebug(interfaceapp).nospace() << "MyAvatar goToLocation - new orientation is " << newOrientation.x << ", " << newOrientation.y << ", " << newOrientation.z << ", " << newOrientation.w; @@ -2394,7 +2394,7 @@ bool MyAvatar::requiresSafeLanding(const glm::vec3& positionIn, glm::vec3& bette return false; // no entity tree } // More utilities. - const auto offset = getOrientation() *_characterController.getCapsuleLocalOffset(); + const auto offset = getWorldOrientation() *_characterController.getCapsuleLocalOffset(); const auto capsuleCenter = positionIn + offset; const auto up = _worldUpDirection, down = -up; glm::vec3 upperIntersection, upperNormal, lowerIntersection, lowerNormal; @@ -2960,7 +2960,7 @@ glm::mat4 MyAvatar::computeCameraRelativeHandControllerMatrix(const glm::mat4& c glm::mat4 controllerWorldMatrix = getSensorToWorldMatrix() * delta * controllerSensorMatrix; // transform controller into avatar space - glm::mat4 avatarMatrix = createMatFromQuatAndPos(getOrientation(), getWorldPosition()); + glm::mat4 avatarMatrix = createMatFromQuatAndPos(getWorldOrientation(), getWorldPosition()); return glm::inverse(avatarMatrix) * controllerWorldMatrix; } @@ -3164,7 +3164,7 @@ bool MyAvatar::pinJoint(int index, const glm::vec3& position, const glm::quat& o } slamPosition(position); - setOrientation(orientation); + setWorldOrientation(orientation); _skeletonModel->getRig().setMaxHipsOffsetLength(0.05f); diff --git a/interface/src/avatar/MyCharacterController.cpp b/interface/src/avatar/MyCharacterController.cpp index 57b5e96ee5..7e38c7763a 100755 --- a/interface/src/avatar/MyCharacterController.cpp +++ b/interface/src/avatar/MyCharacterController.cpp @@ -64,7 +64,7 @@ void MyCharacterController::updateShapeIfNecessary() { _rigidBody->setSleepingThresholds(0.0f, 0.0f); _rigidBody->setAngularFactor(0.0f); - _rigidBody->setWorldTransform(btTransform(glmToBullet(_avatar->getOrientation()), + _rigidBody->setWorldTransform(btTransform(glmToBullet(_avatar->getWorldOrientation()), glmToBullet(_avatar->getWorldPosition()))); _rigidBody->setDamping(0.0f, 0.0f); if (_state == State::Hover) { diff --git a/interface/src/avatar/MyHead.cpp b/interface/src/avatar/MyHead.cpp index 7fc1850bb2..cad2f9e5d0 100644 --- a/interface/src/avatar/MyHead.cpp +++ b/interface/src/avatar/MyHead.cpp @@ -39,7 +39,7 @@ glm::quat MyHead::getHeadOrientation() const { return headPose.rotation * Quaternions::Y_180; } - return myAvatar->getOrientation() * glm::quat(glm::radians(glm::vec3(_basePitch, 0.0f, 0.0f))); + return myAvatar->getWorldOrientation() * glm::quat(glm::radians(glm::vec3(_basePitch, 0.0f, 0.0f))); } void MyHead::simulate(float deltaTime) { diff --git a/interface/src/raypick/JointRayPick.cpp b/interface/src/raypick/JointRayPick.cpp index fc0ecf94e5..5cecc56ae3 100644 --- a/interface/src/raypick/JointRayPick.cpp +++ b/interface/src/raypick/JointRayPick.cpp @@ -29,7 +29,7 @@ const PickRay JointRayPick::getPickRay(bool& valid) const { glm::vec3 jointPos = useAvatarHead ? myAvatar->getHeadPosition() : myAvatar->getAbsoluteJointTranslationInObjectFrame(jointIndex); glm::quat jointRot = useAvatarHead ? myAvatar->getHeadOrientation() : myAvatar->getAbsoluteJointRotationInObjectFrame(jointIndex); glm::vec3 avatarPos = myAvatar->getWorldPosition(); - glm::quat avatarRot = myAvatar->getOrientation(); + glm::quat avatarRot = myAvatar->getWorldOrientation(); glm::vec3 pos = useAvatarHead ? jointPos : avatarPos + (avatarRot * jointPos); glm::quat rot = useAvatarHead ? jointRot * glm::angleAxis(-PI / 2.0f, Vectors::RIGHT) : avatarRot * jointRot; diff --git a/interface/src/raypick/LaserPointer.cpp b/interface/src/raypick/LaserPointer.cpp index 75b43a251b..f7da2de7f7 100644 --- a/interface/src/raypick/LaserPointer.cpp +++ b/interface/src/raypick/LaserPointer.cpp @@ -162,7 +162,7 @@ void LaserPointer::updateRenderState(const RenderState& renderState, const Inter } if (!renderState.getEndID().isNull()) { QVariantMap endProps; - glm::quat faceAvatarRotation = DependencyManager::get()->getMyAvatar()->getOrientation() * glm::quat(glm::radians(glm::vec3(0.0f, 180.0f, 0.0f))); + glm::quat faceAvatarRotation = DependencyManager::get()->getMyAvatar()->getWorldOrientation() * glm::quat(glm::radians(glm::vec3(0.0f, 180.0f, 0.0f))); glm::vec3 dim = vec3FromVariant(qApp->getOverlays().getProperty(renderState.getEndID(), "dimensions").value); if (_distanceScaleEnd) { dim = renderState.getEndDim() * glm::distance(pickRay.origin, endVec) * DependencyManager::get()->getMyAvatar()->getSensorToWorldScale(); diff --git a/interface/src/ui/overlays/Base3DOverlay.cpp b/interface/src/ui/overlays/Base3DOverlay.cpp index 457f06aaa2..6bfd55736b 100644 --- a/interface/src/ui/overlays/Base3DOverlay.cpp +++ b/interface/src/ui/overlays/Base3DOverlay.cpp @@ -117,7 +117,7 @@ void Base3DOverlay::setProperties(const QVariantMap& originalProperties) { properties["position"] = vec3toVariant(getWorldPosition()); } if (!properties["orientation"].isValid() && !properties["localOrientation"].isValid()) { - properties["orientation"] = quatToVariant(getOrientation()); + properties["orientation"] = quatToVariant(getWorldOrientation()); } } @@ -220,7 +220,7 @@ QVariant Base3DOverlay::getProperty(const QString& property) { return vec3toVariant(getLocalPosition()); } if (property == "rotation" || property == "orientation") { - return quatToVariant(getOrientation()); + return quatToVariant(getWorldOrientation()); } if (property == "localRotation" || property == "localOrientation") { return quatToVariant(getLocalOrientation()); diff --git a/interface/src/ui/overlays/Billboardable.cpp b/interface/src/ui/overlays/Billboardable.cpp index 892a9d998d..4062abb48f 100644 --- a/interface/src/ui/overlays/Billboardable.cpp +++ b/interface/src/ui/overlays/Billboardable.cpp @@ -35,7 +35,7 @@ bool Billboardable::pointTransformAtCamera(Transform& transform, glm::quat offse glm::vec3 billboardPos = transform.getTranslation(); glm::vec3 cameraPos = qApp->getCamera().getPosition(); // use the referencial from the avatar, y isn't always up - glm::vec3 avatarUP = DependencyManager::get()->getMyAvatar()->getOrientation()*Vectors::UP; + glm::vec3 avatarUP = DependencyManager::get()->getMyAvatar()->getWorldOrientation()*Vectors::UP; glm::quat rotation(conjugate(toQuat(glm::lookAt(billboardPos, cameraPos, avatarUP)))); diff --git a/interface/src/ui/overlays/Circle3DOverlay.cpp b/interface/src/ui/overlays/Circle3DOverlay.cpp index 88172950ee..9ea402b084 100644 --- a/interface/src/ui/overlays/Circle3DOverlay.cpp +++ b/interface/src/ui/overlays/Circle3DOverlay.cpp @@ -415,11 +415,11 @@ bool Circle3DOverlay::findRayIntersection(const glm::vec3& origin, const glm::ve // Scale the dimensions by the diameter glm::vec2 dimensions = getOuterRadius() * 2.0f * getDimensions(); - bool intersects = findRayRectangleIntersection(origin, direction, getRotation(), getWorldPosition(), dimensions, distance); + bool intersects = findRayRectangleIntersection(origin, direction, getWorldOrientation(), getWorldPosition(), dimensions, distance); if (intersects) { glm::vec3 hitPosition = origin + (distance * direction); - glm::vec3 localHitPosition = glm::inverse(getRotation()) * (hitPosition - getWorldPosition()); + glm::vec3 localHitPosition = glm::inverse(getWorldOrientation()) * (hitPosition - getWorldPosition()); localHitPosition.x /= getDimensions().x; localHitPosition.y /= getDimensions().y; float distanceToHit = glm::length(localHitPosition); diff --git a/interface/src/ui/overlays/ContextOverlayInterface.cpp b/interface/src/ui/overlays/ContextOverlayInterface.cpp index ccbf9fb1b2..1f3d582b78 100644 --- a/interface/src/ui/overlays/ContextOverlayInterface.cpp +++ b/interface/src/ui/overlays/ContextOverlayInterface.cpp @@ -163,7 +163,7 @@ bool ContextOverlayInterface::createOrDestroyContextOverlay(const EntityItemID& } _contextOverlay->setWorldPosition(contextOverlayPosition); _contextOverlay->setDimensions(contextOverlayDimensions); - _contextOverlay->setRotation(entityProperties.getRotation()); + _contextOverlay->setWorldOrientation(entityProperties.getRotation()); _contextOverlay->setVisible(true); return true; diff --git a/interface/src/ui/overlays/Cube3DOverlay.cpp b/interface/src/ui/overlays/Cube3DOverlay.cpp index d95b8c7761..92eebe5556 100644 --- a/interface/src/ui/overlays/Cube3DOverlay.cpp +++ b/interface/src/ui/overlays/Cube3DOverlay.cpp @@ -146,7 +146,7 @@ Transform Cube3DOverlay::evalRenderTransform() { // TODO: handle registration point?? glm::vec3 position = getWorldPosition(); glm::vec3 dimensions = getDimensions(); - glm::quat rotation = getRotation(); + glm::quat rotation = getWorldOrientation(); Transform transform; transform.setScale(dimensions); diff --git a/interface/src/ui/overlays/Grid3DOverlay.cpp b/interface/src/ui/overlays/Grid3DOverlay.cpp index afce710d08..dd0f055f3f 100644 --- a/interface/src/ui/overlays/Grid3DOverlay.cpp +++ b/interface/src/ui/overlays/Grid3DOverlay.cpp @@ -146,7 +146,7 @@ void Grid3DOverlay::updateGrid() { Transform Grid3DOverlay::evalRenderTransform() { Transform transform; - transform.setRotation(getRotation()); + transform.setRotation(getWorldOrientation()); transform.setScale(glm::vec3(getDimensions(), 1.0f)); return transform; } diff --git a/interface/src/ui/overlays/ModelOverlay.cpp b/interface/src/ui/overlays/ModelOverlay.cpp index eedacd2d67..17dbe9850e 100644 --- a/interface/src/ui/overlays/ModelOverlay.cpp +++ b/interface/src/ui/overlays/ModelOverlay.cpp @@ -122,7 +122,7 @@ void ModelOverlay::setDrawHUDLayer(bool drawHUDLayer) { void ModelOverlay::setProperties(const QVariantMap& properties) { auto origPosition = getWorldPosition(); - auto origRotation = getRotation(); + auto origRotation = getWorldOrientation(); auto origDimensions = getDimensions(); auto origScale = getSNScale(); @@ -143,7 +143,7 @@ void ModelOverlay::setProperties(const QVariantMap& properties) { _scaleToFit = false; } - if (origPosition != getWorldPosition() || origRotation != getRotation() || origDimensions != getDimensions() || origScale != getSNScale()) { + if (origPosition != getWorldPosition() || origRotation != getWorldOrientation() || origDimensions != getDimensions() || origScale != getSNScale()) { _updateModel = true; } @@ -383,7 +383,7 @@ void ModelOverlay::locationChanged(bool tellPhysics) { // FIXME Start using the _renderTransform instead of calling for Transform and Dimensions from here, do the custom things needed in evalRenderTransform() if (_model && _model->isActive()) { - _model->setRotation(getRotation()); + _model->setRotation(getWorldOrientation()); _model->setTranslation(getWorldPosition()); } } diff --git a/interface/src/ui/overlays/Overlays.cpp b/interface/src/ui/overlays/Overlays.cpp index ca79d0b663..a20bb1d1c1 100644 --- a/interface/src/ui/overlays/Overlays.cpp +++ b/interface/src/ui/overlays/Overlays.cpp @@ -828,7 +828,7 @@ PointerEvent Overlays::calculateOverlayPointerEvent(OverlayID overlayID, PickRay return PointerEvent(); } glm::vec3 position = overlay->getWorldPosition(); - glm::quat rotation = overlay->getRotation(); + glm::quat rotation = overlay->getWorldOrientation(); glm::vec2 dimensions = overlay->getSize(); diff --git a/interface/src/ui/overlays/OverlaysPayload.cpp b/interface/src/ui/overlays/OverlaysPayload.cpp index 40d70d5348..8d3e514a0f 100644 --- a/interface/src/ui/overlays/OverlaysPayload.cpp +++ b/interface/src/ui/overlays/OverlaysPayload.cpp @@ -68,7 +68,7 @@ namespace render { if (overlay->getAnchor() == Overlay::MY_AVATAR) { auto batch = args->_batch; auto avatar = DependencyManager::get()->getMyAvatar(); - glm::quat myAvatarRotation = avatar->getOrientation(); + glm::quat myAvatarRotation = avatar->getWorldOrientation(); glm::vec3 myAvatarPosition = avatar->getWorldPosition(); float angle = glm::degrees(glm::angle(myAvatarRotation)); glm::vec3 axis = glm::axis(myAvatarRotation); diff --git a/interface/src/ui/overlays/Planar3DOverlay.cpp b/interface/src/ui/overlays/Planar3DOverlay.cpp index ae5e0f32d0..2cbaf31ff1 100644 --- a/interface/src/ui/overlays/Planar3DOverlay.cpp +++ b/interface/src/ui/overlays/Planar3DOverlay.cpp @@ -69,7 +69,7 @@ QVariant Planar3DOverlay::getProperty(const QString& property) { bool Planar3DOverlay::findRayIntersection(const glm::vec3& origin, const glm::vec3& direction, float& distance, BoxFace& face, glm::vec3& surfaceNormal) { // FIXME - face and surfaceNormal not being returned - return findRayRectangleIntersection(origin, direction, getRotation(), getWorldPosition(), getDimensions(), distance); + return findRayRectangleIntersection(origin, direction, getWorldOrientation(), getWorldPosition(), getDimensions(), distance); } Transform Planar3DOverlay::evalRenderTransform() { diff --git a/interface/src/ui/overlays/Rectangle3DOverlay.cpp b/interface/src/ui/overlays/Rectangle3DOverlay.cpp index 2010b00d4d..8468670637 100644 --- a/interface/src/ui/overlays/Rectangle3DOverlay.cpp +++ b/interface/src/ui/overlays/Rectangle3DOverlay.cpp @@ -61,7 +61,7 @@ void Rectangle3DOverlay::render(RenderArgs* args) { glm::vec3 position = getWorldPosition(); glm::vec2 dimensions = getDimensions(); glm::vec2 halfDimensions = dimensions * 0.5f; - glm::quat rotation = getRotation(); + glm::quat rotation = getWorldOrientation(); auto batch = args->_batch; diff --git a/interface/src/ui/overlays/Shape3DOverlay.cpp b/interface/src/ui/overlays/Shape3DOverlay.cpp index 7e9f44ef1d..73bb701ea7 100644 --- a/interface/src/ui/overlays/Shape3DOverlay.cpp +++ b/interface/src/ui/overlays/Shape3DOverlay.cpp @@ -123,7 +123,7 @@ Transform Shape3DOverlay::evalRenderTransform() { // TODO: handle registration point?? glm::vec3 position = getWorldPosition(); glm::vec3 dimensions = getDimensions(); - glm::quat rotation = getRotation(); + glm::quat rotation = getWorldOrientation(); Transform transform; transform.setScale(dimensions); diff --git a/interface/src/ui/overlays/Volume3DOverlay.cpp b/interface/src/ui/overlays/Volume3DOverlay.cpp index 4e685bed0e..2bbbda151f 100644 --- a/interface/src/ui/overlays/Volume3DOverlay.cpp +++ b/interface/src/ui/overlays/Volume3DOverlay.cpp @@ -20,7 +20,7 @@ Volume3DOverlay::Volume3DOverlay(const Volume3DOverlay* volume3DOverlay) : AABox Volume3DOverlay::getBounds() const { auto extents = Extents{_localBoundingBox}; - extents.rotate(getRotation()); + extents.rotate(getWorldOrientation()); extents.shiftBy(getWorldPosition()); return AABox(extents); diff --git a/interface/src/ui/overlays/Web3DOverlay.cpp b/interface/src/ui/overlays/Web3DOverlay.cpp index 5d8e433615..6d87bc8994 100644 --- a/interface/src/ui/overlays/Web3DOverlay.cpp +++ b/interface/src/ui/overlays/Web3DOverlay.cpp @@ -615,7 +615,7 @@ bool Web3DOverlay::findRayIntersection(const glm::vec3& origin, const glm::vec3& // Don't call applyTransformTo() or setTransform() here because this code runs too frequently. // Produce the dimensions of the overlay based on the image's aspect ratio and the overlay's scale. - return findRayRectangleIntersection(origin, direction, getRotation(), getWorldPosition(), getSize(), distance); + return findRayRectangleIntersection(origin, direction, getWorldOrientation(), getWorldPosition(), getSize(), distance); } Web3DOverlay* Web3DOverlay::createClone() const { diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp index 67efeda90d..60c88d435a 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp +++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp @@ -456,11 +456,11 @@ void Avatar::measureMotionDerivatives(float deltaTime) { setVelocity(velocity); // angular - glm::quat orientation = getOrientation(); + glm::quat orientation = getWorldOrientation(); glm::quat delta = glm::inverse(_lastOrientation) * orientation; glm::vec3 angularVelocity = glm::axis(delta) * glm::angle(delta) * invDeltaTime; setAngularVelocity(angularVelocity); - _lastOrientation = getOrientation(); + _lastOrientation = getWorldOrientation(); } enum TextRendererType { @@ -722,7 +722,7 @@ void Avatar::simulateAttachments(float deltaTime) { if (attachment.isSoft) { // soft attachments do not have transform offsets model->setTranslation(getWorldPosition()); - model->setRotation(getOrientation() * Quaternions::Y_180); + model->setRotation(getWorldOrientation() * Quaternions::Y_180); model->simulate(deltaTime); } else { if (_skeletonModel->getJointPositionInWorldFrame(jointIndex, jointPosition) && @@ -902,7 +902,7 @@ glm::vec3 Avatar::getSkeletonPosition() const { // The avatar is rotated PI about the yAxis, so we have to correct for it // to get the skeleton offset contribution in the world-frame. const glm::quat FLIP = glm::angleAxis(PI, glm::vec3(0.0f, 1.0f, 0.0f)); - return getWorldPosition() + getOrientation() * FLIP * _skeletonOffset; + return getWorldPosition() + getWorldOrientation() * FLIP * _skeletonOffset; } QVector Avatar::getJointRotations() const { @@ -1473,11 +1473,11 @@ glm::quat Avatar::getUncachedRightPalmRotation() const { void Avatar::setPositionViaScript(const glm::vec3& position) { setWorldPosition(position); - updateAttitude(getOrientation()); + updateAttitude(getWorldOrientation()); } void Avatar::setOrientationViaScript(const glm::quat& orientation) { - setOrientation(orientation); + setWorldOrientation(orientation); updateAttitude(orientation); } diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.h b/libraries/avatars-renderer/src/avatars-renderer/Avatar.h index a5ec307c50..1bebcd5c71 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.h +++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.h @@ -318,8 +318,8 @@ protected: void fade(render::Transaction& transaction, render::Transition::Type type); - glm::vec3 getBodyRightDirection() const { return getOrientation() * IDENTITY_RIGHT; } - glm::vec3 getBodyUpDirection() const { return getOrientation() * IDENTITY_UP; } + glm::vec3 getBodyRightDirection() const { return getWorldOrientation() * IDENTITY_RIGHT; } + glm::vec3 getBodyUpDirection() const { return getWorldOrientation() * IDENTITY_UP; } void measureMotionDerivatives(float deltaTime); float getSkeletonHeight() const; diff --git a/libraries/avatars-renderer/src/avatars-renderer/Head.cpp b/libraries/avatars-renderer/src/avatars-renderer/Head.cpp index b8a559027b..256b3bf8a6 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Head.cpp +++ b/libraries/avatars-renderer/src/avatars-renderer/Head.cpp @@ -253,7 +253,7 @@ void Head::setScale (float scale) { } glm::quat Head::getFinalOrientationInWorldFrame() const { - return _owningAvatar->getOrientation() * getFinalOrientationInLocalFrame(); + return _owningAvatar->getWorldOrientation() * getFinalOrientationInLocalFrame(); } glm::quat Head::getFinalOrientationInLocalFrame() const { diff --git a/libraries/avatars-renderer/src/avatars-renderer/SkeletonModel.cpp b/libraries/avatars-renderer/src/avatars-renderer/SkeletonModel.cpp index eaa62ecb0a..04b865fa03 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/SkeletonModel.cpp +++ b/libraries/avatars-renderer/src/avatars-renderer/SkeletonModel.cpp @@ -127,7 +127,7 @@ void SkeletonModel::updateAttitude(const glm::quat& orientation) { // Called by Avatar::simulate after it has set the joint states (fullUpdate true if changed), // but just before head has been simulated. void SkeletonModel::simulate(float deltaTime, bool fullUpdate) { - updateAttitude(_owningAvatar->getOrientation()); + updateAttitude(_owningAvatar->getWorldOrientation()); if (fullUpdate) { setBlendshapeCoefficients(_owningAvatar->getHead()->getSummedBlendshapeCoefficients()); diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index 2fe62a4ca2..27c19d4a21 100644 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -118,12 +118,12 @@ void AvatarData::setTargetScale(float targetScale) { } glm::vec3 AvatarData::getHandPosition() const { - return getOrientation() * _handPosition + getWorldPosition(); + return getWorldOrientation() * _handPosition + getWorldPosition(); } void AvatarData::setHandPosition(const glm::vec3& handPosition) { // store relative to position/orientation - _handPosition = glm::inverse(getOrientation()) * (handPosition - getWorldPosition()); + _handPosition = glm::inverse(getWorldOrientation()) * (handPosition - getWorldPosition()); } void AvatarData::lazyInitHeadData() const { @@ -1900,7 +1900,7 @@ void registerAvatarTypes(QScriptEngine* engine) { void AvatarData::setRecordingBasis(std::shared_ptr recordingBasis) { if (!recordingBasis) { recordingBasis = std::make_shared(); - recordingBasis->setRotation(getOrientation()); + recordingBasis->setRotation(getWorldOrientation()); recordingBasis->setTranslation(getWorldPosition()); // TODO: find a different way to record/playback the Scale of the avatar //recordingBasis->setScale(getTargetScale()); @@ -2066,7 +2066,7 @@ void AvatarData::fromJson(const QJsonObject& json, bool useFrameSkeleton) { setWorldPosition(currentBasis->getTranslation()); orientation = currentBasis->getRotation(); } - setOrientation(orientation); + setWorldOrientation(orientation); updateAttitude(orientation); // Do after avatar orientation because head look-at needs avatar orientation. @@ -2153,36 +2153,36 @@ void AvatarData::fromFrame(const QByteArray& frameData, AvatarData& result, bool } float AvatarData::getBodyYaw() const { - glm::vec3 eulerAngles = glm::degrees(safeEulerAngles(getOrientation())); + glm::vec3 eulerAngles = glm::degrees(safeEulerAngles(getWorldOrientation())); return eulerAngles.y; } void AvatarData::setBodyYaw(float bodyYaw) { - glm::vec3 eulerAngles = glm::degrees(safeEulerAngles(getOrientation())); + glm::vec3 eulerAngles = glm::degrees(safeEulerAngles(getWorldOrientation())); eulerAngles.y = bodyYaw; - setOrientation(glm::quat(glm::radians(eulerAngles))); + setWorldOrientation(glm::quat(glm::radians(eulerAngles))); } float AvatarData::getBodyPitch() const { - glm::vec3 eulerAngles = glm::degrees(safeEulerAngles(getOrientation())); + glm::vec3 eulerAngles = glm::degrees(safeEulerAngles(getWorldOrientation())); return eulerAngles.x; } void AvatarData::setBodyPitch(float bodyPitch) { - glm::vec3 eulerAngles = glm::degrees(safeEulerAngles(getOrientation())); + glm::vec3 eulerAngles = glm::degrees(safeEulerAngles(getWorldOrientation())); eulerAngles.x = bodyPitch; - setOrientation(glm::quat(glm::radians(eulerAngles))); + setWorldOrientation(glm::quat(glm::radians(eulerAngles))); } float AvatarData::getBodyRoll() const { - glm::vec3 eulerAngles = glm::degrees(safeEulerAngles(getOrientation())); + glm::vec3 eulerAngles = glm::degrees(safeEulerAngles(getWorldOrientation())); return eulerAngles.z; } void AvatarData::setBodyRoll(float bodyRoll) { - glm::vec3 eulerAngles = glm::degrees(safeEulerAngles(getOrientation())); + glm::vec3 eulerAngles = glm::degrees(safeEulerAngles(getWorldOrientation())); eulerAngles.z = bodyRoll; - setOrientation(glm::quat(glm::radians(eulerAngles))); + setWorldOrientation(glm::quat(glm::radians(eulerAngles))); } void AvatarData::setPositionViaScript(const glm::vec3& position) { @@ -2190,7 +2190,7 @@ void AvatarData::setPositionViaScript(const glm::vec3& position) { } void AvatarData::setOrientationViaScript(const glm::quat& orientation) { - SpatiallyNestable::setOrientation(orientation); + SpatiallyNestable::setWorldOrientation(orientation); } glm::quat AvatarData::getAbsoluteJointRotationInObjectFrame(int index) const { diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index 5ce4395baa..61e27a482e 100644 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -359,7 +359,7 @@ class AvatarData : public QObject, public SpatiallyNestable { Q_PROPERTY(float bodyPitch READ getBodyPitch WRITE setBodyPitch) Q_PROPERTY(float bodyRoll READ getBodyRoll WRITE setBodyRoll) - Q_PROPERTY(glm::quat orientation READ getOrientation WRITE setOrientationViaScript) + Q_PROPERTY(glm::quat orientation READ getWorldOrientation WRITE setOrientationViaScript) Q_PROPERTY(glm::quat headOrientation READ getHeadOrientation WRITE setHeadOrientation) Q_PROPERTY(float headPitch READ getHeadPitch WRITE setHeadPitch) Q_PROPERTY(float headYaw READ getHeadYaw WRITE setHeadYaw) diff --git a/libraries/avatars/src/HeadData.cpp b/libraries/avatars/src/HeadData.cpp index 6ff36331cf..4119d7a459 100644 --- a/libraries/avatars/src/HeadData.cpp +++ b/libraries/avatars/src/HeadData.cpp @@ -49,11 +49,11 @@ void HeadData::setRawOrientation(const glm::quat& q) { glm::quat HeadData::getOrientation() const { - return _owningAvatar->getOrientation() * getRawOrientation(); + return _owningAvatar->getWorldOrientation() * getRawOrientation(); } void HeadData::setHeadOrientation(const glm::quat& orientation) { - glm::quat bodyOrientation = _owningAvatar->getOrientation(); + glm::quat bodyOrientation = _owningAvatar->getWorldOrientation(); glm::vec3 eulers = glm::degrees(safeEulerAngles(glm::inverse(bodyOrientation) * orientation)); _basePitch = eulers.x; _baseYaw = eulers.y; @@ -62,10 +62,10 @@ void HeadData::setHeadOrientation(const glm::quat& orientation) { void HeadData::setOrientation(const glm::quat& orientation) { // rotate body about vertical axis - glm::quat bodyOrientation = _owningAvatar->getOrientation(); + glm::quat bodyOrientation = _owningAvatar->getWorldOrientation(); glm::vec3 newForward = glm::inverse(bodyOrientation) * (orientation * IDENTITY_FORWARD); bodyOrientation = bodyOrientation * glm::angleAxis(atan2f(-newForward.x, -newForward.z), glm::vec3(0.0f, 1.0f, 0.0f)); - _owningAvatar->setOrientation(bodyOrientation); + _owningAvatar->setWorldOrientation(bodyOrientation); // the rest goes to the head setHeadOrientation(orientation); @@ -154,7 +154,7 @@ QJsonObject HeadData::toJson() const { } auto lookat = getLookAtPosition(); if (lookat != vec3()) { - vec3 relativeLookAt = glm::inverse(_owningAvatar->getOrientation()) * + vec3 relativeLookAt = glm::inverse(_owningAvatar->getWorldOrientation()) * (getLookAtPosition() - _owningAvatar->getWorldPosition()); headJson[JSON_AVATAR_HEAD_LOOKAT] = toJsonValue(relativeLookAt); } @@ -185,7 +185,7 @@ void HeadData::fromJson(const QJsonObject& json) { if (json.contains(JSON_AVATAR_HEAD_LOOKAT)) { auto relativeLookAt = vec3FromJsonValue(json[JSON_AVATAR_HEAD_LOOKAT]); if (glm::length2(relativeLookAt) > 0.01f) { - setLookAtPosition((_owningAvatar->getOrientation() * relativeLookAt) + _owningAvatar->getWorldPosition()); + setLookAtPosition((_owningAvatar->getWorldOrientation() * relativeLookAt) + _owningAvatar->getWorldPosition()); } } diff --git a/libraries/avatars/src/ScriptAvatarData.cpp b/libraries/avatars/src/ScriptAvatarData.cpp index cac3f600ca..6a57bab0b7 100644 --- a/libraries/avatars/src/ScriptAvatarData.cpp +++ b/libraries/avatars/src/ScriptAvatarData.cpp @@ -66,7 +66,7 @@ float ScriptAvatarData::getBodyRoll() const { } glm::quat ScriptAvatarData::getOrientation() const { if (AvatarSharedPointer sharedAvatarData = _avatarData.lock()) { - return sharedAvatarData->getOrientation(); + return sharedAvatarData->getWorldOrientation(); } else { return glm::quat(); } diff --git a/libraries/entities-renderer/src/EntityTreeRenderer.cpp b/libraries/entities-renderer/src/EntityTreeRenderer.cpp index a9277ff19a..e381d2cc38 100644 --- a/libraries/entities-renderer/src/EntityTreeRenderer.cpp +++ b/libraries/entities-renderer/src/EntityTreeRenderer.cpp @@ -510,7 +510,7 @@ static glm::vec2 projectOntoEntityXYPlane(EntityItemPointer entity, const PickRa if (entity) { glm::vec3 entityPosition = entity->getWorldPosition(); - glm::quat entityRotation = entity->getRotation(); + glm::quat entityRotation = entity->getWorldOrientation(); glm::vec3 entityDimensions = entity->getDimensions(); glm::vec3 entityRegistrationPoint = entity->getRegistrationPoint(); diff --git a/libraries/entities-renderer/src/RenderableLightEntityItem.cpp b/libraries/entities-renderer/src/RenderableLightEntityItem.cpp index e00cd98e65..696d7ab8db 100644 --- a/libraries/entities-renderer/src/RenderableLightEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableLightEntityItem.cpp @@ -29,7 +29,7 @@ void LightEntityRenderer::doRenderUpdateAsynchronousTyped(const TypedEntityPoint auto light = lightPayload.editLight(); light->setPosition(entity->getWorldPosition()); - light->setOrientation(entity->getRotation()); + light->setOrientation(entity->getWorldOrientation()); bool success; lightPayload.editBound() = entity->getAABox(success); diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index 67b7b175b7..bcc4c27bfc 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -123,7 +123,7 @@ void RenderableModelEntityItem::doInitialModelSimulation() { // now recalculate the bounds and registration model->setScaleToFit(true, getDimensions()); model->setSnapModelToRegistrationPoint(true, getRegistrationPoint()); - model->setRotation(getRotation()); + model->setRotation(getWorldOrientation()); model->setTranslation(getWorldPosition()); if (_needsInitialSimulation) { diff --git a/libraries/entities-renderer/src/RenderablePolyLineEntityItem.cpp b/libraries/entities-renderer/src/RenderablePolyLineEntityItem.cpp index e4706fa15e..fbf85fa8c2 100644 --- a/libraries/entities-renderer/src/RenderablePolyLineEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderablePolyLineEntityItem.cpp @@ -155,7 +155,7 @@ void PolyLineEntityRenderer::doRenderUpdateAsynchronousTyped(const TypedEntityPo _polylineTransform = Transform(); _polylineTransform.setTranslation(entity->getWorldPosition()); - _polylineTransform.setRotation(entity->getRotation()); + _polylineTransform.setRotation(entity->getWorldOrientation()); if (pointsChanged) { _lastPoints = entity->getLinePoints(); diff --git a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp index fd7407287d..356bf3a69c 100644 --- a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp @@ -247,7 +247,7 @@ glm::mat4 RenderablePolyVoxEntityItem::localToVoxelMatrix() const { } glm::mat4 RenderablePolyVoxEntityItem::voxelToWorldMatrix() const { - glm::mat4 rotation = glm::mat4_cast(getRotation()); + glm::mat4 rotation = glm::mat4_cast(getWorldOrientation()); glm::mat4 translation = glm::translate(getWorldPosition()); return translation * rotation * voxelToLocalMatrix(); } diff --git a/libraries/entities-renderer/src/RenderableShapeEntityItem.cpp b/libraries/entities-renderer/src/RenderableShapeEntityItem.cpp index dffde3386b..3524709395 100644 --- a/libraries/entities-renderer/src/RenderableShapeEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableShapeEntityItem.cpp @@ -83,7 +83,7 @@ void ShapeEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& sce _shape = entity->getShape(); _position = entity->getWorldPosition(); _dimensions = entity->getDimensions(); - _orientation = entity->getOrientation(); + _orientation = entity->getWorldOrientation(); _renderTransform = getModelTransform(); if (_shape == entity::Sphere) { diff --git a/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp b/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp index e56e692890..a077307c61 100644 --- a/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp @@ -201,7 +201,7 @@ void ZoneEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& scen entity->resetRenderingPropertiesChanged(); _lastPosition = entity->getWorldPosition(); - _lastRotation = entity->getRotation(); + _lastRotation = entity->getWorldOrientation(); _lastDimensions = entity->getDimensions(); _keyLightProperties = entity->getKeyLightProperties(); @@ -277,7 +277,7 @@ bool ZoneEntityRenderer::needsRenderUpdateFromTypedEntity(const TypedEntityPoint if (entity->getDimensions() != _lastDimensions) { return true; } - if (entity->getRotation() != _lastRotation) { + if (entity->getWorldOrientation() != _lastRotation) { return true; } diff --git a/libraries/entities/src/EntityItem.cpp b/libraries/entities/src/EntityItem.cpp index e1ff932915..2d90a08e1c 100644 --- a/libraries/entities/src/EntityItem.cpp +++ b/libraries/entities/src/EntityItem.cpp @@ -1169,7 +1169,7 @@ bool EntityItem::wantTerseEditLogging() const { glm::mat4 EntityItem::getEntityToWorldMatrix() const { glm::mat4 translation = glm::translate(getWorldPosition()); - glm::mat4 rotation = glm::mat4_cast(getRotation()); + glm::mat4 rotation = glm::mat4_cast(getWorldOrientation()); glm::mat4 scale = glm::scale(getDimensions()); glm::mat4 registration = glm::translate(ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - getRegistrationPoint()); return translation * rotation * scale * registration; @@ -1464,7 +1464,7 @@ AACube EntityItem::getMinimumAACube(bool& success) const { glm::vec3 unrotatedMinRelativeToEntity = - (dimensions * _registrationPoint); glm::vec3 unrotatedMaxRelativeToEntity = dimensions * (glm::vec3(1.0f, 1.0f, 1.0f) - _registrationPoint); Extents extents = { unrotatedMinRelativeToEntity, unrotatedMaxRelativeToEntity }; - extents.rotate(getRotation()); + extents.rotate(getWorldOrientation()); // shift the extents to be relative to the position/registration point extents.shiftBy(position); @@ -1494,7 +1494,7 @@ AABox EntityItem::getAABox(bool& success) const { glm::vec3 unrotatedMinRelativeToEntity = - (dimensions * _registrationPoint); glm::vec3 unrotatedMaxRelativeToEntity = dimensions * (glm::vec3(1.0f, 1.0f, 1.0f) - _registrationPoint); Extents extents = { unrotatedMinRelativeToEntity, unrotatedMaxRelativeToEntity }; - extents.rotate(getRotation()); + extents.rotate(getWorldOrientation()); // shift the extents to be relative to the position/registration point extents.shiftBy(position); @@ -2384,7 +2384,7 @@ void EntityItem::globalizeProperties(EntityItemProperties& properties, const QSt auto globalPosition = getWorldPosition(success); if (success) { properties.setPosition(globalPosition + offset); - properties.setRotation(getRotation()); + properties.setRotation(getWorldOrientation()); properties.setDimensions(getDimensions()); // Should we do velocities and accelerations, too? This could end up being quite involved, which is why the method exists. } else { diff --git a/libraries/entities/src/EntityScriptingInterface.cpp b/libraries/entities/src/EntityScriptingInterface.cpp index 329a616609..9d532052fd 100644 --- a/libraries/entities/src/EntityScriptingInterface.cpp +++ b/libraries/entities/src/EntityScriptingInterface.cpp @@ -388,7 +388,7 @@ QUuid EntityScriptingInterface::editEntity(QUuid id, const EntityItemProperties& properties.setPosition(entity->getWorldPosition()); } if (!scriptSideProperties.localRotationChanged() && !scriptSideProperties.rotationChanged()) { - properties.setRotation(entity->getOrientation()); + properties.setRotation(entity->getWorldOrientation()); } } properties = convertLocationFromScriptSemantics(properties); @@ -1798,7 +1798,7 @@ glm::mat4 EntityScriptingInterface::getEntityTransform(const QUuid& entityID) { EntityItemPointer entity = _entityTree->findEntityByEntityItemID(EntityItemID(entityID)); if (entity) { glm::mat4 translation = glm::translate(entity->getWorldPosition()); - glm::mat4 rotation = glm::mat4_cast(entity->getRotation()); + glm::mat4 rotation = glm::mat4_cast(entity->getWorldOrientation()); result = translation * rotation; } }); diff --git a/libraries/entities/src/EntityTreeElement.cpp b/libraries/entities/src/EntityTreeElement.cpp index 4b588fc23c..7e2958583d 100644 --- a/libraries/entities/src/EntityTreeElement.cpp +++ b/libraries/entities/src/EntityTreeElement.cpp @@ -662,7 +662,7 @@ bool EntityTreeElement::findDetailedRayIntersection(const glm::vec3& origin, con } // extents is the entity relative, scaled, centered extents of the entity - glm::mat4 rotation = glm::mat4_cast(entity->getRotation()); + glm::mat4 rotation = glm::mat4_cast(entity->getWorldOrientation()); glm::mat4 translation = glm::translate(entity->getWorldPosition()); glm::mat4 entityToWorldMatrix = translation * rotation; glm::mat4 worldToEntityMatrix = glm::inverse(entityToWorldMatrix); @@ -787,7 +787,7 @@ void EntityTreeElement::getEntities(const glm::vec3& searchPosition, float searc } else { // determine the worldToEntityMatrix that doesn't include scale because // we're going to use the registration aware aa box in the entity frame - glm::mat4 rotation = glm::mat4_cast(entity->getRotation()); + glm::mat4 rotation = glm::mat4_cast(entity->getWorldOrientation()); glm::mat4 translation = glm::translate(entity->getWorldPosition()); glm::mat4 entityToWorldMatrix = translation * rotation; glm::mat4 worldToEntityMatrix = glm::inverse(entityToWorldMatrix); diff --git a/libraries/entities/src/PolyVoxEntityItem.cpp b/libraries/entities/src/PolyVoxEntityItem.cpp index abcc075bcf..b08d94ca7e 100644 --- a/libraries/entities/src/PolyVoxEntityItem.cpp +++ b/libraries/entities/src/PolyVoxEntityItem.cpp @@ -411,7 +411,7 @@ glm::mat4 PolyVoxEntityItem::localToVoxelMatrix() const { } glm::mat4 PolyVoxEntityItem::voxelToWorldMatrix() const { - glm::mat4 rotation = glm::mat4_cast(getRotation()); + glm::mat4 rotation = glm::mat4_cast(getWorldOrientation()); glm::mat4 translation = glm::translate(getWorldPosition()); return translation * rotation * voxelToLocalMatrix(); } diff --git a/libraries/entities/src/TextEntityItem.cpp b/libraries/entities/src/TextEntityItem.cpp index 0f113248f7..67e83ab3fd 100644 --- a/libraries/entities/src/TextEntityItem.cpp +++ b/libraries/entities/src/TextEntityItem.cpp @@ -134,7 +134,7 @@ bool TextEntityItem::findDetailedRayIntersection(const glm::vec3& origin, const void** intersectedObject, bool precisionPicking) const { glm::vec3 dimensions = getDimensions(); glm::vec2 xyDimensions(dimensions.x, dimensions.y); - glm::quat rotation = getRotation(); + glm::quat rotation = getWorldOrientation(); glm::vec3 position = getWorldPosition() + rotation * (dimensions * (ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - getRegistrationPoint())); diff --git a/libraries/entities/src/WebEntityItem.cpp b/libraries/entities/src/WebEntityItem.cpp index 91137431fe..5ee630d8ed 100644 --- a/libraries/entities/src/WebEntityItem.cpp +++ b/libraries/entities/src/WebEntityItem.cpp @@ -111,7 +111,7 @@ bool WebEntityItem::findDetailedRayIntersection(const glm::vec3& origin, const g void** intersectedObject, bool precisionPicking) const { glm::vec3 dimensions = getDimensions(); glm::vec2 xyDimensions(dimensions.x, dimensions.y); - glm::quat rotation = getRotation(); + glm::quat rotation = getWorldOrientation(); glm::vec3 position = getWorldPosition() + rotation * (dimensions * (ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - getRegistrationPoint())); if (findRayRectangleIntersection(origin, direction, rotation, position, xyDimensions, distance)) { diff --git a/libraries/physics/src/EntityMotionState.cpp b/libraries/physics/src/EntityMotionState.cpp index be56bffb18..da98e838b0 100644 --- a/libraries/physics/src/EntityMotionState.cpp +++ b/libraries/physics/src/EntityMotionState.cpp @@ -109,7 +109,7 @@ void EntityMotionState::handleDeactivation() { // and also to RigidBody btTransform worldTrans; worldTrans.setOrigin(glmToBullet(_entity->getWorldPosition())); - worldTrans.setRotation(glmToBullet(_entity->getRotation())); + worldTrans.setRotation(glmToBullet(_entity->getWorldOrientation())); _body->setWorldTransform(worldTrans); // no need to update velocities... should already be zero } @@ -246,7 +246,7 @@ void EntityMotionState::getWorldTransform(btTransform& worldTrans) const { _accelerationNearlyGravityCount = (uint8_t)(-1); } worldTrans.setOrigin(glmToBullet(getObjectPosition())); - worldTrans.setRotation(glmToBullet(_entity->getRotation())); + worldTrans.setRotation(glmToBullet(_entity->getWorldOrientation())); } // This callback is invoked by the physics simulation at the end of each simulation step... @@ -264,7 +264,7 @@ void EntityMotionState::setWorldTransform(const btTransform& worldTrans) { qCDebug(physics) << "EntityMotionState::setWorldTransform setPosition failed" << _entity->getID(); } bool orientationSuccess; - _entity->setOrientation(bulletToGLM(worldTrans.getRotation()), orientationSuccess, false); + _entity->setWorldOrientation(bulletToGLM(worldTrans.getRotation()), orientationSuccess, false); if (!orientationSuccess) { static QString repeatedMessage = LogHandler::getInstance().addRepeatedMessageRegex("EntityMotionState::setWorldTransform " diff --git a/libraries/physics/src/EntityMotionState.h b/libraries/physics/src/EntityMotionState.h index 839309e60e..2bb692da81 100644 --- a/libraries/physics/src/EntityMotionState.h +++ b/libraries/physics/src/EntityMotionState.h @@ -58,7 +58,7 @@ public: virtual float getObjectAngularDamping() const override { return _entity->getAngularDamping(); } virtual glm::vec3 getObjectPosition() const override { return _entity->getWorldPosition() - ObjectMotionState::getWorldOffset(); } - virtual glm::quat getObjectRotation() const override { return _entity->getRotation(); } + virtual glm::quat getObjectRotation() const override { return _entity->getWorldOrientation(); } virtual glm::vec3 getObjectLinearVelocity() const override { return _entity->getVelocity(); } virtual glm::vec3 getObjectAngularVelocity() const override { return _entity->getAngularVelocity(); } virtual glm::vec3 getObjectGravity() const override { return _entity->getGravity(); } diff --git a/libraries/physics/src/ObjectActionTractor.cpp b/libraries/physics/src/ObjectActionTractor.cpp index 6ab7daae7f..629d8baefe 100644 --- a/libraries/physics/src/ObjectActionTractor.cpp +++ b/libraries/physics/src/ObjectActionTractor.cpp @@ -54,8 +54,8 @@ bool ObjectActionTractor::getTarget(float deltaTimeStep, glm::quat& rotation, gl if (!_otherID.isNull()) { if (other) { - rotation = _desiredRotationalTarget * other->getRotation(); - position = other->getRotation() * _desiredPositionalTarget + other->getWorldPosition(); + rotation = _desiredRotationalTarget * other->getWorldOrientation(); + position = other->getWorldOrientation() * _desiredPositionalTarget + other->getWorldPosition(); } else { // we should have an "other" but can't find it, so disable the tractor. linearTimeScale = FLT_MAX; diff --git a/libraries/shared/src/SpatiallyNestable.cpp b/libraries/shared/src/SpatiallyNestable.cpp index 9713ce8a17..a931a524fd 100644 --- a/libraries/shared/src/SpatiallyNestable.cpp +++ b/libraries/shared/src/SpatiallyNestable.cpp @@ -420,13 +420,13 @@ void SpatiallyNestable::setWorldPosition(const glm::vec3& position) { #endif } -glm::quat SpatiallyNestable::getOrientation(bool& success) const { +glm::quat SpatiallyNestable::getWorldOrientation(bool& success) const { return getTransform(success).getRotation(); } -glm::quat SpatiallyNestable::getOrientation() const { +glm::quat SpatiallyNestable::getWorldOrientation() const { bool success; - auto result = getOrientation(success); + auto result = getWorldOrientation(success); #ifdef WANT_DEBUG if (!success) { qCDebug(shared) << "Warning -- getOrientation failed" << getID(); @@ -435,11 +435,11 @@ glm::quat SpatiallyNestable::getOrientation() const { return result; } -glm::quat SpatiallyNestable::getOrientation(int jointIndex, bool& success) const { +glm::quat SpatiallyNestable::getWorldOrientation(int jointIndex, bool& success) const { return getTransform(jointIndex, success).getRotation(); } -void SpatiallyNestable::setOrientation(const glm::quat& orientation, bool& success, bool tellPhysics) { +void SpatiallyNestable::setWorldOrientation(const glm::quat& orientation, bool& success, bool tellPhysics) { // guard against introducing NaN into the transform if (isNaN(orientation)) { success = false; @@ -463,9 +463,9 @@ void SpatiallyNestable::setOrientation(const glm::quat& orientation, bool& succe } } -void SpatiallyNestable::setOrientation(const glm::quat& orientation) { +void SpatiallyNestable::setWorldOrientation(const glm::quat& orientation) { bool success; - setOrientation(orientation, success); + setWorldOrientation(orientation, success); #ifdef WANT_DEBUG if (!success) { qCDebug(shared) << "Warning -- setOrientation failed" << getID(); diff --git a/libraries/shared/src/SpatiallyNestable.h b/libraries/shared/src/SpatiallyNestable.h index 6b082fed82..929c2d53f2 100644 --- a/libraries/shared/src/SpatiallyNestable.h +++ b/libraries/shared/src/SpatiallyNestable.h @@ -83,15 +83,11 @@ public: virtual void setWorldPosition(const glm::vec3& position, bool& success, bool tellPhysics = true); virtual void setWorldPosition(const glm::vec3& position); - virtual glm::quat getOrientation(bool& success) const; - virtual glm::quat getOrientation() const; - virtual glm::quat getOrientation(int jointIndex, bool& success) const; - virtual void setOrientation(const glm::quat& orientation, bool& success, bool tellPhysics = true); - virtual void setOrientation(const glm::quat& orientation); - - // these are here because some older code uses rotation rather than orientation - virtual const glm::quat getRotation() const { return getOrientation(); } - virtual void setRotation(glm::quat orientation) { setOrientation(orientation); } + virtual glm::quat getWorldOrientation(bool& success) const; + virtual glm::quat getWorldOrientation() const; + virtual glm::quat getWorldOrientation(int jointIndex, bool& success) const; + virtual void setWorldOrientation(const glm::quat& orientation, bool& success, bool tellPhysics = true); + virtual void setWorldOrientation(const glm::quat& orientation); virtual glm::vec3 getVelocity(bool& success) const; virtual glm::vec3 getVelocity() const; From 8d5c95b1d6212957677d72a2cc23950a72da810a Mon Sep 17 00:00:00 2001 From: luiscuenca Date: Mon, 30 Oct 2017 16:47:59 -0700 Subject: [PATCH 11/17] Various corrections --- libraries/ui/src/ui/OffscreenQmlSurface.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/libraries/ui/src/ui/OffscreenQmlSurface.cpp b/libraries/ui/src/ui/OffscreenQmlSurface.cpp index 6632b669e3..b7f717db04 100644 --- a/libraries/ui/src/ui/OffscreenQmlSurface.cpp +++ b/libraries/ui/src/ui/OffscreenQmlSurface.cpp @@ -24,9 +24,9 @@ #include #include #include -#include -#include -#include +#include +#include +#include #include #include @@ -634,10 +634,11 @@ void OffscreenQmlSurface::forceHtmlAudioOutputDeviceUpdate() { void OffscreenQmlSurface::forceQmlAudioOutputDeviceUpdate() { if (QThread::currentThread() != qApp->thread()) { QMetaObject::invokeMethod(this, "forceQmlAudioOutputDeviceUpdate", Qt::QueuedConnection); - } - else { + } else { int waitForAudioQmlMs = 500; - QTimer::singleShot(waitForAudioQmlMs, this, SLOT(updateQmlAudio())); + QTimer::singleShot(waitForAudioQmlMs, this, [this] { + updateQmlAudio(); + }); } } From c834cf1cf3f442be3ad34da09066e65e5a9e07cc Mon Sep 17 00:00:00 2001 From: luiscuenca Date: Wed, 1 Nov 2017 21:55:31 -0700 Subject: [PATCH 12/17] Comments and corrections --- libraries/ui/src/ui/OffscreenQmlSurface.cpp | 114 ++++++++++++-------- libraries/ui/src/ui/OffscreenQmlSurface.h | 1 - 2 files changed, 70 insertions(+), 45 deletions(-) diff --git a/libraries/ui/src/ui/OffscreenQmlSurface.cpp b/libraries/ui/src/ui/OffscreenQmlSurface.cpp index b7f717db04..8232c6a064 100644 --- a/libraries/ui/src/ui/OffscreenQmlSurface.cpp +++ b/libraries/ui/src/ui/OffscreenQmlSurface.cpp @@ -117,6 +117,69 @@ uint64_t uvec2ToUint64(const uvec2& v) { return result; } +// Class to handle changing QML audio output device using another thread +class AudioHandler : public QObject, QRunnable { + Q_OBJECT +public: + AudioHandler(QObject* container, const QString& deviceName, int runDelayMs = 0, QObject* parent = nullptr) : QObject(parent) { + _container = container; + _newTargetDevice = deviceName; + _runDelayMs = runDelayMs; + setAutoDelete(true); + QThreadPool::globalInstance()->start(this); + } + virtual ~AudioHandler() { + qDebug() << "Audio Handler Destroyed"; + } + void run() override { + if (_newTargetDevice.isEmpty()) { + return; + } + if (_runDelayMs > 0) { + QThread::msleep(_runDelayMs); + } + auto audioIO = DependencyManager::get(); + QString deviceName = audioIO->getActiveAudioDevice(QAudio::AudioOutput).deviceName(); + for (auto player : _container->findChildren()) { + auto mediaState = player->state(); + QMediaService *svc = player->service(); + if (nullptr == svc) { + return; + } + QAudioOutputSelectorControl *out = qobject_cast + (svc->requestControl(QAudioOutputSelectorControl_iid)); + if (nullptr == out) { + return; + } + QString deviceOuput; + auto outputs = out->availableOutputs(); + for (int i = 0; i < outputs.size(); i++) { + QString output = outputs[i]; + QString description = out->outputDescription(output); + if (description == deviceName) { + deviceOuput = output; + break; + } + } + out->setActiveOutput(deviceOuput); + svc->releaseControl(out); + // if multimedia was paused, it will start playing automatically after changing audio device + // this will reset it back to a paused state + if (mediaState == QMediaPlayer::State::PausedState) { + player->pause(); + } else if (mediaState == QMediaPlayer::State::StoppedState) { + player->stop(); + } + } + qDebug() << "QML Audio changed to " << deviceName; + } + +private: + QString _newTargetDevice; + QObject* _container; + int _runDelayMs; +}; + class OffscreenTextures { public: GLuint getNextTexture(const uvec2& size) { @@ -604,7 +667,7 @@ void OffscreenQmlSurface::create() { auto audioIO = DependencyManager::get(); connect(audioIO.data(), &AudioClient::deviceChanged, this, [&](QAudio::Mode mode, const QAudioDeviceInfo& device) { if (mode == QAudio::Mode::AudioOutput) { - QMetaObject::invokeMethod(this, "changeAudioOutputDevice", Qt::DirectConnection, Q_ARG(QString, device.deviceName())); + QMetaObject::invokeMethod(this, "changeAudioOutputDevice", Qt::QueuedConnection, Q_ARG(QString, device.deviceName())); } }); @@ -619,7 +682,7 @@ void OffscreenQmlSurface::create() { void OffscreenQmlSurface::changeAudioOutputDevice(const QString& deviceName, bool isHtmlUpdate) { if (_rootItem != nullptr && !isHtmlUpdate) { - QMetaObject::invokeMethod(this, "forceQmlAudioOutputDeviceUpdate", Qt::DirectConnection); + QMetaObject::invokeMethod(this, "forceQmlAudioOutputDeviceUpdate", Qt::QueuedConnection); } emit audioOutputDeviceChanged(deviceName); } @@ -627,7 +690,7 @@ void OffscreenQmlSurface::changeAudioOutputDevice(const QString& deviceName, boo void OffscreenQmlSurface::forceHtmlAudioOutputDeviceUpdate() { auto audioIO = DependencyManager::get(); QString deviceName = audioIO->getActiveAudioDevice(QAudio::AudioOutput).deviceName(); - QMetaObject::invokeMethod(this, "changeAudioOutputDevice", Qt::DirectConnection, + QMetaObject::invokeMethod(this, "changeAudioOutputDevice", Qt::QueuedConnection, Q_ARG(QString, deviceName), Q_ARG(bool, true)); } @@ -635,51 +698,14 @@ void OffscreenQmlSurface::forceQmlAudioOutputDeviceUpdate() { if (QThread::currentThread() != qApp->thread()) { QMetaObject::invokeMethod(this, "forceQmlAudioOutputDeviceUpdate", Qt::QueuedConnection); } else { + auto audioIO = DependencyManager::get(); + QString deviceName = audioIO->getActiveAudioDevice(QAudio::AudioOutput).deviceName(); int waitForAudioQmlMs = 500; - QTimer::singleShot(waitForAudioQmlMs, this, [this] { - updateQmlAudio(); - }); + // The audio device need to be change using oth + new AudioHandler(_rootItem, deviceName, waitForAudioQmlMs); } } -void OffscreenQmlSurface::updateQmlAudio() { - auto audioIO = DependencyManager::get(); - QString deviceName = audioIO->getActiveAudioDevice(QAudio::AudioOutput).deviceName(); - for (auto player : _rootItem->findChildren()) { - auto mediaState = player->state(); - QMediaService *svc = player->service(); - if (nullptr == svc) { - return; - } - QAudioOutputSelectorControl *out = qobject_cast - (svc->requestControl(QAudioOutputSelectorControl_iid)); - if (nullptr == out) { - return; - } - QString deviceOuput; - auto outputs = out->availableOutputs(); - for (int i = 0; i < outputs.size(); i++) { - QString output = outputs[i]; - QString description = out->outputDescription(output); - if (description == deviceName) { - deviceOuput = output; - break; - } - } - out->setActiveOutput(deviceOuput); - svc->releaseControl(out); - // if multimedia was paused, it will start playing automatically after changing audio device - // this will reset it back to a paused state - if (mediaState == QMediaPlayer::State::PausedState) { - player->pause(); - } - else if (mediaState == QMediaPlayer::State::StoppedState) { - player->stop(); - } - } - qDebug() << "QML Audio changed to " << deviceName; -} - static uvec2 clampSize(const uvec2& size, uint32_t maxDimension) { return glm::clamp(size, glm::uvec2(1), glm::uvec2(maxDimension)); } diff --git a/libraries/ui/src/ui/OffscreenQmlSurface.h b/libraries/ui/src/ui/OffscreenQmlSurface.h index 0d053b373d..2d64ae12b5 100644 --- a/libraries/ui/src/ui/OffscreenQmlSurface.h +++ b/libraries/ui/src/ui/OffscreenQmlSurface.h @@ -108,7 +108,6 @@ public slots: void changeAudioOutputDevice(const QString& deviceName, bool isHtmlUpdate = false); void forceHtmlAudioOutputDeviceUpdate(); void forceQmlAudioOutputDeviceUpdate(); - void updateQmlAudio(); signals: void audioOutputDeviceChanged(const QString& deviceName); From 53c6eeb58bdf5082bccf686fb91c0852b3cf1f43 Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Thu, 2 Nov 2017 15:58:50 -0700 Subject: [PATCH 13/17] updatePosition now setPosition --- libraries/entities/src/EntityItem.cpp | 6 +++--- libraries/entities/src/EntityItem.h | 3 +-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/libraries/entities/src/EntityItem.cpp b/libraries/entities/src/EntityItem.cpp index 2ab960ef81..e4f88f6856 100644 --- a/libraries/entities/src/EntityItem.cpp +++ b/libraries/entities/src/EntityItem.cpp @@ -735,7 +735,7 @@ int EntityItem::readEntityDataFromBuffer(const unsigned char* data, int bytesLef // reasons and the contract is that the client handles them in an idempotent manner. auto customUpdatePositionFromNetwork = [this, shouldUpdate, lastEdited](glm::vec3 value){ if (shouldUpdate(_lastUpdatedPositionTimestamp, value != _lastUpdatedPositionValue)) { - updatePosition(value); + setPosition(value); _lastUpdatedPositionTimestamp = lastEdited; _lastUpdatedPositionValue = value; } @@ -1316,7 +1316,7 @@ bool EntityItem::setProperties(const EntityItemProperties& properties) { // these affect TerseUpdate properties SET_ENTITY_PROPERTY_FROM_PROPERTIES(simulationOwner, setSimulationOwner); - SET_ENTITY_PROPERTY_FROM_PROPERTIES(position, updatePosition); + SET_ENTITY_PROPERTY_FROM_PROPERTIES(position, setPosition); SET_ENTITY_PROPERTY_FROM_PROPERTIES(rotation, setRotation); SET_ENTITY_PROPERTY_FROM_PROPERTIES(velocity, setVelocity); SET_ENTITY_PROPERTY_FROM_PROPERTIES(angularVelocity, setAngularVelocity); @@ -1691,7 +1691,7 @@ void EntityItem::setRegistrationPoint(const glm::vec3& value) { } } -void EntityItem::updatePosition(const glm::vec3& value) { +void EntityItem::setPosition(const glm::vec3& value) { if (getLocalPosition() != value) { setLocalPosition(value); diff --git a/libraries/entities/src/EntityItem.h b/libraries/entities/src/EntityItem.h index 80fe1b3352..a57e4fefda 100644 --- a/libraries/entities/src/EntityItem.h +++ b/libraries/entities/src/EntityItem.h @@ -347,8 +347,7 @@ public: virtual void setCollisionShape(const btCollisionShape* shape) {} - // updateFoo() methods to be used when changes need to be accumulated in the _dirtyFlags - void updatePosition(const glm::vec3& value); + void setPosition(const glm::vec3& value); virtual void setParentID(const QUuid& parentID); virtual void setRotation(glm::quat orientation); virtual void setVelocity(const glm::vec3& velocity); From b5199220ab459aaffd0539612543c4cf3952f46c Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Thu, 2 Nov 2017 17:07:53 -0700 Subject: [PATCH 14/17] cleanup SpatiallyNestable Velocity to match WorldVelocity naming --- interface/src/avatar/AvatarMotionState.cpp | 4 +-- interface/src/avatar/MyAvatar.cpp | 12 +++---- interface/src/ui/OverlayConductor.cpp | 2 +- interface/src/ui/Stats.cpp | 2 +- .../src/avatars-renderer/Avatar.cpp | 6 ++-- libraries/avatars/src/AvatarData.h | 4 +-- libraries/avatars/src/ScriptAvatarData.cpp | 4 +-- libraries/entities/src/EntityItem.h | 13 +++---- .../entities/src/EntityScriptingInterface.cpp | 4 +-- libraries/entities/src/PolyLineEntityItem.h | 2 +- libraries/physics/src/EntityMotionState.cpp | 6 ++-- libraries/physics/src/EntityMotionState.h | 4 +-- libraries/shared/src/SpatiallyNestable.cpp | 34 +++++++++---------- libraries/shared/src/SpatiallyNestable.h | 16 ++++----- 14 files changed, 57 insertions(+), 56 deletions(-) diff --git a/interface/src/avatar/AvatarMotionState.cpp b/interface/src/avatar/AvatarMotionState.cpp index 4f6f2b0b71..900c1c0a11 100644 --- a/interface/src/avatar/AvatarMotionState.cpp +++ b/interface/src/avatar/AvatarMotionState.cpp @@ -116,12 +116,12 @@ glm::quat AvatarMotionState::getObjectRotation() const { // virtual glm::vec3 AvatarMotionState::getObjectLinearVelocity() const { - return _avatar->getVelocity(); + return _avatar->getWorldVelocity(); } // virtual glm::vec3 AvatarMotionState::getObjectAngularVelocity() const { - return _avatar->getAngularVelocity(); + return _avatar->getWorldAngularVelocity(); } // virtual diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index bfaae00f68..5427f3974d 100755 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -1617,13 +1617,13 @@ void MyAvatar::harvestResultsFromPhysicsSimulation(float deltaTime) { _bodySensorMatrix = _follow.postPhysicsUpdate(*this, _bodySensorMatrix); if (_characterController.isEnabledAndReady()) { - setVelocity(_characterController.getLinearVelocity() + _characterController.getFollowVelocity()); + setWorldVelocity(_characterController.getLinearVelocity() + _characterController.getFollowVelocity()); if (_characterController.isStuck()) { _physicsSafetyPending = true; _goToPosition = getWorldPosition(); } } else { - setVelocity(getVelocity() + _characterController.getFollowVelocity()); + setWorldVelocity(getWorldVelocity() + _characterController.getFollowVelocity()); } } @@ -1962,7 +1962,7 @@ void MyAvatar::updateOrientation(float deltaTime) { if (qApp->isHMDMode() && getCharacterController()->getState() == CharacterController::State::Hover && _hmdRollControlEnabled && hasDriveInput()) { // Turn with head roll. const float MIN_CONTROL_SPEED = 0.01f; - float speed = glm::length(getVelocity()); + float speed = glm::length(getWorldVelocity()); if (speed >= MIN_CONTROL_SPEED) { // Feather turn when stopping moving. float speedFactor; @@ -1973,7 +1973,7 @@ void MyAvatar::updateOrientation(float deltaTime) { speedFactor = glm::min(speed / _lastDrivenSpeed, 1.0f); } - float direction = glm::dot(getVelocity(), getWorldOrientation() * Vectors::UNIT_NEG_Z) > 0.0f ? 1.0f : -1.0f; + float direction = glm::dot(getWorldVelocity(), getWorldOrientation() * Vectors::UNIT_NEG_Z) > 0.0f ? 1.0f : -1.0f; float rollAngle = glm::degrees(asinf(glm::dot(IDENTITY_UP, _hmdSensorOrientation * IDENTITY_RIGHT))); float rollSign = rollAngle < 0.0f ? -1.0f : 1.0f; @@ -2084,7 +2084,7 @@ void MyAvatar::updatePosition(float deltaTime) { updateActionMotor(deltaTime); } - vec3 velocity = getVelocity(); + vec3 velocity = getWorldVelocity(); float sensorToWorldScale = getSensorToWorldScale(); float sensorToWorldScale2 = sensorToWorldScale * sensorToWorldScale; const float MOVING_SPEED_THRESHOLD_SQUARED = 0.0001f; // 0.01 m/s @@ -2896,7 +2896,7 @@ glm::mat4 MyAvatar::FollowHelper::postPhysicsUpdate(const MyAvatar& myAvatar, co } float MyAvatar::getAccelerationEnergy() { - glm::vec3 velocity = getVelocity(); + glm::vec3 velocity = getWorldVelocity(); int changeInVelocity = abs(velocity.length() - priorVelocity.length()); float changeInEnergy = priorVelocity.length() * changeInVelocity * AVATAR_MOVEMENT_ENERGY_CONSTANT; priorVelocity = velocity; diff --git a/interface/src/ui/OverlayConductor.cpp b/interface/src/ui/OverlayConductor.cpp index dbf58c5cbc..ed8fa53fe2 100644 --- a/interface/src/ui/OverlayConductor.cpp +++ b/interface/src/ui/OverlayConductor.cpp @@ -49,7 +49,7 @@ bool OverlayConductor::updateAvatarIsAtRest() { const quint64 REST_DISABLE_TIME_USECS = 200 * 1000; // 200 ms const float AT_REST_THRESHOLD = 0.01f; - bool desiredAtRest = glm::length(myAvatar->getVelocity()) < AT_REST_THRESHOLD; + bool desiredAtRest = glm::length(myAvatar->getWorldVelocity()) < AT_REST_THRESHOLD; if (desiredAtRest != _desiredAtRest) { // start timer _desiredAtRestTimer = usecTimestampNow() + (desiredAtRest ? REST_ENABLE_TIME_USECS : REST_DISABLE_TIME_USECS); diff --git a/interface/src/ui/Stats.cpp b/interface/src/ui/Stats.cpp index 4fa5e5726b..e194551add 100644 --- a/interface/src/ui/Stats.cpp +++ b/interface/src/ui/Stats.cpp @@ -194,7 +194,7 @@ void Stats::updateStats(bool force) { auto myAvatar = avatarManager->getMyAvatar(); glm::vec3 avatarPos = myAvatar->getWorldPosition(); STAT_UPDATE(position, QVector3D(avatarPos.x, avatarPos.y, avatarPos.z)); - STAT_UPDATE_FLOAT(speed, glm::length(myAvatar->getVelocity()), 0.01f); + STAT_UPDATE_FLOAT(speed, glm::length(myAvatar->getWorldVelocity()), 0.01f); STAT_UPDATE_FLOAT(yaw, myAvatar->getBodyYaw(), 0.1f); if (_expanded || force) { SharedNodePointer avatarMixer = nodeList->soloNodeOfType(NodeType::AvatarMixer); diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp index 072eb22532..881f30299e 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp +++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp @@ -436,7 +436,7 @@ bool Avatar::isLookingAtMe(AvatarSharedPointer avatar) const { void Avatar::slamPosition(const glm::vec3& newPosition) { setWorldPosition(newPosition); _positionDeltaAccumulator = glm::vec3(0.0f); - setVelocity(glm::vec3(0.0f)); + setWorldVelocity(glm::vec3(0.0f)); _lastVelocity = glm::vec3(0.0f); } @@ -460,13 +460,13 @@ void Avatar::measureMotionDerivatives(float deltaTime) { _positionDeltaAccumulator = glm::vec3(0.0f); _acceleration = (velocity - _lastVelocity) * invDeltaTime; _lastVelocity = velocity; - setVelocity(velocity); + setWorldVelocity(velocity); // angular glm::quat orientation = getWorldOrientation(); glm::quat delta = glm::inverse(_lastOrientation) * orientation; glm::vec3 angularVelocity = glm::axis(delta) * glm::angle(delta) * invDeltaTime; - setAngularVelocity(angularVelocity); + setWorldAngularVelocity(angularVelocity); _lastOrientation = getWorldOrientation(); } diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index 61e27a482e..cad547b03c 100644 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -365,8 +365,8 @@ class AvatarData : public QObject, public SpatiallyNestable { Q_PROPERTY(float headYaw READ getHeadYaw WRITE setHeadYaw) Q_PROPERTY(float headRoll READ getHeadRoll WRITE setHeadRoll) - Q_PROPERTY(glm::vec3 velocity READ getVelocity WRITE setVelocity) - Q_PROPERTY(glm::vec3 angularVelocity READ getAngularVelocity WRITE setAngularVelocity) + Q_PROPERTY(glm::vec3 velocity READ getWorldVelocity WRITE setWorldVelocity) + Q_PROPERTY(glm::vec3 angularVelocity READ getWorldAngularVelocity WRITE setWorldAngularVelocity) Q_PROPERTY(float audioLoudness READ getAudioLoudness WRITE setAudioLoudness) Q_PROPERTY(float audioAverageLoudness READ getAudioAverageLoudness WRITE setAudioAverageLoudness) diff --git a/libraries/avatars/src/ScriptAvatarData.cpp b/libraries/avatars/src/ScriptAvatarData.cpp index 6a57bab0b7..64cd534c8b 100644 --- a/libraries/avatars/src/ScriptAvatarData.cpp +++ b/libraries/avatars/src/ScriptAvatarData.cpp @@ -110,14 +110,14 @@ float ScriptAvatarData::getHeadRoll() const { // glm::vec3 ScriptAvatarData::getVelocity() const { if (AvatarSharedPointer sharedAvatarData = _avatarData.lock()) { - return sharedAvatarData->getVelocity(); + return sharedAvatarData->getWorldVelocity(); } else { return glm::vec3(); } } glm::vec3 ScriptAvatarData::getAngularVelocity() const { if (AvatarSharedPointer sharedAvatarData = _avatarData.lock()) { - return sharedAvatarData->getAngularVelocity(); + return sharedAvatarData->getWorldAngularVelocity(); } else { return glm::vec3(); } diff --git a/libraries/entities/src/EntityItem.h b/libraries/entities/src/EntityItem.h index a57e4fefda..403c41704b 100644 --- a/libraries/entities/src/EntityItem.h +++ b/libraries/entities/src/EntityItem.h @@ -192,7 +192,7 @@ public: float getDensity() const; - bool hasVelocity() const { return getVelocity() != ENTITY_ITEM_ZERO_VEC3; } + bool hasVelocity() const { return getWorldVelocity() != ENTITY_ITEM_ZERO_VEC3; } bool hasLocalVelocity() const { return getLocalVelocity() != ENTITY_ITEM_ZERO_VEC3; } glm::vec3 getGravity() const; /// get gravity in meters @@ -254,9 +254,9 @@ public: glm::vec3 getRegistrationPoint() const; /// registration point as ratio of entity /// registration point as ratio of entity - virtual void setRegistrationPoint(const glm::vec3& value); + virtual void setRegistrationPoint(const glm::vec3& value); // FIXME: this is suspicious! - bool hasAngularVelocity() const { return getAngularVelocity() != ENTITY_ITEM_ZERO_VEC3; } + bool hasAngularVelocity() const { return getWorldAngularVelocity() != ENTITY_ITEM_ZERO_VEC3; } bool hasLocalAngularVelocity() const { return getLocalAngularVelocity() != ENTITY_ITEM_ZERO_VEC3; } virtual void setAngularVelocity(const glm::vec3& angularVelocity); @@ -292,7 +292,7 @@ public: void setLocked(bool value); QString getUserData() const; - virtual void setUserData(const QString& value); + virtual void setUserData(const QString& value); // FIXME: This is suspicious // FIXME not thread safe? const SimulationOwner& getSimulationOwner() const { return _simulationOwner; } @@ -349,10 +349,11 @@ public: void setPosition(const glm::vec3& value); virtual void setParentID(const QUuid& parentID); - virtual void setRotation(glm::quat orientation); - virtual void setVelocity(const glm::vec3& velocity); virtual void setShapeType(ShapeType type) { /* do nothing */ } + void setRotation(glm::quat orientation); + void setVelocity(const glm::vec3& velocity); + uint32_t getDirtyFlags() const; void markDirtyFlags(uint32_t mask); void clearDirtyFlags(uint32_t mask = 0xffffffff); diff --git a/libraries/entities/src/EntityScriptingInterface.cpp b/libraries/entities/src/EntityScriptingInterface.cpp index 8382bc1920..155ec5b84a 100644 --- a/libraries/entities/src/EntityScriptingInterface.cpp +++ b/libraries/entities/src/EntityScriptingInterface.cpp @@ -376,7 +376,7 @@ QUuid EntityScriptingInterface::editEntity(QUuid id, const EntityItemProperties& // If any of these changed, pull any missing properties from the entity. //existing entity, retrieve old velocity for check down below - oldVelocity = entity->getVelocity().length(); + oldVelocity = entity->getWorldVelocity().length(); if (!scriptSideProperties.parentIDChanged()) { properties.setParentID(entity->getParentID()); @@ -532,7 +532,7 @@ void EntityScriptingInterface::deleteEntity(QUuid id) { auto dimensions = entity->getDimensions(); float volume = dimensions.x * dimensions.y * dimensions.z; auto density = entity->getDensity(); - auto velocity = entity->getVelocity().length(); + auto velocity = entity->getWorldVelocity().length(); float cost = calculateCost(density * volume, velocity, 0); cost *= costMultiplier; diff --git a/libraries/entities/src/PolyLineEntityItem.h b/libraries/entities/src/PolyLineEntityItem.h index 7e47ce3aa7..3164a9646b 100644 --- a/libraries/entities/src/PolyLineEntityItem.h +++ b/libraries/entities/src/PolyLineEntityItem.h @@ -99,7 +99,7 @@ class PolyLineEntityItem : public EntityItem { void** intersectedObject, bool precisionPicking) const override { return false; } // disable these external interfaces as PolyLineEntities caculate their own dimensions based on the points they contain - virtual void setRegistrationPoint(const glm::vec3& value) override {}; + virtual void setRegistrationPoint(const glm::vec3& value) override {}; // FIXME: this is suspicious! virtual void debugDump() const override; static const float DEFAULT_LINE_WIDTH; diff --git a/libraries/physics/src/EntityMotionState.cpp b/libraries/physics/src/EntityMotionState.cpp index da98e838b0..8ebce9f811 100644 --- a/libraries/physics/src/EntityMotionState.cpp +++ b/libraries/physics/src/EntityMotionState.cpp @@ -125,7 +125,7 @@ void EntityMotionState::handleEasyChanges(uint32_t& flags) { if (flags & Simulation::DIRTY_SIMULATOR_ID) { if (_entity->getSimulatorID().isNull()) { // simulation ownership has been removed by an external simulator - if (glm::length2(_entity->getVelocity()) == 0.0f) { + if (glm::length2(_entity->getWorldVelocity()) == 0.0f) { // this object is coming to rest --> clear the ACTIVATION flag and _outgoingPriority flags &= ~Simulation::DIRTY_PHYSICS_ACTIVATION; _body->setActivationState(WANTS_DEACTIVATION); @@ -542,8 +542,8 @@ void EntityMotionState::sendUpdate(OctreeEditPacketSender* packetSender, uint32_ const float DYNAMIC_ANGULAR_VELOCITY_THRESHOLD = 0.087266f; // ~5 deg/sec bool movingSlowlyLinear = - glm::length2(_entity->getVelocity()) < (DYNAMIC_LINEAR_VELOCITY_THRESHOLD * DYNAMIC_LINEAR_VELOCITY_THRESHOLD); - bool movingSlowlyAngular = glm::length2(_entity->getAngularVelocity()) < + glm::length2(_entity->getWorldVelocity()) < (DYNAMIC_LINEAR_VELOCITY_THRESHOLD * DYNAMIC_LINEAR_VELOCITY_THRESHOLD); + bool movingSlowlyAngular = glm::length2(_entity->getWorldAngularVelocity()) < (DYNAMIC_ANGULAR_VELOCITY_THRESHOLD * DYNAMIC_ANGULAR_VELOCITY_THRESHOLD); bool movingSlowly = movingSlowlyLinear && movingSlowlyAngular && _entity->getAcceleration() == Vectors::ZERO; diff --git a/libraries/physics/src/EntityMotionState.h b/libraries/physics/src/EntityMotionState.h index 2bb692da81..ddfd7e1e4c 100644 --- a/libraries/physics/src/EntityMotionState.h +++ b/libraries/physics/src/EntityMotionState.h @@ -59,8 +59,8 @@ public: virtual glm::vec3 getObjectPosition() const override { return _entity->getWorldPosition() - ObjectMotionState::getWorldOffset(); } virtual glm::quat getObjectRotation() const override { return _entity->getWorldOrientation(); } - virtual glm::vec3 getObjectLinearVelocity() const override { return _entity->getVelocity(); } - virtual glm::vec3 getObjectAngularVelocity() const override { return _entity->getAngularVelocity(); } + virtual glm::vec3 getObjectLinearVelocity() const override { return _entity->getWorldVelocity(); } + virtual glm::vec3 getObjectAngularVelocity() const override { return _entity->getWorldAngularVelocity(); } virtual glm::vec3 getObjectGravity() const override { return _entity->getGravity(); } virtual glm::vec3 getObjectLinearVelocityChange() const override; diff --git a/libraries/shared/src/SpatiallyNestable.cpp b/libraries/shared/src/SpatiallyNestable.cpp index a931a524fd..2114cbf944 100644 --- a/libraries/shared/src/SpatiallyNestable.cpp +++ b/libraries/shared/src/SpatiallyNestable.cpp @@ -240,7 +240,7 @@ glm::vec3 SpatiallyNestable::worldToLocalVelocity(const glm::vec3& velocity, con if (!success) { return velocity; } - glm::vec3 parentVelocity = parent->getVelocity(success); + glm::vec3 parentVelocity = parent->getWorldVelocity(success); if (!success) { return velocity; } @@ -345,7 +345,7 @@ glm::vec3 SpatiallyNestable::localToWorldVelocity(const glm::vec3& velocity, con if (!success) { return velocity; } - glm::vec3 parentVelocity = parent->getVelocity(success); + glm::vec3 parentVelocity = parent->getWorldVelocity(success); if (!success) { return velocity; } @@ -473,7 +473,7 @@ void SpatiallyNestable::setWorldOrientation(const glm::quat& orientation) { #endif } -glm::vec3 SpatiallyNestable::getVelocity(bool& success) const { +glm::vec3 SpatiallyNestable::getWorldVelocity(bool& success) const { glm::vec3 result; Transform parentTransform = getParentTransform(success); if (!success) { @@ -490,16 +490,16 @@ glm::vec3 SpatiallyNestable::getVelocity(bool& success) const { return result; } -glm::vec3 SpatiallyNestable::getVelocity() const { +glm::vec3 SpatiallyNestable::getWorldVelocity() const { bool success; - glm::vec3 result = getVelocity(success); + glm::vec3 result = getWorldVelocity(success); if (!success) { - qCDebug(shared) << "Warning -- getVelocity failed" << getID(); + qCDebug(shared) << "Warning -- getWorldVelocity failed" << getID(); } return result; } -void SpatiallyNestable::setVelocity(const glm::vec3& velocity, bool& success) { +void SpatiallyNestable::setWorldVelocity(const glm::vec3& velocity, bool& success) { glm::vec3 parentVelocity = getParentVelocity(success); Transform parentTransform = getParentTransform(success); _velocityLock.withWriteLock([&] { @@ -518,9 +518,9 @@ void SpatiallyNestable::setVelocity(const glm::vec3& velocity, bool& success) { }); } -void SpatiallyNestable::setVelocity(const glm::vec3& velocity) { +void SpatiallyNestable::setWorldVelocity(const glm::vec3& velocity) { bool success; - setVelocity(velocity, success); + setWorldVelocity(velocity, success); if (!success) { qCDebug(shared) << "Warning -- setVelocity failed" << getID(); } @@ -533,12 +533,12 @@ glm::vec3 SpatiallyNestable::getParentVelocity(bool& success) const { return result; } if (parent) { - result = parent->getVelocity(success); + result = parent->getWorldVelocity(success); } return result; } -glm::vec3 SpatiallyNestable::getAngularVelocity(bool& success) const { +glm::vec3 SpatiallyNestable::getWorldAngularVelocity(bool& success) const { glm::vec3 result; Transform parentTransform = getParentTransform(success); if (!success) { @@ -554,16 +554,16 @@ glm::vec3 SpatiallyNestable::getAngularVelocity(bool& success) const { return result; } -glm::vec3 SpatiallyNestable::getAngularVelocity() const { +glm::vec3 SpatiallyNestable::getWorldAngularVelocity() const { bool success; - glm::vec3 result = getAngularVelocity(success); + glm::vec3 result = getWorldAngularVelocity(success); if (!success) { qCDebug(shared) << "Warning -- getAngularVelocity failed" << getID(); } return result; } -void SpatiallyNestable::setAngularVelocity(const glm::vec3& angularVelocity, bool& success) { +void SpatiallyNestable::setWorldAngularVelocity(const glm::vec3& angularVelocity, bool& success) { glm::vec3 parentAngularVelocity = getParentAngularVelocity(success); Transform parentTransform = getParentTransform(success); _angularVelocityLock.withWriteLock([&] { @@ -571,9 +571,9 @@ void SpatiallyNestable::setAngularVelocity(const glm::vec3& angularVelocity, boo }); } -void SpatiallyNestable::setAngularVelocity(const glm::vec3& angularVelocity) { +void SpatiallyNestable::setWorldAngularVelocity(const glm::vec3& angularVelocity) { bool success; - setAngularVelocity(angularVelocity, success); + setWorldAngularVelocity(angularVelocity, success); if (!success) { qCDebug(shared) << "Warning -- setAngularVelocity failed" << getID(); } @@ -586,7 +586,7 @@ glm::vec3 SpatiallyNestable::getParentAngularVelocity(bool& success) const { return result; } if (parent) { - result = parent->getAngularVelocity(success); + result = parent->getWorldAngularVelocity(success); } return result; } diff --git a/libraries/shared/src/SpatiallyNestable.h b/libraries/shared/src/SpatiallyNestable.h index 929c2d53f2..9cd38f9ce9 100644 --- a/libraries/shared/src/SpatiallyNestable.h +++ b/libraries/shared/src/SpatiallyNestable.h @@ -89,16 +89,16 @@ public: virtual void setWorldOrientation(const glm::quat& orientation, bool& success, bool tellPhysics = true); virtual void setWorldOrientation(const glm::quat& orientation); - virtual glm::vec3 getVelocity(bool& success) const; - virtual glm::vec3 getVelocity() const; - virtual void setVelocity(const glm::vec3& velocity, bool& success); - virtual void setVelocity(const glm::vec3& velocity); + virtual glm::vec3 getWorldVelocity(bool& success) const; + virtual glm::vec3 getWorldVelocity() const; + virtual void setWorldVelocity(const glm::vec3& velocity, bool& success); + virtual void setWorldVelocity(const glm::vec3& velocity); virtual glm::vec3 getParentVelocity(bool& success) const; - virtual glm::vec3 getAngularVelocity(bool& success) const; - virtual glm::vec3 getAngularVelocity() const; - virtual void setAngularVelocity(const glm::vec3& angularVelocity, bool& success); - virtual void setAngularVelocity(const glm::vec3& angularVelocity); + virtual glm::vec3 getWorldAngularVelocity(bool& success) const; + virtual glm::vec3 getWorldAngularVelocity() const; + virtual void setWorldAngularVelocity(const glm::vec3& angularVelocity, bool& success); + virtual void setWorldAngularVelocity(const glm::vec3& angularVelocity); virtual glm::vec3 getParentAngularVelocity(bool& success) const; virtual AACube getMaximumAACube(bool& success) const; From baff900839e61c7a207256d53cd767bb1f4b186a Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Thu, 2 Nov 2017 17:46:15 -0700 Subject: [PATCH 15/17] cleanup some writeLocks --- libraries/entities/src/EntityItem.cpp | 135 ++++++++++++++------------ 1 file changed, 73 insertions(+), 62 deletions(-) diff --git a/libraries/entities/src/EntityItem.cpp b/libraries/entities/src/EntityItem.cpp index e4f88f6856..5b90d75b58 100644 --- a/libraries/entities/src/EntityItem.cpp +++ b/libraries/entities/src/EntityItem.cpp @@ -1734,9 +1734,11 @@ void EntityItem::setParentID(const QUuid& value) { void EntityItem::setDimensions(const glm::vec3& value) { glm::vec3 newDimensions = glm::max(value, glm::vec3(0.0f)); // can never have negative dimensions if (getDimensions() != newDimensions) { - _dimensions = newDimensions; - markDirtyFlags(Simulation::DIRTY_SHAPE | Simulation::DIRTY_MASS); - _queryAACubeSet = false; + withWriteLock([&] { + _dimensions = newDimensions; + _dirtyFlags |= (Simulation::DIRTY_SHAPE | Simulation::DIRTY_MASS); + _queryAACubeSet = false; + }); locationChanged(); dimensionsChanged(); } @@ -1783,29 +1785,33 @@ void EntityItem::setVelocity(const glm::vec3& value) { void EntityItem::setDamping(float value) { auto clampedDamping = glm::clamp(value, 0.0f, 1.0f); - if (_damping != clampedDamping) { - _damping = clampedDamping; - _dirtyFlags |= Simulation::DIRTY_MATERIAL; - } + withWriteLock([&] { + if (_damping != clampedDamping) { + _damping = clampedDamping; + _dirtyFlags |= Simulation::DIRTY_MATERIAL; + } + }); } void EntityItem::setGravity(const glm::vec3& value) { - if (_gravity != value) { - if (getShapeType() == SHAPE_TYPE_STATIC_MESH) { - _gravity = Vectors::ZERO; - } else { - float magnitude = glm::length(value); - if (!glm::isnan(magnitude)) { - const float MAX_ACCELERATION_OF_GRAVITY = 10.0f * 9.8f; // 10g - if (magnitude > MAX_ACCELERATION_OF_GRAVITY) { - _gravity = (MAX_ACCELERATION_OF_GRAVITY / magnitude) * value; - } else { - _gravity = value; + withWriteLock([&] { + if (_gravity != value) { + if (getShapeType() == SHAPE_TYPE_STATIC_MESH) { + _gravity = Vectors::ZERO; + } else { + float magnitude = glm::length(value); + if (!glm::isnan(magnitude)) { + const float MAX_ACCELERATION_OF_GRAVITY = 10.0f * 9.8f; // 10g + if (magnitude > MAX_ACCELERATION_OF_GRAVITY) { + _gravity = (MAX_ACCELERATION_OF_GRAVITY / magnitude) * value; + } else { + _gravity = value; + } + _dirtyFlags |= Simulation::DIRTY_LINEAR_VELOCITY; } - _dirtyFlags |= Simulation::DIRTY_LINEAR_VELOCITY; } } - } + }); } void EntityItem::setAngularVelocity(const glm::vec3& value) { @@ -1834,47 +1840,58 @@ void EntityItem::setAngularVelocity(const glm::vec3& value) { void EntityItem::setAngularDamping(float value) { auto clampedDamping = glm::clamp(value, 0.0f, 1.0f); - if (_angularDamping != clampedDamping) { - _angularDamping = clampedDamping; - _dirtyFlags |= Simulation::DIRTY_MATERIAL; - } + withWriteLock([&] { + if (_angularDamping != clampedDamping) { + _angularDamping = clampedDamping; + _dirtyFlags |= Simulation::DIRTY_MATERIAL; + } + }); } void EntityItem::setCollisionless(bool value) { - if (_collisionless != value) { - _collisionless = value; - _dirtyFlags |= Simulation::DIRTY_COLLISION_GROUP; - } + withWriteLock([&] { + if (_collisionless != value) { + _collisionless = value; + _dirtyFlags |= Simulation::DIRTY_COLLISION_GROUP; + } + }); } void EntityItem::setCollisionMask(uint8_t value) { - if ((_collisionMask & ENTITY_COLLISION_MASK_DEFAULT) != (value & ENTITY_COLLISION_MASK_DEFAULT)) { - _collisionMask = (value & ENTITY_COLLISION_MASK_DEFAULT); - _dirtyFlags |= Simulation::DIRTY_COLLISION_GROUP; - } + withWriteLock([&] { + if ((_collisionMask & ENTITY_COLLISION_MASK_DEFAULT) != (value & ENTITY_COLLISION_MASK_DEFAULT)) { + _collisionMask = (value & ENTITY_COLLISION_MASK_DEFAULT); + _dirtyFlags |= Simulation::DIRTY_COLLISION_GROUP; + } + }); } void EntityItem::setDynamic(bool value) { if (getDynamic() != value) { - // dynamic and STATIC_MESH are incompatible so we check for that case - if (value && getShapeType() == SHAPE_TYPE_STATIC_MESH) { - if (_dynamic) { - _dynamic = false; + withWriteLock([&] { + // dynamic and STATIC_MESH are incompatible so we check for that case + if (value && getShapeType() == SHAPE_TYPE_STATIC_MESH) { + if (_dynamic) { + _dynamic = false; + _dirtyFlags |= Simulation::DIRTY_MOTION_TYPE; + } + } else { + _dynamic = value; _dirtyFlags |= Simulation::DIRTY_MOTION_TYPE; } - } else { - _dynamic = value; - _dirtyFlags |= Simulation::DIRTY_MOTION_TYPE; - } + }); } } void EntityItem::setRestitution(float value) { float clampedValue = glm::max(glm::min(ENTITY_ITEM_MAX_RESTITUTION, value), ENTITY_ITEM_MIN_RESTITUTION); - if (_restitution != clampedValue) { - _restitution = clampedValue; - _dirtyFlags |= Simulation::DIRTY_MATERIAL; - } + withWriteLock([&] { + if (_restitution != clampedValue) { + _restitution = clampedValue; + _dirtyFlags |= Simulation::DIRTY_MATERIAL; + } + }); + } void EntityItem::setFriction(float value) { @@ -1888,17 +1905,21 @@ void EntityItem::setFriction(float value) { } void EntityItem::setLifetime(float value) { - if (_lifetime != value) { - _lifetime = value; - _dirtyFlags |= Simulation::DIRTY_LIFETIME; - } + withWriteLock([&] { + if (_lifetime != value) { + _lifetime = value; + _dirtyFlags |= Simulation::DIRTY_LIFETIME; + } + }); } void EntityItem::setCreated(uint64_t value) { - if (_created != value) { - _created = value; - _dirtyFlags |= Simulation::DIRTY_LIFETIME; - } + withWriteLock([&] { + if (_created != value) { + _created = value; + _dirtyFlags |= Simulation::DIRTY_LIFETIME; + } + }); } void EntityItem::computeCollisionGroupAndFinalMask(int16_t& group, int16_t& mask) const { @@ -1970,16 +1991,6 @@ void EntityItem::setSimulationOwner(const QUuid& id, quint8 priority) { _simulationOwner.set(id, priority); } -/* -void EntityItem::setSimulationOwner(const SimulationOwner& owner) { - if (wantTerseEditLogging() && _simulationOwner != owner) { - qCDebug(entities) << "sim ownership for" << getDebugName() << "is now" << owner; - } - - _simulationOwner.set(owner); -} -*/ - void EntityItem::setSimulationOwner(const SimulationOwner& owner) { // NOTE: this method only used by EntityServer. The Interface uses special code in readEntityDataFromBuffer(). if (wantTerseEditLogging() && _simulationOwner != owner) { From 74ceab1e680f70d18084336a0e9332340c49ac4a Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Thu, 2 Nov 2017 19:30:39 -0700 Subject: [PATCH 16/17] fix mac and unic build --- libraries/entities/src/EntityItem.cpp | 2 +- libraries/entities/src/EntityItem.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/entities/src/EntityItem.cpp b/libraries/entities/src/EntityItem.cpp index 5b90d75b58..a60b98a711 100644 --- a/libraries/entities/src/EntityItem.cpp +++ b/libraries/entities/src/EntityItem.cpp @@ -1913,7 +1913,7 @@ void EntityItem::setLifetime(float value) { }); } -void EntityItem::setCreated(uint64_t value) { +void EntityItem::setCreated(quint64 value) { withWriteLock([&] { if (_created != value) { _created = value; diff --git a/libraries/entities/src/EntityItem.h b/libraries/entities/src/EntityItem.h index 403c41704b..a7d8adc472 100644 --- a/libraries/entities/src/EntityItem.h +++ b/libraries/entities/src/EntityItem.h @@ -348,7 +348,7 @@ public: virtual void setCollisionShape(const btCollisionShape* shape) {} void setPosition(const glm::vec3& value); - virtual void setParentID(const QUuid& parentID); + virtual void setParentID(const QUuid& parentID) override; virtual void setShapeType(ShapeType type) { /* do nothing */ } void setRotation(glm::quat orientation); From 3b77f14f699fce57a9fd9594a7595117f31bbb5a Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Sun, 19 Nov 2017 15:12:23 -0800 Subject: [PATCH 17/17] fix build error --- libraries/entities-renderer/src/EntityTreeRenderer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/entities-renderer/src/EntityTreeRenderer.cpp b/libraries/entities-renderer/src/EntityTreeRenderer.cpp index 7a900da207..aef6bda0b9 100644 --- a/libraries/entities-renderer/src/EntityTreeRenderer.cpp +++ b/libraries/entities-renderer/src/EntityTreeRenderer.cpp @@ -324,7 +324,7 @@ void EntityTreeRenderer::updateChangedEntities(const render::ScenePointer& scene public: SortableRenderer(const EntityRendererPointer& renderer) : _renderer(renderer) { } - glm::vec3 getPosition() const override { return _renderer->getEntity()->getPosition(); } + glm::vec3 getPosition() const override { return _renderer->getEntity()->getWorldPosition(); } float getRadius() const override { return 0.5f * _renderer->getEntity()->getQueryAACube().getScale(); } uint64_t getTimestamp() const override { return _renderer->getUpdateTime(); }