From 062c1b4c640cab42c445411873e5032eee2a2b7c Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Tue, 14 May 2013 11:10:40 -0700 Subject: [PATCH] tweaks to view frustum delta code --- voxel-server/src/VoxelAgentData.cpp | 29 ++++++++++++++++++----------- voxel-server/src/VoxelAgentData.h | 5 ++++- 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/voxel-server/src/VoxelAgentData.cpp b/voxel-server/src/VoxelAgentData.cpp index df61a0d6f8..b265ccb2ba 100644 --- a/voxel-server/src/VoxelAgentData.cpp +++ b/voxel-server/src/VoxelAgentData.cpp @@ -51,23 +51,30 @@ VoxelAgentData* VoxelAgentData::clone() const { return new VoxelAgentData(*this); } -void VoxelAgentData::updateViewFrustum() { - // save our currentViewFrustum into our lastKnownViewFrustum - _lastKnownViewFrustum = _currentViewFrustum; - +bool VoxelAgentData::updateCurrentViewFrustum() { + bool currentViewFrustumChanged = false; + ViewFrustum newestViewFrustum; // get position and orientation details from the camera - _currentViewFrustum.setPosition(getCameraPosition()); - _currentViewFrustum.setOrientation(getCameraDirection(), getCameraUp(), getCameraRight()); + newestViewFrustum.setPosition(getCameraPosition()); + newestViewFrustum.setOrientation(getCameraDirection(), getCameraUp(), getCameraRight()); // Also make sure it's got the correct lens details from the camera - _currentViewFrustum.setFieldOfView(getCameraFov()); - _currentViewFrustum.setAspectRatio(getCameraAspectRatio()); - _currentViewFrustum.setNearClip(getCameraNearClip()); - _currentViewFrustum.setFarClip(getCameraFarClip()); + newestViewFrustum.setFieldOfView(getCameraFov()); + newestViewFrustum.setAspectRatio(getCameraAspectRatio()); + newestViewFrustum.setNearClip(getCameraNearClip()); + newestViewFrustum.setFarClip(getCameraFarClip()); // if there has been a change, then recalculate - if (!_lastKnownViewFrustum.matches(_currentViewFrustum)) { + if (!newestViewFrustum.matches(_currentViewFrustum)) { + _currentViewFrustum = newestViewFrustum; _currentViewFrustum.calculate(); + currentViewFrustumChanged = true; } + return currentViewFrustumChanged; +} + +void VoxelAgentData::updateLastKnownViewFrustum() { + // save our currentViewFrustum into our lastKnownViewFrustum + _lastKnownViewFrustum = _currentViewFrustum; } diff --git a/voxel-server/src/VoxelAgentData.h b/voxel-server/src/VoxelAgentData.h index cb88c05574..4bdbb6069d 100644 --- a/voxel-server/src/VoxelAgentData.h +++ b/voxel-server/src/VoxelAgentData.h @@ -44,7 +44,10 @@ public: ViewFrustum& getCurrentViewFrustum() { return _currentViewFrustum; }; ViewFrustum& getLastKnownViewFrustum() { return _lastKnownViewFrustum; }; - void updateViewFrustum(); + // These are not classic setters because they are calculating and maintaining state + // which is set asynchronously through the network receive + bool updateCurrentViewFrustum(); + void updateLastKnownViewFrustum(); private: unsigned char* _voxelPacket;