mirror of
https://github.com/overte-org/overte.git
synced 2025-06-17 14:40:46 +02:00
added support for lower LOD when moving with low res moving
This commit is contained in:
parent
57ce20d3ce
commit
241bd7ce37
3 changed files with 25 additions and 16 deletions
|
@ -1169,7 +1169,7 @@ int VoxelTree::encodeTreeBitstreamRecursion(VoxelNode* node, unsigned char* outp
|
||||||
// caller can pass NULL as viewFrustum if they want everything
|
// caller can pass NULL as viewFrustum if they want everything
|
||||||
if (params.viewFrustum) {
|
if (params.viewFrustum) {
|
||||||
float distance = node->distanceToCamera(*params.viewFrustum);
|
float distance = node->distanceToCamera(*params.viewFrustum);
|
||||||
float boundaryDistance = boundaryDistanceForRenderLevel(*node->getOctalCode() + 1);
|
float boundaryDistance = boundaryDistanceForRenderLevel(node->getLevel() + params.boundaryLevelAdjust);
|
||||||
|
|
||||||
// If we're too far away for our render level, then just return
|
// If we're too far away for our render level, then just return
|
||||||
if (distance >= boundaryDistance) {
|
if (distance >= boundaryDistance) {
|
||||||
|
@ -1297,7 +1297,8 @@ int VoxelTree::encodeTreeBitstreamRecursion(VoxelNode* node, unsigned char* outp
|
||||||
if (childIsInView) {
|
if (childIsInView) {
|
||||||
// Before we determine consider this further, let's see if it's in our LOD scope...
|
// Before we determine consider this further, let's see if it's in our LOD scope...
|
||||||
float distance = distancesToChildren[i]; // params.viewFrustum ? childNode->distanceToCamera(*params.viewFrustum) : 0;
|
float distance = distancesToChildren[i]; // params.viewFrustum ? childNode->distanceToCamera(*params.viewFrustum) : 0;
|
||||||
float boundaryDistance = params.viewFrustum ? boundaryDistanceForRenderLevel(*childNode->getOctalCode() + 1) : 1;
|
float boundaryDistance = !params.viewFrustum ? 1 :
|
||||||
|
boundaryDistanceForRenderLevel(childNode->getLevel() + params.boundaryLevelAdjust);
|
||||||
|
|
||||||
if (distance < boundaryDistance) {
|
if (distance < boundaryDistance) {
|
||||||
inViewCount++;
|
inViewCount++;
|
||||||
|
@ -1353,7 +1354,8 @@ int VoxelTree::encodeTreeBitstreamRecursion(VoxelNode* node, unsigned char* outp
|
||||||
if (params.viewFrustum && childNode->isColored() && !childNode->isLeaf()) {
|
if (params.viewFrustum && childNode->isColored() && !childNode->isLeaf()) {
|
||||||
int grandChildrenInView = 0;
|
int grandChildrenInView = 0;
|
||||||
int grandChildrenInLOD = 0;
|
int grandChildrenInLOD = 0;
|
||||||
float grandChildBoundaryDistance = boundaryDistanceForRenderLevel(childNode->getLevel() + 2);
|
float grandChildBoundaryDistance = boundaryDistanceForRenderLevel(childNode->getLevel() +
|
||||||
|
1 + params.boundaryLevelAdjust);
|
||||||
for (int grandChildIndex = 0; grandChildIndex < NUMBER_OF_CHILDREN; grandChildIndex++) {
|
for (int grandChildIndex = 0; grandChildIndex < NUMBER_OF_CHILDREN; grandChildIndex++) {
|
||||||
VoxelNode* grandChild = childNode->getChildAtIndex(grandChildIndex);
|
VoxelNode* grandChild = childNode->getChildAtIndex(grandChildIndex);
|
||||||
|
|
||||||
|
|
|
@ -33,6 +33,8 @@ typedef enum {GRADIENT, RANDOM, NATURAL} creationMode;
|
||||||
#define WANT_OCCLUSION_CULLING true
|
#define WANT_OCCLUSION_CULLING true
|
||||||
#define IGNORE_COVERAGE_MAP NULL
|
#define IGNORE_COVERAGE_MAP NULL
|
||||||
#define DONT_CHOP 0
|
#define DONT_CHOP 0
|
||||||
|
#define NO_BOUNDARY_ADJUST 0
|
||||||
|
#define LOW_RES_MOVING_ADJUST 1
|
||||||
|
|
||||||
class EncodeBitstreamParams {
|
class EncodeBitstreamParams {
|
||||||
public:
|
public:
|
||||||
|
@ -46,6 +48,7 @@ public:
|
||||||
const ViewFrustum* lastViewFrustum;
|
const ViewFrustum* lastViewFrustum;
|
||||||
bool wantOcclusionCulling;
|
bool wantOcclusionCulling;
|
||||||
long childWasInViewDiscarded;
|
long childWasInViewDiscarded;
|
||||||
|
int boundaryLevelAdjust;
|
||||||
|
|
||||||
CoverageMap* map;
|
CoverageMap* map;
|
||||||
|
|
||||||
|
@ -58,18 +61,20 @@ public:
|
||||||
bool deltaViewFrustum = false,
|
bool deltaViewFrustum = false,
|
||||||
const ViewFrustum* lastViewFrustum = IGNORE_VIEW_FRUSTUM,
|
const ViewFrustum* lastViewFrustum = IGNORE_VIEW_FRUSTUM,
|
||||||
bool wantOcclusionCulling= NO_OCCLUSION_CULLING,
|
bool wantOcclusionCulling= NO_OCCLUSION_CULLING,
|
||||||
CoverageMap* map = IGNORE_COVERAGE_MAP) :
|
CoverageMap* map = IGNORE_COVERAGE_MAP,
|
||||||
maxEncodeLevel (maxEncodeLevel),
|
int boundaryLevelAdjust = NO_BOUNDARY_ADJUST) :
|
||||||
maxLevelReached (0),
|
maxEncodeLevel (maxEncodeLevel),
|
||||||
viewFrustum (viewFrustum),
|
maxLevelReached (0),
|
||||||
includeColor (includeColor),
|
viewFrustum (viewFrustum),
|
||||||
includeExistsBits (includeExistsBits),
|
includeColor (includeColor),
|
||||||
chopLevels (chopLevels),
|
includeExistsBits (includeExistsBits),
|
||||||
deltaViewFrustum (deltaViewFrustum),
|
chopLevels (chopLevels),
|
||||||
lastViewFrustum (lastViewFrustum),
|
deltaViewFrustum (deltaViewFrustum),
|
||||||
wantOcclusionCulling(wantOcclusionCulling),
|
lastViewFrustum (lastViewFrustum),
|
||||||
childWasInViewDiscarded(0),
|
wantOcclusionCulling (wantOcclusionCulling),
|
||||||
map (map)
|
childWasInViewDiscarded (0),
|
||||||
|
boundaryLevelAdjust (boundaryLevelAdjust),
|
||||||
|
map (map)
|
||||||
{}
|
{}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -262,10 +262,12 @@ void deepestLevelVoxelDistributor(NodeList* nodeList,
|
||||||
VoxelNode* subTree = nodeData->nodeBag.extract();
|
VoxelNode* subTree = nodeData->nodeBag.extract();
|
||||||
bool wantOcclusionCulling = nodeData->getWantOcclusionCulling();
|
bool wantOcclusionCulling = nodeData->getWantOcclusionCulling();
|
||||||
CoverageMap* coverageMap = wantOcclusionCulling ? &nodeData->map : IGNORE_COVERAGE_MAP;
|
CoverageMap* coverageMap = wantOcclusionCulling ? &nodeData->map : IGNORE_COVERAGE_MAP;
|
||||||
|
int boundaryLevelAdjust = viewFrustumChanged && nodeData->getWantLowResMoving()
|
||||||
|
? LOW_RES_MOVING_ADJUST : NO_BOUNDARY_ADJUST;
|
||||||
|
|
||||||
EncodeBitstreamParams params(INT_MAX, &nodeData->getCurrentViewFrustum(), wantColor,
|
EncodeBitstreamParams params(INT_MAX, &nodeData->getCurrentViewFrustum(), wantColor,
|
||||||
WANT_EXISTS_BITS, DONT_CHOP, wantDelta, lastViewFrustum,
|
WANT_EXISTS_BITS, DONT_CHOP, wantDelta, lastViewFrustum,
|
||||||
wantOcclusionCulling, coverageMap);
|
wantOcclusionCulling, coverageMap, boundaryLevelAdjust);
|
||||||
|
|
||||||
bytesWritten = serverTree.encodeTreeBitstream(subTree, &tempOutputBuffer[0], MAX_VOXEL_PACKET_SIZE - 1,
|
bytesWritten = serverTree.encodeTreeBitstream(subTree, &tempOutputBuffer[0], MAX_VOXEL_PACKET_SIZE - 1,
|
||||||
nodeData->nodeBag, params);
|
nodeData->nodeBag, params);
|
||||||
|
|
Loading…
Reference in a new issue