mirror of
https://github.com/overte-org/overte.git
synced 2025-07-16 12:36:43 +02:00
Merge pull request #2057 from ey6es/master
I believe this is what was intended for the voxel edit orbit behavior. Yaw the body, pitch the head.
This commit is contained in:
commit
b0f3ab3ccd
8 changed files with 33 additions and 12 deletions
|
@ -866,7 +866,7 @@ function mouseReleaseEvent(event) {
|
||||||
var cameraOrientation = Camera.getOrientation();
|
var cameraOrientation = Camera.getOrientation();
|
||||||
var eulers = Quat.safeEulerAngles(cameraOrientation);
|
var eulers = Quat.safeEulerAngles(cameraOrientation);
|
||||||
MyAvatar.position = Camera.getPosition();
|
MyAvatar.position = Camera.getPosition();
|
||||||
MyAvatar.orientation = cameraOrientation;
|
MyAvatar.headOrientation = cameraOrientation;
|
||||||
Camera.stopLooking();
|
Camera.stopLooking();
|
||||||
Camera.setMode(oldMode);
|
Camera.setMode(oldMode);
|
||||||
Camera.setOrientation(cameraOrientation);
|
Camera.setOrientation(cameraOrientation);
|
||||||
|
|
|
@ -124,7 +124,6 @@ void Avatar::simulate(float deltaTime) {
|
||||||
_skeletonModel.setLODDistance(getLODDistance());
|
_skeletonModel.setLODDistance(getLODDistance());
|
||||||
_skeletonModel.simulate(deltaTime);
|
_skeletonModel.simulate(deltaTime);
|
||||||
Head* head = getHead();
|
Head* head = getHead();
|
||||||
head->setBodyRotation(glm::vec3(_bodyPitch, _bodyYaw, _bodyRoll));
|
|
||||||
glm::vec3 headPosition;
|
glm::vec3 headPosition;
|
||||||
if (!_skeletonModel.getHeadPosition(headPosition)) {
|
if (!_skeletonModel.getHeadPosition(headPosition)) {
|
||||||
headPosition = _position;
|
headPosition = _position;
|
||||||
|
|
|
@ -28,7 +28,6 @@ Head::Head(Avatar* owningAvatar) :
|
||||||
_gravity(0.0f, -1.0f, 0.0f),
|
_gravity(0.0f, -1.0f, 0.0f),
|
||||||
_lastLoudness(0.0f),
|
_lastLoudness(0.0f),
|
||||||
_audioAttack(0.0f),
|
_audioAttack(0.0f),
|
||||||
_bodyRotation(0.0f, 0.0f, 0.0f),
|
|
||||||
_angularVelocity(0,0,0),
|
_angularVelocity(0,0,0),
|
||||||
_renderLookatVectors(false),
|
_renderLookatVectors(false),
|
||||||
_saccade(0.0f, 0.0f, 0.0f),
|
_saccade(0.0f, 0.0f, 0.0f),
|
||||||
|
@ -183,12 +182,8 @@ void Head::setScale (float scale) {
|
||||||
_scale = scale;
|
_scale = scale;
|
||||||
}
|
}
|
||||||
|
|
||||||
glm::quat Head::getOrientation() const {
|
|
||||||
return glm::quat(glm::radians(_bodyRotation)) * glm::quat(glm::radians(glm::vec3(_pitch, _yaw, _roll)));
|
|
||||||
}
|
|
||||||
|
|
||||||
glm::quat Head::getTweakedOrientation() const {
|
glm::quat Head::getTweakedOrientation() const {
|
||||||
return glm::quat(glm::radians(_bodyRotation)) * glm::quat(glm::radians(glm::vec3(getTweakedPitch(), getTweakedYaw(), getTweakedRoll() )));
|
return _owningAvatar->getOrientation() * glm::quat(glm::radians(glm::vec3(getTweakedPitch(), getTweakedYaw(), getTweakedRoll() )));
|
||||||
}
|
}
|
||||||
|
|
||||||
glm::quat Head::getCameraOrientation () const {
|
glm::quat Head::getCameraOrientation () const {
|
||||||
|
|
|
@ -40,13 +40,11 @@ public:
|
||||||
void render(float alpha);
|
void render(float alpha);
|
||||||
void setScale(float scale);
|
void setScale(float scale);
|
||||||
void setPosition(glm::vec3 position) { _position = position; }
|
void setPosition(glm::vec3 position) { _position = position; }
|
||||||
void setBodyRotation(glm::vec3 bodyRotation) { _bodyRotation = bodyRotation; }
|
|
||||||
void setGravity(glm::vec3 gravity) { _gravity = gravity; }
|
void setGravity(glm::vec3 gravity) { _gravity = gravity; }
|
||||||
void setAverageLoudness(float averageLoudness) { _averageLoudness = averageLoudness; }
|
void setAverageLoudness(float averageLoudness) { _averageLoudness = averageLoudness; }
|
||||||
void setReturnToCenter (bool returnHeadToCenter) { _returnHeadToCenter = returnHeadToCenter; }
|
void setReturnToCenter (bool returnHeadToCenter) { _returnHeadToCenter = returnHeadToCenter; }
|
||||||
void setRenderLookatVectors(bool onOff) { _renderLookatVectors = onOff; }
|
void setRenderLookatVectors(bool onOff) { _renderLookatVectors = onOff; }
|
||||||
|
|
||||||
glm::quat getOrientation() const;
|
|
||||||
glm::quat getTweakedOrientation() const;
|
glm::quat getTweakedOrientation() const;
|
||||||
glm::quat getCameraOrientation () const;
|
glm::quat getCameraOrientation () const;
|
||||||
const glm::vec3& getAngularVelocity() const { return _angularVelocity; }
|
const glm::vec3& getAngularVelocity() const { return _angularVelocity; }
|
||||||
|
@ -97,7 +95,6 @@ private:
|
||||||
glm::vec3 _gravity;
|
glm::vec3 _gravity;
|
||||||
float _lastLoudness;
|
float _lastLoudness;
|
||||||
float _audioAttack;
|
float _audioAttack;
|
||||||
glm::vec3 _bodyRotation;
|
|
||||||
glm::vec3 _angularVelocity;
|
glm::vec3 _angularVelocity;
|
||||||
bool _renderLookatVectors;
|
bool _renderLookatVectors;
|
||||||
glm::vec3 _saccade;
|
glm::vec3 _saccade;
|
||||||
|
|
|
@ -324,7 +324,6 @@ void MyAvatar::simulate(float deltaTime) {
|
||||||
_skeletonModel.simulate(deltaTime);
|
_skeletonModel.simulate(deltaTime);
|
||||||
|
|
||||||
Head* head = getHead();
|
Head* head = getHead();
|
||||||
head->setBodyRotation(glm::vec3(_bodyPitch, _bodyYaw, _bodyRoll));
|
|
||||||
glm::vec3 headPosition;
|
glm::vec3 headPosition;
|
||||||
if (!_skeletonModel.getHeadPosition(headPosition)) {
|
if (!_skeletonModel.getHeadPosition(headPosition)) {
|
||||||
headPosition = _position;
|
headPosition = _position;
|
||||||
|
|
|
@ -80,6 +80,7 @@ class AvatarData : public NodeData {
|
||||||
Q_PROPERTY(QString chatMessage READ getQStringChatMessage WRITE setChatMessage)
|
Q_PROPERTY(QString chatMessage READ getQStringChatMessage WRITE setChatMessage)
|
||||||
|
|
||||||
Q_PROPERTY(glm::quat orientation READ getOrientation WRITE setOrientation)
|
Q_PROPERTY(glm::quat orientation READ getOrientation WRITE setOrientation)
|
||||||
|
Q_PROPERTY(glm::quat headOrientation READ getHeadOrientation WRITE setHeadOrientation)
|
||||||
Q_PROPERTY(float headPitch READ getHeadPitch WRITE setHeadPitch)
|
Q_PROPERTY(float headPitch READ getHeadPitch WRITE setHeadPitch)
|
||||||
|
|
||||||
Q_PROPERTY(float audioLoudness READ getAudioLoudness WRITE setAudioLoudness)
|
Q_PROPERTY(float audioLoudness READ getAudioLoudness WRITE setAudioLoudness)
|
||||||
|
@ -111,6 +112,9 @@ public:
|
||||||
glm::quat getOrientation() const { return glm::quat(glm::radians(glm::vec3(_bodyPitch, _bodyYaw, _bodyRoll))); }
|
glm::quat getOrientation() const { return glm::quat(glm::radians(glm::vec3(_bodyPitch, _bodyYaw, _bodyRoll))); }
|
||||||
void setOrientation(const glm::quat& orientation);
|
void setOrientation(const glm::quat& orientation);
|
||||||
|
|
||||||
|
glm::quat getHeadOrientation() const { return _headData->getOrientation(); }
|
||||||
|
void setHeadOrientation(const glm::quat& orientation) { _headData->setOrientation(orientation); }
|
||||||
|
|
||||||
// access to Head().set/getMousePitch
|
// access to Head().set/getMousePitch
|
||||||
float getHeadPitch() const { return _headData->getPitch(); }
|
float getHeadPitch() const { return _headData->getPitch(); }
|
||||||
void setHeadPitch(float value) { _headData->setPitch(value); };
|
void setHeadPitch(float value) { _headData->setPitch(value); };
|
||||||
|
|
|
@ -6,6 +6,11 @@
|
||||||
// Copyright (c) 2013 High Fidelity, Inc. All rights reserved.
|
// Copyright (c) 2013 High Fidelity, Inc. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
#include <glm/gtx/quaternion.hpp>
|
||||||
|
|
||||||
|
#include <OctreeConstants.h>
|
||||||
|
|
||||||
|
#include "AvatarData.h"
|
||||||
#include "HeadData.h"
|
#include "HeadData.h"
|
||||||
|
|
||||||
HeadData::HeadData(AvatarData* owningAvatar) :
|
HeadData::HeadData(AvatarData* owningAvatar) :
|
||||||
|
@ -26,6 +31,24 @@ HeadData::HeadData(AvatarData* owningAvatar) :
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
glm::quat HeadData::getOrientation() const {
|
||||||
|
return _owningAvatar->getOrientation() * glm::quat(glm::radians(glm::vec3(_pitch, _yaw, _roll)));
|
||||||
|
}
|
||||||
|
|
||||||
|
void HeadData::setOrientation(const glm::quat& orientation) {
|
||||||
|
// rotate body about vertical axis
|
||||||
|
glm::quat bodyOrientation = _owningAvatar->getOrientation();
|
||||||
|
glm::vec3 newFront = glm::inverse(bodyOrientation) * (orientation * IDENTITY_FRONT);
|
||||||
|
bodyOrientation = bodyOrientation * glm::angleAxis(glm::degrees(atan2f(-newFront.x, -newFront.z)), 0.0f, 1.0f, 0.0f);
|
||||||
|
_owningAvatar->setOrientation(bodyOrientation);
|
||||||
|
|
||||||
|
// the rest goes to the head
|
||||||
|
glm::vec3 eulers = safeEulerAngles(glm::inverse(bodyOrientation) * orientation);
|
||||||
|
_pitch = eulers.x;
|
||||||
|
_yaw = eulers.y;
|
||||||
|
_roll = eulers.z;
|
||||||
|
}
|
||||||
|
|
||||||
void HeadData::addYaw(float yaw) {
|
void HeadData::addYaw(float yaw) {
|
||||||
setYaw(_yaw + yaw);
|
setYaw(_yaw + yaw);
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include <glm/glm.hpp>
|
#include <glm/glm.hpp>
|
||||||
|
#include <glm/gtc/quaternion.hpp>
|
||||||
|
|
||||||
const float MIN_HEAD_YAW = -110;
|
const float MIN_HEAD_YAW = -110;
|
||||||
const float MAX_HEAD_YAW = 110;
|
const float MAX_HEAD_YAW = 110;
|
||||||
|
@ -42,6 +43,9 @@ public:
|
||||||
float getRoll() const { return _roll; }
|
float getRoll() const { return _roll; }
|
||||||
void setRoll(float roll) { _roll = glm::clamp(roll, MIN_HEAD_ROLL, MAX_HEAD_ROLL); }
|
void setRoll(float roll) { _roll = glm::clamp(roll, MIN_HEAD_ROLL, MAX_HEAD_ROLL); }
|
||||||
|
|
||||||
|
glm::quat getOrientation() const;
|
||||||
|
void setOrientation(const glm::quat& orientation);
|
||||||
|
|
||||||
float getAudioLoudness() const { return _audioLoudness; }
|
float getAudioLoudness() const { return _audioLoudness; }
|
||||||
void setAudioLoudness(float audioLoudness) { _audioLoudness = audioLoudness; }
|
void setAudioLoudness(float audioLoudness) { _audioLoudness = audioLoudness; }
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue