mirror of
https://github.com/overte-org/overte.git
synced 2025-08-10 20:33:09 +02:00
Account for avatar scale in Hand(Data) get/set
When using localToWorld/WorldToLocal type functions
This commit is contained in:
parent
3ceadf31b3
commit
4278407137
3 changed files with 10 additions and 9 deletions
|
@ -171,10 +171,6 @@ void Hand::renderHandTargets(bool isMine) {
|
||||||
glm::vec3 tip = palm.getTipPosition();
|
glm::vec3 tip = palm.getTipPosition();
|
||||||
glm::vec3 root = palm.getPosition();
|
glm::vec3 root = palm.getPosition();
|
||||||
|
|
||||||
//Scale the positions based on avatar scale
|
|
||||||
myAvatar->scaleVectorRelativeToPosition(tip);
|
|
||||||
myAvatar->scaleVectorRelativeToPosition(root);
|
|
||||||
|
|
||||||
Avatar::renderJointConnectingCone(root, tip, PALM_FINGER_ROD_RADIUS, PALM_FINGER_ROD_RADIUS);
|
Avatar::renderJointConnectingCone(root, tip, PALM_FINGER_ROD_RADIUS, PALM_FINGER_ROD_RADIUS);
|
||||||
// Render sphere at palm/finger root
|
// Render sphere at palm/finger root
|
||||||
glm::vec3 offsetFromPalm = root + palm.getNormal() * PALM_DISK_THICKNESS;
|
glm::vec3 offsetFromPalm = root + palm.getNormal() * PALM_DISK_THICKNESS;
|
||||||
|
|
|
@ -27,7 +27,7 @@ HandData::HandData(AvatarData* owningAvatar) :
|
||||||
}
|
}
|
||||||
|
|
||||||
glm::vec3 HandData::worldToLocalVector(const glm::vec3& worldVector) const {
|
glm::vec3 HandData::worldToLocalVector(const glm::vec3& worldVector) const {
|
||||||
return glm::inverse(getBaseOrientation()) * worldVector;
|
return glm::inverse(getBaseOrientation()) * worldVector / getBaseScale();
|
||||||
}
|
}
|
||||||
|
|
||||||
PalmData& HandData::addNewPalm() {
|
PalmData& HandData::addNewPalm() {
|
||||||
|
@ -109,14 +109,18 @@ glm::vec3 HandData::getBasePosition() const {
|
||||||
return _owningAvatarData->getPosition();
|
return _owningAvatarData->getPosition();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
float HandData::getBaseScale() const {
|
||||||
|
return _owningAvatarData->getTargetScale();
|
||||||
|
}
|
||||||
|
|
||||||
glm::vec3 PalmData::getFingerDirection() const {
|
glm::vec3 PalmData::getFingerDirection() const {
|
||||||
const glm::vec3 LOCAL_FINGER_DIRECTION(0.0f, 0.0f, 1.0f);
|
const glm::vec3 LOCAL_FINGER_DIRECTION(0.0f, 0.0f, 1.0f);
|
||||||
return _owningHandData->localToWorldDirection(_rawRotation * LOCAL_FINGER_DIRECTION);
|
return glm::normalize(_owningHandData->localToWorldDirection(_rawRotation * LOCAL_FINGER_DIRECTION));
|
||||||
}
|
}
|
||||||
|
|
||||||
glm::vec3 PalmData::getNormal() const {
|
glm::vec3 PalmData::getNormal() const {
|
||||||
const glm::vec3 LOCAL_PALM_DIRECTION(0.0f, -1.0f, 0.0f);
|
const glm::vec3 LOCAL_PALM_DIRECTION(0.0f, -1.0f, 0.0f);
|
||||||
return _owningHandData->localToWorldDirection(_rawRotation * LOCAL_PALM_DIRECTION);
|
return glm::normalize(_owningHandData->localToWorldDirection(_rawRotation * LOCAL_PALM_DIRECTION));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -36,11 +36,11 @@ public:
|
||||||
|
|
||||||
// position conversion
|
// position conversion
|
||||||
glm::vec3 localToWorldPosition(const glm::vec3& localPosition) {
|
glm::vec3 localToWorldPosition(const glm::vec3& localPosition) {
|
||||||
return getBasePosition() + getBaseOrientation() * localPosition;
|
return getBasePosition() + getBaseOrientation() * localPosition * getBaseScale();
|
||||||
}
|
}
|
||||||
|
|
||||||
glm::vec3 localToWorldDirection(const glm::vec3& localVector) {
|
glm::vec3 localToWorldDirection(const glm::vec3& localVector) {
|
||||||
return getBaseOrientation() * localVector;
|
return getBaseOrientation() * localVector * getBaseScale();
|
||||||
}
|
}
|
||||||
|
|
||||||
glm::vec3 worldToLocalVector(const glm::vec3& worldVector) const;
|
glm::vec3 worldToLocalVector(const glm::vec3& worldVector) const;
|
||||||
|
@ -71,6 +71,7 @@ protected:
|
||||||
|
|
||||||
glm::quat getBaseOrientation() const;
|
glm::quat getBaseOrientation() const;
|
||||||
glm::vec3 getBasePosition() const;
|
glm::vec3 getBasePosition() const;
|
||||||
|
float getBaseScale() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// privatize copy ctor and assignment operator so copies of this object cannot be made
|
// privatize copy ctor and assignment operator so copies of this object cannot be made
|
||||||
|
|
Loading…
Reference in a new issue