3DTile 的geometricError含义

本文深入解析3DTile格式中的geometricError概念,通过代码分析揭示其为对象外包球直径,随相机位置变化计算屏幕投影像素大小。geometricError在3D场景中扮演关键角色,用于评估细节级别。

一、说明

之前接触过3DTile 的格式说明,一直对geometricError(单位是米)没有透彻了解,从表面意思“几何误差”简直是让人一头雾水,今天就透过代码看本质,geometricError 表达到底是什么意思。

二、 核心代码算法

在 Cesium3DTile中的getScreenSpaceError 的方法,下面列出了核心代码。


      var camera = frameState.camera;
        var frustum = camera.frustum;
        var context = frameState.context;
        var width = context.drawingBufferWidth;
        var height = context.drawingBufferHeight;
        var error;

      // Avoid divide by zero when viewer is inside the tile
       var distance = Math.max(this._distanceToCamera, CesiumMath.EPSILON7);
       var sseDenominator = camera.frustum.sseDenominator;
       error = (geometricError * height) / (distance * sseDenominator);

error = (geometricError *屏幕高度)/(到相机距离 * 比例分母)

啊! 比例分母是什么的东东,看下面代码。

  frustum._sseDenominator = 2.0 * Math.tan(0.5 * frustum._fovy);

在这里先说一个结论:geometricError 就是一个对象外包球的直径,会根据相机位置计算投影屏幕所站的像素大小。下面就分析这个算法过程。

三、 算法分析

先看下面这个图:
在这里插入图片描述

首先要指定fov角的一半对应也是屏幕高的一半

tan(a)的值约等于,当距离比geometricError大很多倍的时候。
tan(α)≈geometricError(2∗distance) tan(\alpha) \approx \frac {geometricError} {(2*distance)} tan(α)(2distance)geometricError</

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值