From 4961913fc405a45d59587cee1bd9d5f8f41b494f Mon Sep 17 00:00:00 2001 From: Andrzej Kapolka Date: Thu, 5 Sep 2013 12:20:15 -0700 Subject: [PATCH] Transmit the eye offset position along with the rest of the frustum parameters. --- interface/src/Application.cpp | 3 ++- libraries/avatars/src/AvatarData.cpp | 4 ++++ libraries/avatars/src/AvatarData.h | 3 +++ libraries/shared/src/PacketHeaders.cpp | 2 +- voxel-server/src/VoxelNodeData.cpp | 1 + 5 files changed, 11 insertions(+), 2 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 45a8b39868..8156347bba 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1803,7 +1803,7 @@ void Application::update(float deltaTime) { if (Menu::getInstance()->isOptionChecked(MenuOption::OffAxisProjection)) { if (_faceshift.isActive()) { - const float EYE_OFFSET_SCALE = 0.1f; + const float EYE_OFFSET_SCALE = 0.005f; glm::vec3 position = _faceshift.getHeadTranslation() * EYE_OFFSET_SCALE; _myCamera.setEyeOffsetPosition(glm::vec3(-position.x, position.y, position.z)); resizeGL(_glWidget->width(), _glWidget->height()); @@ -1912,6 +1912,7 @@ void Application::updateAvatar(float deltaTime) { _myAvatar.setCameraAspectRatio(_viewFrustum.getAspectRatio()); _myAvatar.setCameraNearClip(_viewFrustum.getNearClip()); _myAvatar.setCameraFarClip(_viewFrustum.getFarClip()); + _myAvatar.setCameraEyeOffsetPosition(_viewFrustum.getEyeOffsetPosition()); NodeList* nodeList = NodeList::getInstance(); if (nodeList->getOwnerID() != UNKNOWN_NODE_ID) { diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index d7aae578d5..2efb8d3da0 100644 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -165,6 +165,8 @@ int AvatarData::getBroadcastData(unsigned char* destinationBuffer) { destinationBuffer += packFloatRatioToTwoByte(destinationBuffer, _cameraAspectRatio); destinationBuffer += packClipValueToTwoByte(destinationBuffer, _cameraNearClip); destinationBuffer += packClipValueToTwoByte(destinationBuffer, _cameraFarClip); + memcpy(destinationBuffer, &_cameraEyeOffsetPosition, sizeof(_cameraEyeOffsetPosition)); + destinationBuffer += sizeof(_cameraEyeOffsetPosition); // chat message *destinationBuffer++ = _chatMessage.size(); @@ -274,6 +276,8 @@ int AvatarData::parseData(unsigned char* sourceBuffer, int numBytes) { sourceBuffer += unpackFloatRatioFromTwoByte(sourceBuffer,_cameraAspectRatio); sourceBuffer += unpackClipValueFromTwoByte(sourceBuffer,_cameraNearClip); sourceBuffer += unpackClipValueFromTwoByte(sourceBuffer,_cameraFarClip); + memcpy(&_cameraEyeOffsetPosition, sourceBuffer, sizeof(_cameraEyeOffsetPosition)); + sourceBuffer += sizeof(_cameraEyeOffsetPosition); // the rest is a chat message int chatMessageSize = *sourceBuffer++; diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index 4f5e503cf4..7a65893e01 100755 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -88,6 +88,7 @@ public: float getCameraAspectRatio() const { return _cameraAspectRatio; } float getCameraNearClip() const { return _cameraNearClip; } float getCameraFarClip() const { return _cameraFarClip; } + const glm::vec3& getCameraEyeOffsetPosition() const { return _cameraEyeOffsetPosition; } glm::vec3 calculateCameraDirection() const; @@ -98,6 +99,7 @@ public: void setCameraAspectRatio(float aspectRatio) { _cameraAspectRatio = aspectRatio; } void setCameraNearClip(float nearClip) { _cameraNearClip = nearClip; } void setCameraFarClip(float farClip) { _cameraFarClip = farClip; } + void setCameraEyeOffsetPosition(const glm::vec3& eyeOffsetPosition) { _cameraEyeOffsetPosition = eyeOffsetPosition; } // key state void setKeyState(KeyState s) { _keyState = s; } @@ -151,6 +153,7 @@ protected: float _cameraAspectRatio; float _cameraNearClip; float _cameraFarClip; + glm::vec3 _cameraEyeOffsetPosition; // key state KeyState _keyState; diff --git a/libraries/shared/src/PacketHeaders.cpp b/libraries/shared/src/PacketHeaders.cpp index 5a1c3f9b4c..8eb82cea4d 100644 --- a/libraries/shared/src/PacketHeaders.cpp +++ b/libraries/shared/src/PacketHeaders.cpp @@ -20,7 +20,7 @@ PACKET_VERSION versionForPacketType(PACKET_TYPE type) { return 1; case PACKET_TYPE_HEAD_DATA: - return 4; + return 5; case PACKET_TYPE_AVATAR_FACE_VIDEO: return 1; diff --git a/voxel-server/src/VoxelNodeData.cpp b/voxel-server/src/VoxelNodeData.cpp index 443edaaf2c..bdc1de69dc 100644 --- a/voxel-server/src/VoxelNodeData.cpp +++ b/voxel-server/src/VoxelNodeData.cpp @@ -73,6 +73,7 @@ bool VoxelNodeData::updateCurrentViewFrustum() { newestViewFrustum.setAspectRatio(getCameraAspectRatio()); newestViewFrustum.setNearClip(getCameraNearClip()); newestViewFrustum.setFarClip(getCameraFarClip()); + newestViewFrustum.setEyeOffsetPosition(getCameraEyeOffsetPosition()); // if there has been a change, then recalculate if (!newestViewFrustum.matches(_currentViewFrustum)) {