move view frustum management to VoxelAgentData class

This commit is contained in:
ZappoMan 2013-05-13 15:40:27 -07:00
parent 12a5ab6ea2
commit 02d0dbbfba
3 changed files with 30 additions and 19 deletions

View file

@ -50,3 +50,24 @@ VoxelAgentData::VoxelAgentData(const VoxelAgentData &otherAgentData) {
VoxelAgentData* VoxelAgentData::clone() const {
return new VoxelAgentData(*this);
}
void VoxelAgentData::updateViewFrustum() {
// save our currentViewFrustum into our lastKnownViewFrustum
lastKnownViewFrustum = currentViewFrustum;
// get position and orientation details from the camera
currentViewFrustum.setPosition(getCameraPosition());
currentViewFrustum.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());
// if there has been a change, then recalculate
if (!lastKnownViewFrustum.matches(currentViewFrustum)) {
currentViewFrustum.calculate();
}
}

View file

@ -40,6 +40,12 @@ public:
void setMaxLevelReached(int maxLevelReached) { _maxLevelReachedInLastSearch = maxLevelReached; }
VoxelNodeBag nodeBag;
ViewFrustum currentViewFrustum;
ViewFrustum lastKnownViewFrustum;
void updateViewFrustum();
private:
unsigned char* _voxelPacket;
unsigned char* _voxelPacketAt;

View file

@ -109,8 +109,6 @@ void resInVoxelDistributor(AgentList* agentList,
AgentList::iterator& agent,
VoxelAgentData* agentData,
ViewFrustum& viewFrustum) {
printf("resInVoxelDistributor()\n");
bool searchReset = false;
int searchLoops = 0;
int searchLevelWas = agentData->getMaxSearchLevel();
@ -228,9 +226,6 @@ void deepestLevelVoxelDistributor(AgentList* agentList,
AgentList::iterator& agent,
VoxelAgentData* agentData,
ViewFrustum& viewFrustum) {
printf("deepestLevelVoxelDistributor()\n");
int maxLevelReached = 0;
double start = usecTimestampNow();
if (agentData->nodeBag.isEmpty()) {
@ -340,23 +335,12 @@ void *distributeVoxelsToListeners(void *args) {
// Sometimes the agent data has not yet been linked, in which case we can't really do anything
if (agentData) {
ViewFrustum viewFrustum;
// get position and orientation details from the camera
viewFrustum.setPosition(agentData->getCameraPosition());
viewFrustum.setOrientation(agentData->getCameraDirection(), agentData->getCameraUp(), agentData->getCameraRight());
// Also make sure it's got the correct lens details from the camera
viewFrustum.setFieldOfView(agentData->getCameraFov());
viewFrustum.setAspectRatio(agentData->getCameraAspectRatio());
viewFrustum.setNearClip(agentData->getCameraNearClip());
viewFrustum.setFarClip(agentData->getCameraFarClip());
viewFrustum.calculate();
agentData->updateViewFrustum();
if (agentData->getWantResIn()) {
resInVoxelDistributor(agentList, agent, agentData, viewFrustum);
resInVoxelDistributor(agentList, agent, agentData, agentData->currentViewFrustum);
} else {
deepestLevelVoxelDistributor(agentList, agent, agentData, viewFrustum);
deepestLevelVoxelDistributor(agentList, agent, agentData, agentData->currentViewFrustum);
}
}
}