mirror of
https://github.com/overte-org/overte.git
synced 2025-04-21 20:44:14 +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 {
|
||||
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; }
|
||||
|
||||
VoxelNodeBag nodeBag;
|
||||
|
||||
ViewFrustum currentViewFrustum;
|
||||
ViewFrustum lastKnownViewFrustum;
|
||||
|
||||
void updateViewFrustum();
|
||||
|
||||
private:
|
||||
unsigned char* _voxelPacket;
|
||||
unsigned char* _voxelPacketAt;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue