From 0d26bb4266a49453c7469b6d64ab877bb7808e07 Mon Sep 17 00:00:00 2001 From: Philip Rosedale Date: Wed, 7 Aug 2013 14:08:30 -0700 Subject: [PATCH 1/6] Camera always stops moving when using gyro's --- interface/src/Audio.h | 1 + interface/src/avatar/Head.cpp | 8 ++++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/interface/src/Audio.h b/interface/src/Audio.h index 249453c877..e60e33d613 100644 --- a/interface/src/Audio.h +++ b/interface/src/Audio.h @@ -51,6 +51,7 @@ public: void lowPassFilter(int16_t* inputBuffer); void startCollisionSound(float magnitude, float frequency, float noise, float duration); + float getCollisionSoundMagnitude() { return _collisionSoundMagnitude; }; int getSongFileBytes() { return _songFileBytes; } diff --git a/interface/src/avatar/Head.cpp b/interface/src/avatar/Head.cpp index f4b1603e8f..f35b09895e 100644 --- a/interface/src/avatar/Head.cpp +++ b/interface/src/avatar/Head.cpp @@ -238,8 +238,12 @@ void Head::simulate(float deltaTime, bool isMine, float gyroCameraSensitivity) { const float CAMERA_STOP_TOLERANCE_DEGREES = 0.5f; const float PITCH_START_RANGE = 20.f; const float YAW_START_RANGE = 10.f; - float pitchStartTolerance = PITCH_START_RANGE * (1.f - gyroCameraSensitivity); - float yawStartTolerance = YAW_START_RANGE * (1.f - gyroCameraSensitivity); + float pitchStartTolerance = PITCH_START_RANGE + * (1.f - gyroCameraSensitivity) + + (2.f * CAMERA_STOP_TOLERANCE_DEGREES); + float yawStartTolerance = YAW_START_RANGE + * (1.f - gyroCameraSensitivity) + + (2.f * CAMERA_STOP_TOLERANCE_DEGREES); float cameraHeadAngleDifference = glm::length(glm::vec2(_pitch - _cameraPitch, _yaw - _cameraYaw)); if (_isCameraMoving) { From c48652c2c38905491e5cf953e7d5de233df330cf Mon Sep 17 00:00:00 2001 From: atlante45 Date: Wed, 7 Aug 2013 14:28:21 -0700 Subject: [PATCH 2/6] Display leap hand and rave glove in first person mode --- interface/src/Application.cpp | 16 +++++++--------- interface/src/avatar/Avatar.cpp | 4 +++- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 61317cc4dd..7dda72bc51 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -3110,16 +3110,14 @@ void Application::displaySide(Camera& whichCamera) { } // Render my own Avatar - if (_myCamera.getMode() != CAMERA_MODE_FIRST_PERSON) { - if (_myCamera.getMode() == CAMERA_MODE_MIRROR) { - _myAvatar.getHead().setLookAtPosition(_myCamera.getPosition()); - } - _myAvatar.render(_lookingInMirror->isChecked(), _renderAvatarBalls->isChecked()); - _myAvatar.setDisplayingLookatVectors(_renderLookatOn->isChecked()); + if (_myCamera.getMode() == CAMERA_MODE_MIRROR) { + _myAvatar.getHead().setLookAtPosition(_myCamera.getPosition()); + } + _myAvatar.render(_lookingInMirror->isChecked(), _renderAvatarBalls->isChecked()); + _myAvatar.setDisplayingLookatVectors(_renderLookatOn->isChecked()); - if (_renderLookatIndicatorOn->isChecked() && _isLookingAtOtherAvatar) { - renderLookatIndicator(_lookatOtherPosition, whichCamera); - } + if (_renderLookatIndicatorOn->isChecked() && _isLookingAtOtherAvatar) { + renderLookatIndicator(_lookatOtherPosition, whichCamera); } } diff --git a/interface/src/avatar/Avatar.cpp b/interface/src/avatar/Avatar.cpp index f425ffefbc..e05d015ff5 100755 --- a/interface/src/avatar/Avatar.cpp +++ b/interface/src/avatar/Avatar.cpp @@ -1422,7 +1422,9 @@ float Avatar::getBallRenderAlpha(int ball, bool lookingInMirror) const { void Avatar::renderBody(bool lookingInMirror, bool renderAvatarBalls) { - if (_head.getFace().isFullFrame()) { + if (Application::getInstance()->getCamera()->getMode() == CAMERA_MODE_FIRST_PERSON) { + // Dont display body + } else if (_head.getFace().isFullFrame()) { // Render the full-frame video float alpha = getBallRenderAlpha(BODY_BALL_HEAD_BASE, lookingInMirror); if (alpha > 0.0f) { From 0445da3221bff643dcbd3e581118a8037f94930c Mon Sep 17 00:00:00 2001 From: Philip Rosedale Date: Wed, 7 Aug 2013 14:42:57 -0700 Subject: [PATCH 3/6] Stop rotating more quickly, display avatar position and yaw stats --- interface/src/Application.cpp | 9 +++++++-- interface/src/avatar/Avatar.cpp | 8 +++++++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index f7423f73c7..d5292004c5 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -3307,7 +3307,7 @@ void Application::displayStats() { int statsVerticalOffset = 8; char stats[200]; - sprintf(stats, "%3.0f FPS, %d Pkts/sec, %3.2f Mbps", + sprintf(stats, "%3.0f FPS, %d Pkts/sec, %3.2f Mbps ", _fps, _packetsPerSecond, (float)_bytesPerSecond * 8.f / 1000000.f); drawtext(10, statsVerticalOffset + 15, 0.10f, 0, 1.0, 0, stats); @@ -3338,11 +3338,16 @@ void Application::displayStats() { pingVoxel = totalPingVoxel/voxelServerCount; } - char pingStats[200]; sprintf(pingStats, "Ping audio/avatar/voxel: %d / %d / %d avg %d max ", pingAudio, pingAvatar, pingVoxel, pingVoxelMax); drawtext(10, statsVerticalOffset + 35, 0.10f, 0, 1.0, 0, pingStats); } + + char avatarStats[200]; + glm::vec3 avatarPos = _myAvatar.getPosition(); + sprintf(avatarStats, "Avatar position: %.3f, %.3f, %.3f, yaw = %.2f", avatarPos.x, avatarPos.y, avatarPos.z, _myAvatar.getBodyYaw()); + drawtext(10, statsVerticalOffset + 55, 0.10f, 0, 1.0, 0, avatarStats); + std::stringstream voxelStats; voxelStats.precision(4); diff --git a/interface/src/avatar/Avatar.cpp b/interface/src/avatar/Avatar.cpp index c8f60ef51e..13899693aa 100755 --- a/interface/src/avatar/Avatar.cpp +++ b/interface/src/avatar/Avatar.cpp @@ -31,7 +31,6 @@ const bool BALLS_ON = false; const bool USING_AVATAR_GRAVITY = true; const glm::vec3 DEFAULT_UP_DIRECTION (0.0f, 1.0f, 0.0f); const float YAW_MAG = 500.0; -const float BODY_SPIN_FRICTION = 5.0; const float MY_HAND_HOLDING_PULL = 0.2; const float YOUR_HAND_HOLDING_PULL = 1.0; const float BODY_SPRING_DEFAULT_TIGHTNESS = 1000.0f; @@ -659,12 +658,19 @@ void Avatar::simulate(float deltaTime, Transmitter* transmitter, float gyroCamer orientation = orientation * glm::quat(glm::radians( glm::vec3(_bodyPitchDelta, _bodyYawDelta, _bodyRollDelta) * deltaTime)); // decay body rotation momentum + + const float BODY_SPIN_FRICTION = 7.5f; float bodySpinMomentum = 1.0 - BODY_SPIN_FRICTION * deltaTime; if (bodySpinMomentum < 0.0f) { bodySpinMomentum = 0.0f; } _bodyPitchDelta *= bodySpinMomentum; _bodyYawDelta *= bodySpinMomentum; _bodyRollDelta *= bodySpinMomentum; + float MINIMUM_ROTATION_RATE = 2.0f; + if (fabs(_bodyYawDelta) < MINIMUM_ROTATION_RATE) { _bodyYawDelta = 0.f; } + if (fabs(_bodyRollDelta) < MINIMUM_ROTATION_RATE) { _bodyRollDelta = 0.f; } + if (fabs(_bodyPitchDelta) < MINIMUM_ROTATION_RATE) { _bodyPitchDelta = 0.f; } + const float MAX_STATIC_FRICTION_VELOCITY = 0.5f; const float STATIC_FRICTION_STRENGTH = _scale * 20.f; applyStaticFriction(deltaTime, _velocity, MAX_STATIC_FRICTION_VELOCITY, STATIC_FRICTION_STRENGTH); From 20fea6b0ad3e37da4094546fe6c3944d58394a6c Mon Sep 17 00:00:00 2001 From: atlante45 Date: Wed, 7 Aug 2013 14:50:35 -0700 Subject: [PATCH 4/6] Height relative collision rdius when not in first person --- interface/src/avatar/Avatar.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/interface/src/avatar/Avatar.cpp b/interface/src/avatar/Avatar.cpp index e05d015ff5..13e4dc2416 100755 --- a/interface/src/avatar/Avatar.cpp +++ b/interface/src/avatar/Avatar.cpp @@ -637,8 +637,13 @@ void Avatar::simulate(float deltaTime, Transmitter* transmitter, float gyroCamer if (_isCollisionsOn) { Camera* myCamera = Application::getInstance()->getCamera(); - _collisionRadius = myCamera->getAspectRatio() * (myCamera->getNearClip() / cos(myCamera->getFieldOfView() / 2.f)); - _collisionRadius *= COLLISION_RADIUS_SCALAR; + + if (myCamera->getMode() == CAMERA_MODE_FIRST_PERSON) { + _collisionRadius = myCamera->getAspectRatio() * (myCamera->getNearClip() / cos(myCamera->getFieldOfView() / 2.f)); + _collisionRadius *= COLLISION_RADIUS_SCALAR; + } else { + _collisionRadius = _height * .125f; + } updateCollisionWithEnvironment(deltaTime); updateCollisionWithVoxels(deltaTime); From 8cadca4ce7e7937b8250af15e7fe8d8b418391c0 Mon Sep 17 00:00:00 2001 From: Hifi Test Account Date: Wed, 7 Aug 2013 15:35:12 -0700 Subject: [PATCH 5/6] Resize half cylinder backing to texture in full frame mode. --- interface/src/avatar/Face.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/interface/src/avatar/Face.cpp b/interface/src/avatar/Face.cpp index 1949fa6c8c..6b12219edb 100644 --- a/interface/src/avatar/Face.cpp +++ b/interface/src/avatar/Face.cpp @@ -262,8 +262,11 @@ bool Face::render(float alpha) { zScale = xScale * 0.3f; glPushMatrix(); + glScalef(0.5f * xScale, 0.5f * xScale / aspect, zScale); glColor4f(1.0f, 1.0f, 1.0f, alpha); - glScalef(xScale / 12, xScale / (aspect * 3), zScale / 2); + Application::getInstance()->getGeometryCache()->renderHalfCylinder(25, 20); + glRotatef(180, 0, 1, 0); + glRotatef(180, 1, 0, 0); Application::getInstance()->getGeometryCache()->renderHalfCylinder(25, 20); glPopMatrix(); } else { From 38651a6a402b37af533c27ddec2d070e37e263dc Mon Sep 17 00:00:00 2001 From: Hifi Test Account Date: Wed, 7 Aug 2013 16:04:45 -0700 Subject: [PATCH 6/6] Translate half cylinder backing rather than rotate a 2nd one. --- interface/src/avatar/Face.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/interface/src/avatar/Face.cpp b/interface/src/avatar/Face.cpp index 6b12219edb..5bcfba2334 100644 --- a/interface/src/avatar/Face.cpp +++ b/interface/src/avatar/Face.cpp @@ -262,12 +262,10 @@ bool Face::render(float alpha) { zScale = xScale * 0.3f; glPushMatrix(); - glScalef(0.5f * xScale, 0.5f * xScale / aspect, zScale); + glTranslatef(0.0f, -0.2f, 0.0f); + glScalef(0.5f * xScale, xScale / aspect, zScale); glColor4f(1.0f, 1.0f, 1.0f, alpha); Application::getInstance()->getGeometryCache()->renderHalfCylinder(25, 20); - glRotatef(180, 0, 1, 0); - glRotatef(180, 1, 0, 0); - Application::getInstance()->getGeometryCache()->renderHalfCylinder(25, 20); glPopMatrix(); } else { aspect = _aspectRatio;