mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-09 05:17:08 +02:00
move view frustum management to VoxelAgentData class
This commit is contained in:
parent
12a5ab6ea2
commit
02d0dbbfba
3 changed files with 30 additions and 19 deletions
|
@ -50,3 +50,24 @@ VoxelAgentData::VoxelAgentData(const VoxelAgentData &otherAgentData) {
|
||||||
VoxelAgentData* VoxelAgentData::clone() const {
|
VoxelAgentData* VoxelAgentData::clone() const {
|
||||||
return new VoxelAgentData(*this);
|
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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -40,6 +40,12 @@ public:
|
||||||
void setMaxLevelReached(int maxLevelReached) { _maxLevelReachedInLastSearch = maxLevelReached; }
|
void setMaxLevelReached(int maxLevelReached) { _maxLevelReachedInLastSearch = maxLevelReached; }
|
||||||
|
|
||||||
VoxelNodeBag nodeBag;
|
VoxelNodeBag nodeBag;
|
||||||
|
|
||||||
|
ViewFrustum currentViewFrustum;
|
||||||
|
ViewFrustum lastKnownViewFrustum;
|
||||||
|
|
||||||
|
void updateViewFrustum();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
unsigned char* _voxelPacket;
|
unsigned char* _voxelPacket;
|
||||||
unsigned char* _voxelPacketAt;
|
unsigned char* _voxelPacketAt;
|
||||||
|
|
|
@ -109,8 +109,6 @@ void resInVoxelDistributor(AgentList* agentList,
|
||||||
AgentList::iterator& agent,
|
AgentList::iterator& agent,
|
||||||
VoxelAgentData* agentData,
|
VoxelAgentData* agentData,
|
||||||
ViewFrustum& viewFrustum) {
|
ViewFrustum& viewFrustum) {
|
||||||
|
|
||||||
printf("resInVoxelDistributor()\n");
|
|
||||||
bool searchReset = false;
|
bool searchReset = false;
|
||||||
int searchLoops = 0;
|
int searchLoops = 0;
|
||||||
int searchLevelWas = agentData->getMaxSearchLevel();
|
int searchLevelWas = agentData->getMaxSearchLevel();
|
||||||
|
@ -228,9 +226,6 @@ void deepestLevelVoxelDistributor(AgentList* agentList,
|
||||||
AgentList::iterator& agent,
|
AgentList::iterator& agent,
|
||||||
VoxelAgentData* agentData,
|
VoxelAgentData* agentData,
|
||||||
ViewFrustum& viewFrustum) {
|
ViewFrustum& viewFrustum) {
|
||||||
|
|
||||||
printf("deepestLevelVoxelDistributor()\n");
|
|
||||||
|
|
||||||
int maxLevelReached = 0;
|
int maxLevelReached = 0;
|
||||||
double start = usecTimestampNow();
|
double start = usecTimestampNow();
|
||||||
if (agentData->nodeBag.isEmpty()) {
|
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
|
// Sometimes the agent data has not yet been linked, in which case we can't really do anything
|
||||||
if (agentData) {
|
if (agentData) {
|
||||||
ViewFrustum viewFrustum;
|
agentData->updateViewFrustum();
|
||||||
// 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();
|
|
||||||
|
|
||||||
if (agentData->getWantResIn()) {
|
if (agentData->getWantResIn()) {
|
||||||
resInVoxelDistributor(agentList, agent, agentData, viewFrustum);
|
resInVoxelDistributor(agentList, agent, agentData, agentData->currentViewFrustum);
|
||||||
} else {
|
} else {
|
||||||
deepestLevelVoxelDistributor(agentList, agent, agentData, viewFrustum);
|
deepestLevelVoxelDistributor(agentList, agent, agentData, agentData->currentViewFrustum);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue