mirror of
https://github.com/overte-org/overte.git
synced 2025-07-28 18:00:21 +02:00
More LOD renaming with focus on angles
This commit is contained in:
parent
6db6890bac
commit
0d5260bccc
6 changed files with 15 additions and 15 deletions
|
@ -6818,7 +6818,7 @@ void Application::updateRenderArgs(float deltaTime) {
|
||||||
_viewFrustum.calculate();
|
_viewFrustum.calculate();
|
||||||
}
|
}
|
||||||
appRenderArgs._renderArgs = RenderArgs(_graphicsEngine.getGPUContext(), lodManager->getVisibilityDistance(),
|
appRenderArgs._renderArgs = RenderArgs(_graphicsEngine.getGPUContext(), lodManager->getVisibilityDistance(),
|
||||||
lodManager->getBoundaryLevelAdjust(), lodManager->getLODAngleHalfTan(), RenderArgs::DEFAULT_RENDER_MODE,
|
lodManager->getBoundaryLevelAdjust(), lodManager->getLODHalfAngleTan(), RenderArgs::DEFAULT_RENDER_MODE,
|
||||||
RenderArgs::MONO, RenderArgs::DEFERRED, RenderArgs::RENDER_DEBUG_NONE);
|
RenderArgs::MONO, RenderArgs::DEFERRED, RenderArgs::RENDER_DEBUG_NONE);
|
||||||
appRenderArgs._renderArgs._scene = getMain3DScene();
|
appRenderArgs._renderArgs._scene = getMain3DScene();
|
||||||
|
|
||||||
|
|
|
@ -173,12 +173,12 @@ void LODManager::autoAdjustLOD(float realTimeDelta) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
float LODManager::getLODAngleHalfTan() const {
|
float LODManager::getLODHalfAngleTan() const {
|
||||||
return getPerspectiveAccuracyAngleTan(_visibilityDistance, _boundaryLevelAdjust);
|
return getPerspectiveAccuracyHalfAngleTan(_visibilityDistance, _boundaryLevelAdjust);
|
||||||
|
|
||||||
}
|
}
|
||||||
float LODManager::getLODAngle() const {
|
float LODManager::getLODAngle() const {
|
||||||
return 2.0f * atanf(getLODAngleHalfTan());
|
return 2.0f * atanf(getLODHalfAngleTan());
|
||||||
}
|
}
|
||||||
float LODManager::getLODAngleDeg() const {
|
float LODManager::getLODAngleDeg() const {
|
||||||
return glm::degrees(getLODAngle());
|
return glm::degrees(getLODAngle());
|
||||||
|
|
|
@ -201,7 +201,7 @@ public:
|
||||||
|
|
||||||
float getLODAngleDeg() const;
|
float getLODAngleDeg() const;
|
||||||
void setLODAngleDeg(float lodAngle);
|
void setLODAngleDeg(float lodAngle);
|
||||||
float getLODAngleHalfTan() const;
|
float getLODHalfAngleTan() const;
|
||||||
float getLODAngle() const;
|
float getLODAngle() const;
|
||||||
float getVisibilityDistance() const;
|
float getVisibilityDistance() const;
|
||||||
void setVisibilityDistance(float distance);
|
void setVisibilityDistance(float distance);
|
||||||
|
|
|
@ -18,17 +18,17 @@
|
||||||
#include <AABox.h>
|
#include <AABox.h>
|
||||||
#include <AACube.h>
|
#include <AACube.h>
|
||||||
|
|
||||||
float boundaryDistanceForRenderLevel(unsigned int renderLevel, float voxelSizeScale) {
|
float boundaryDistanceForRenderLevel(unsigned int renderLevel, float visibilityDistance) {
|
||||||
return voxelSizeScale / powf(2.0f, renderLevel);
|
return visibilityDistance / powf(2.0f, renderLevel);
|
||||||
}
|
}
|
||||||
|
|
||||||
float getPerspectiveAccuracyAngleTan(float visibilityDistance, int boundaryLevelAdjust) {
|
float getPerspectiveAccuracyHalfAngleTan(float visibilityDistance, int boundaryLevelAdjust) {
|
||||||
float visibleDistanceAtMaxScale = boundaryDistanceForRenderLevel(boundaryLevelAdjust, visibilityDistance);
|
float visibleDistanceAtMaxScale = boundaryDistanceForRenderLevel(boundaryLevelAdjust, visibilityDistance);
|
||||||
return UNIT_ELEMENT_MAX_EXTENT / visibleDistanceAtMaxScale; // TODO: consider renaming this function to half tangent because we're taking into account a factor of 1/2
|
return UNIT_ELEMENT_MAX_EXTENT / visibleDistanceAtMaxScale;
|
||||||
}
|
}
|
||||||
|
|
||||||
float getPerspectiveAccuracyAngle(float visibilityDistance, int boundaryLevelAdjust) {
|
float getPerspectiveAccuracyHalfAngle(float visibilityDistance, int boundaryLevelAdjust) {
|
||||||
return atan(getPerspectiveAccuracyAngleTan(visibilityDistance, boundaryLevelAdjust));
|
return atan(getPerspectiveAccuracyHalfAngleTan(visibilityDistance, boundaryLevelAdjust));
|
||||||
}
|
}
|
||||||
|
|
||||||
float getOrthographicAccuracySize(float visibilityDistance, int boundaryLevelAdjust) {
|
float getOrthographicAccuracySize(float visibilityDistance, int boundaryLevelAdjust) {
|
||||||
|
|
|
@ -20,10 +20,10 @@ class AABox;
|
||||||
class AACube;
|
class AACube;
|
||||||
class QJsonDocument;
|
class QJsonDocument;
|
||||||
|
|
||||||
float boundaryDistanceForRenderLevel(unsigned int renderLevel, float voxelSizeScale);
|
float boundaryDistanceForRenderLevel(unsigned int renderLevel, float visibilityDistance);
|
||||||
|
|
||||||
float getPerspectiveAccuracyAngleTan(float visibilityDistance, int boundaryLevelAdjust);
|
float getPerspectiveAccuracyHalfAngleTan(float visibilityDistance, int boundaryLevelAdjust);
|
||||||
float getPerspectiveAccuracyAngle(float visibilityDistance, int boundaryLevelAdjust);
|
float getPerspectiveAccuracyHalfAngle(float visibilityDistance, int boundaryLevelAdjust);
|
||||||
float getOrthographicAccuracySize(float visibilityDistance, int boundaryLevelAdjust);
|
float getOrthographicAccuracySize(float visibilityDistance, int boundaryLevelAdjust);
|
||||||
|
|
||||||
// MIN_ELEMENT_ANGULAR_DIAMETER = angular diameter of 1x1x1m cube at 400m = sqrt(3) / 400 = 0.0043301 radians ~= 0.25 degrees
|
// MIN_ELEMENT_ANGULAR_DIAMETER = angular diameter of 1x1x1m cube at 400m = sqrt(3) / 400 = 0.0043301 radians ~= 0.25 degrees
|
||||||
|
|
|
@ -120,7 +120,7 @@ void DrawSceneOctree::run(const RenderContextPointer& renderContext, const ItemS
|
||||||
|
|
||||||
// Draw the LOD Reticle
|
// Draw the LOD Reticle
|
||||||
{
|
{
|
||||||
float angle = glm::degrees(getPerspectiveAccuracyAngle(args->_sizeScale, args->_boundaryLevelAdjust));
|
float angle = glm::degrees(getPerspectiveAccuracyHalfAngle(args->_sizeScale, args->_boundaryLevelAdjust));
|
||||||
Transform crosshairModel;
|
Transform crosshairModel;
|
||||||
crosshairModel.setTranslation(glm::vec3(0.0, 0.0, -1000.0));
|
crosshairModel.setTranslation(glm::vec3(0.0, 0.0, -1000.0));
|
||||||
crosshairModel.setScale(1000.0f * tanf(glm::radians(angle))); // Scaling at the actual tan of the lod angle => Multiplied by TWO
|
crosshairModel.setScale(1000.0f * tanf(glm::radians(angle))); // Scaling at the actual tan of the lod angle => Multiplied by TWO
|
||||||
|
|
Loading…
Reference in a new issue