Merge pull request #790 from PhilipRosedale/touchLook

Touch-driven pitch happens immediately even when wearing gyros
This commit is contained in:
ZappoMan 2013-08-06 10:39:57 -07:00
commit 13408b607e
5 changed files with 8 additions and 7 deletions

View file

@ -2587,7 +2587,6 @@ void Application::updateAvatar(float deltaTime) {
glm::vec3(_headCameraPitchYawScale, glm::vec3(_headCameraPitchYawScale,
_headCameraPitchYawScale, _headCameraPitchYawScale,
_headCameraPitchYawScale), _headCameraPitchYawScale),
0.f,
_pitchFromTouch); _pitchFromTouch);
if (_serialHeadSensor.isActive()) { if (_serialHeadSensor.isActive()) {

View file

@ -295,8 +295,8 @@ void Avatar::reset() {
// Update avatar head rotation with sensor data // Update avatar head rotation with sensor data
void Avatar::updateFromGyrosAndOrWebcam(bool gyroLook, void Avatar::updateFromGyrosAndOrWebcam(bool gyroLook,
const glm::vec3& amplifyAngle, const glm::vec3& amplifyAngle,
float yawFromTouch,
float pitchFromTouch) { float pitchFromTouch) {
_head.setMousePitch(pitchFromTouch);
SerialInterface* gyros = Application::getInstance()->getSerialHeadSensor(); SerialInterface* gyros = Application::getInstance()->getSerialHeadSensor();
Webcam* webcam = Application::getInstance()->getWebcam(); Webcam* webcam = Application::getInstance()->getWebcam();
glm::vec3 estimatedPosition, estimatedRotation; glm::vec3 estimatedPosition, estimatedRotation;
@ -308,7 +308,6 @@ void Avatar::updateFromGyrosAndOrWebcam(bool gyroLook,
} else { } else {
_head.setPitch(pitchFromTouch); _head.setPitch(pitchFromTouch);
_head.setYaw(yawFromTouch);
return; return;
} }
if (webcam->isActive()) { if (webcam->isActive()) {
@ -334,8 +333,8 @@ void Avatar::updateFromGyrosAndOrWebcam(bool gyroLook,
} else { } else {
_head.getFace().clearFrame(); _head.getFace().clearFrame();
} }
_head.setPitch(estimatedRotation.x * amplifyAngle.x + pitchFromTouch); _head.setPitch(estimatedRotation.x * amplifyAngle.x);
_head.setYaw(estimatedRotation.y * amplifyAngle.y + yawFromTouch); _head.setYaw(estimatedRotation.y * amplifyAngle.y);
_head.setRoll(estimatedRotation.z * amplifyAngle.z); _head.setRoll(estimatedRotation.z * amplifyAngle.z);
_head.setCameraFollowsHead(gyroLook); _head.setCameraFollowsHead(gyroLook);

View file

@ -124,7 +124,6 @@ public:
void follow(Avatar* leadingAvatar); void follow(Avatar* leadingAvatar);
void updateFromGyrosAndOrWebcam(bool gyroLook, void updateFromGyrosAndOrWebcam(bool gyroLook,
const glm::vec3& amplifyAngle, const glm::vec3& amplifyAngle,
float yawFromTouch,
float pitchFromTouch); float pitchFromTouch);
void addBodyYaw(float bodyYaw) {_bodyYaw += bodyYaw;}; void addBodyYaw(float bodyYaw) {_bodyYaw += bodyYaw;};
void addBodyYawDelta(float bodyYawDelta) {_bodyYawDelta += bodyYawDelta;} void addBodyYawDelta(float bodyYawDelta) {_bodyYawDelta += bodyYawDelta;}

View file

@ -84,6 +84,7 @@ Head::Head(Avatar* owningAvatar) :
_rightEyeBlinkVelocity(0.0f), _rightEyeBlinkVelocity(0.0f),
_timeWithoutTalking(0.0f), _timeWithoutTalking(0.0f),
_cameraPitch(_pitch), _cameraPitch(_pitch),
_mousePitch(0.f),
_cameraYaw(_yaw), _cameraYaw(_yaw),
_isCameraMoving(false), _isCameraMoving(false),
_cameraFollowsHead(false), _cameraFollowsHead(false),
@ -428,7 +429,7 @@ glm::quat Head::getOrientation() const {
glm::quat Head::getCameraOrientation () const { glm::quat Head::getCameraOrientation () const {
Avatar* owningAvatar = static_cast<Avatar*>(_owningAvatar); Avatar* owningAvatar = static_cast<Avatar*>(_owningAvatar);
return owningAvatar->getWorldAlignedOrientation() return owningAvatar->getWorldAlignedOrientation()
* glm::quat(glm::radians(glm::vec3(_cameraPitch, _cameraYaw, 0.0f))); * glm::quat(glm::radians(glm::vec3(_cameraPitch + _mousePitch, _cameraYaw, 0.0f)));
} }
void Head::renderHeadSphere() { void Head::renderHeadSphere() {

View file

@ -57,6 +57,8 @@ public:
void setCameraFollowsHead(bool cameraFollowsHead) { _cameraFollowsHead = cameraFollowsHead; } void setCameraFollowsHead(bool cameraFollowsHead) { _cameraFollowsHead = cameraFollowsHead; }
void setMousePitch(float mousePitch) { _mousePitch = mousePitch; }
glm::quat getOrientation() const; glm::quat getOrientation() const;
glm::quat getCameraOrientation () const; glm::quat getCameraOrientation () const;
@ -123,6 +125,7 @@ private:
float _rightEyeBlinkVelocity; float _rightEyeBlinkVelocity;
float _timeWithoutTalking; float _timeWithoutTalking;
float _cameraPitch; // Used to position the camera differently from the head float _cameraPitch; // Used to position the camera differently from the head
float _mousePitch;
float _cameraYaw; float _cameraYaw;
bool _isCameraMoving; bool _isCameraMoving;
bool _cameraFollowsHead; bool _cameraFollowsHead;