From 3c3a3fc82e65b90d1e444ad61f0683fd961a7e9f Mon Sep 17 00:00:00 2001 From: Jeffrey Ventrella Date: Wed, 22 May 2013 13:12:11 -0700 Subject: [PATCH] cleaning up look at code - Stephen helped find a transmission bug - fixed. --- interface/src/Avatar.cpp | 24 ++++++++-------- interface/src/Camera.cpp | 17 ++++++++---- interface/src/Camera.h | 13 +++++++++ interface/src/Head.cpp | 41 ++++++++-------------------- interface/src/Head.h | 4 ++- libraries/avatars/src/AvatarData.cpp | 4 +-- 6 files changed, 54 insertions(+), 49 deletions(-) diff --git a/interface/src/Avatar.cpp b/interface/src/Avatar.cpp index 1528753975..eed61a622a 100644 --- a/interface/src/Avatar.cpp +++ b/interface/src/Avatar.cpp @@ -20,10 +20,6 @@ #include #include -//test -static glm::vec3 headLean(0.0f, 0.0f, 0.0f); - - using namespace std; const bool BALLS_ON = false; @@ -395,13 +391,14 @@ void Avatar::simulate(float deltaTime, Transmitter* transmitter) { } // set head lookat position - if ((_interactingOther) - && (_isMine)) { - _head.setLookAtPosition(_interactingOther->getSpringyHeadPosition()); - } else { - _head.setLookAtPosition(glm::vec3(0.0f, 0.0f, 0.0f)); + if (_isMine) { + if (_interactingOther) { + _head.setLookAtPosition(_interactingOther->getApproximateEyePosition()); + } else { + _head.setLookAtPosition(glm::vec3(0.0f, 0.0f, 0.0f)); + } } - + _head.setBodyRotation (glm::vec3(_bodyPitch, _bodyYaw, _bodyRoll)); _head.setPosition(_joint[ AVATAR_JOINT_HEAD_BASE ].springyPosition); _head.setScale (_joint[ AVATAR_JOINT_HEAD_BASE ].radius); @@ -417,6 +414,11 @@ void Avatar::simulate(float deltaTime, Transmitter* transmitter) { } } +glm::vec3 Avatar::getApproximateEyePosition() { + + return _head.getApproximateEyePosition(); +} + void Avatar::checkForMouseRayTouching() { for (int b = 0; b < NUM_AVATAR_JOINTS; b++) { @@ -722,7 +724,7 @@ void Avatar::render(bool lookingInMirror, glm::vec3 cameraPosition) { //render body renderBody(lookingInMirror); - + // if this is my avatar, then render my interactions with the other avatar if (_isMine) { _avatarTouch.render(_cameraPosition); diff --git a/interface/src/Camera.cpp b/interface/src/Camera.cpp index 4cba3cc66e..b408135c40 100644 --- a/interface/src/Camera.cpp +++ b/interface/src/Camera.cpp @@ -37,18 +37,25 @@ Camera::Camera() { _idealPosition = glm::vec3(0.0, 0.0, 0.0); _orientation.setToIdentity(); - for (int m = 0; m < NUM_CAMERA_MODES; m ++) { - _attributes[m].upShift = 0.0f; - _attributes[m].distance = 0.0f; - _attributes[m].tightness = 0.0f; + _attributes[CAMERA_MODE_FIRST_PERSON].upShift = CAMERA_DEFAULT_FIRST_PERSON_MODE_UP_SHIFT; + _attributes[CAMERA_MODE_FIRST_PERSON].distance = CAMERA_DEFAULT_FIRST_PERSON_MODE_DISTANCE; + _attributes[CAMERA_MODE_FIRST_PERSON].tightness = CAMERA_DEFAULT_FIRST_PERSON_MODE_TIGHTNESS; + + _attributes[CAMERA_MODE_THIRD_PERSON].upShift = CAMERA_DEFAULT_THIRD_PERSON_MODE_UP_SHIFT; + _attributes[CAMERA_MODE_THIRD_PERSON].distance = CAMERA_DEFAULT_THIRD_PERSON_MODE_DISTANCE; + _attributes[CAMERA_MODE_THIRD_PERSON].tightness = CAMERA_DEFAULT_THIRD_PERSON_MODE_TIGHTNESS; + + _attributes[CAMERA_MODE_MIRROR ].upShift = CAMERA_DEFAULT_MIRROR_MODE_UP_SHIFT; + _attributes[CAMERA_MODE_MIRROR ].distance = CAMERA_DEFAULT_MIRROR_MODE_DISTANCE; + _attributes[CAMERA_MODE_MIRROR ].tightness = CAMERA_DEFAULT_MIRROR_MODE_TIGHTNESS; + for (int m = 0; m < NUM_CAMERA_MODES; m ++) { _previousAttributes[m].upShift = 0.0f; _previousAttributes[m].distance = 0.0f; _previousAttributes[m].tightness = 0.0f; } } - void Camera::update(float deltaTime) { if (_mode != CAMERA_MODE_NULL) { diff --git a/interface/src/Camera.h b/interface/src/Camera.h index 8b70a06504..b01839d97a 100644 --- a/interface/src/Camera.h +++ b/interface/src/Camera.h @@ -21,6 +21,19 @@ enum CameraMode NUM_CAMERA_MODES }; + +const float CAMERA_DEFAULT_FIRST_PERSON_MODE_UP_SHIFT = 0.0f; +const float CAMERA_DEFAULT_FIRST_PERSON_MODE_DISTANCE = 0.0f; +const float CAMERA_DEFAULT_FIRST_PERSON_MODE_TIGHTNESS = 100.0f; + +const float CAMERA_DEFAULT_THIRD_PERSON_MODE_UP_SHIFT = -0.2f; +const float CAMERA_DEFAULT_THIRD_PERSON_MODE_DISTANCE = 1.5f; +const float CAMERA_DEFAULT_THIRD_PERSON_MODE_TIGHTNESS = 8.0f; + +const float CAMERA_DEFAULT_MIRROR_MODE_UP_SHIFT = 0.0f; +const float CAMERA_DEFAULT_MIRROR_MODE_DISTANCE = 0.2f; +const float CAMERA_DEFAULT_MIRROR_MODE_TIGHTNESS = 100.0f; + class Camera { public: diff --git a/interface/src/Head.cpp b/interface/src/Head.cpp index 520fda0151..a8be6cc35a 100644 --- a/interface/src/Head.cpp +++ b/interface/src/Head.cpp @@ -104,7 +104,11 @@ void Head::simulate(float deltaTime, bool isMine) { float clamp = 0.01; if (_browAudioLift > clamp) { _browAudioLift = clamp; } - _browAudioLift *= 0.7f; + _browAudioLift *= 0.7f; + +//add comment when done... +processLookat(); + } @@ -124,33 +128,9 @@ void Head::setLooking(bool looking) { */ -void Head::setLookAtPosition(const glm::vec3& lookAtPosition) { +void Head::processLookat() { - _lookAtPosition = lookAtPosition; - - _lookingAtSomething = true; - -/* - if ( fabs(lookAtPosition.x + lookAtPosition.y + lookAtPosition.z) == 0.0 ) { // a lookatPosition of 0,0,0 signifies NOT looking - _lookingAtSomething = false; - } else { - _lookingAtSomething = true; - } - - glm::vec3 averageEyePosition = _leftEyePosition + (_rightEyePosition - _leftEyePosition ) * ONE_HALF; - glm::vec3 targetLookatAxis = glm::normalize(_lookAtPosition - averageEyePosition); - float dot = glm::dot(targetLookatAxis, _orientation.getFront()); - if (dot < MINIMUM_EYE_ROTATION) { - _lookingAtSomething = false; - } - */ - - - -_lookingAtSomething = true; - -/* - if ( fabs(lookAtPosition.x + lookAtPosition.y + lookAtPosition.z) == 0.0 ) { // a lookatPosition of 0,0,0 signifies NOT looking + if ( fabs(_lookAtPosition.x + _lookAtPosition.y + _lookAtPosition.z) == 0.0 ) { // a lookatPosition of 0,0,0 signifies NOT looking _lookingAtSomething = false; } else { glm::vec3 averageEyePosition = _leftEyePosition + (_rightEyePosition - _leftEyePosition ) * ONE_HALF; @@ -159,12 +139,13 @@ _lookingAtSomething = true; if (dot < MINIMUM_EYE_ROTATION) { _lookingAtSomething = false; } else { - _lookAtPosition = lookAtPosition; _lookingAtSomething = true; } } - */ - +} + +glm::vec3 Head::getApproximateEyePosition() { + return _leftEyePosition + (_rightEyePosition - _leftEyePosition ) * ONE_HALF; } diff --git a/interface/src/Head.h b/interface/src/Head.h index 5254e71610..28230701f3 100644 --- a/interface/src/Head.h +++ b/interface/src/Head.h @@ -44,10 +44,11 @@ public: void setAudioLoudness (float audioLoudness ) { _audioLoudness = audioLoudness; } void setReturnToCenter (bool returnHeadToCenter) { _returnHeadToCenter = returnHeadToCenter; } - void setLookAtPosition (const glm::vec3& lookAtPosition); // overrides method in HeadData + //void setLookAtPosition (const glm::vec3& lookAtPosition); // overrides method in HeadData const bool getReturnToCenter() const { return _returnHeadToCenter; } // Do you want head to try to return to center (depends on interface detected) float getAverageLoudness() {return _averageLoudness;}; + glm::vec3 getApproximateEyePosition(); float yawRate; float noise; @@ -86,6 +87,7 @@ private: void renderMouth(); void debugRenderLookatVectors(glm::vec3 leftEyePosition, glm::vec3 rightEyePosition, glm::vec3 lookatPosition); void calculateGeometry( bool lookingInMirror); + void processLookat(); }; #endif diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index 498e43cc28..ab69c28dd0 100644 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -97,7 +97,7 @@ int AvatarData::getBroadcastData(unsigned char* destinationBuffer) { // Lookat Position memcpy(destinationBuffer, &_headData->_lookAtPosition, sizeof(_headData->_lookAtPosition)); destinationBuffer += sizeof(_headData->_lookAtPosition); - + // Hand State (0 = not grabbing, 1 = grabbing) memcpy(destinationBuffer, &_handState, sizeof(char)); destinationBuffer += sizeof(char); @@ -191,7 +191,7 @@ int AvatarData::parseData(unsigned char* sourceBuffer, int numBytes) { // Lookat Position memcpy(&_headData->_lookAtPosition, sourceBuffer, sizeof(_headData->_lookAtPosition)); sourceBuffer += sizeof(_headData->_lookAtPosition); - + // Hand State memcpy(&_handState, sourceBuffer, sizeof(char)); sourceBuffer += sizeof(char);