使用地理坐标代替笛卡尔在 Argon 和 A 形框架中绘制

2023-11-30

我想创建一个GPS绘图Argon 和 A-Frame 程序根据人们的动作绘制线条。

可以用 A 形框架绘制线条,例如网格线组件它使用笛卡尔点:

<a-entity meshline="lineWidth: 20; path: -2 -1 0, 0 -2 0</a-entity>

如果我使用 GPS 设备执行此操作,我会获取 GPS 坐标并将其直接映射到 Google 地图等设备。 Argon 是否有任何类似的功能,以便我可以直接使用 GPS 坐标作为路径,如下所示:

<a-entity meshline="lineWidth: 20; path: 37.32299 -122.04185 0, 37.32298 -122.03224</a-entity>

由于可以为参考系指定一个 LLA 点,我想实现这一点的一种方法是将中心 LLA 点设想为“0, 0, 0”,然后使用函数将 LLA 域映射到笛卡尔范围。

然而,最好直接使用地理坐标。这在Argon 中可能吗?


要理解答案,您需要首先了解 Argon 使用的各种参考系。

首先,Argon 利用 cesiumjs.org 的地理空间数学库和实体,因此 Argon 中的所有“位置”必须以地理空间方式表示或相对于地理空间实体。它们植根于地球的中心,也就是铯所说的FIXED坐标,但也称为 ECEF 或 ECF 坐标。在该系统中,坐标以米为单位,上/下穿过两极,东/西穿过子午线(我相信)。地球表面的任何点都用相当大的数字表示。

这个坐标系很好,因为我们可以使用它精确地表示地球上或地球附近的任何物体。铯还支持INERTIAL坐标,用于表示近地轨道物体,并且可以在两个坐标系之间进行转换。

但是,由于以下几个原因,做 AR 时很不方便:

  1. 用于表示观看者及其附近物体位置的数字非常大,即使它们非常接近,这可能会导致数学准确性问题,尤其是在 3D 图形系统中。

  2. 当我们思考周围的世界时,我们“思考”的坐标将地面视为“平坦”,将“向上”视为指向......好吧,向上。因此,在 3D 图形中,另一个对象上方的对象通常具有相同的 X 和 Z 值,但 Y 值更大。在 ECEF 坐标中,所有数字都会发生变化,因为我们感知的“向上”实际上是从地球中心穿过我们的矢量,并且只有当我们在北方(或南方,取决于您的+)时才是“向上” /-) 极。您可能想要使用的大多数 3D 图形库(例如物理库)都假设一个世界,其中地面是一个平面(通常是 XZ 平面)并且 Y 向上(一些航空和其他工程应用使用 Z 作为向上)并以 XY 作为地面,但问题是相同的)。

与许多地理空间 AR 系统一样,Argon 通过创建一个供图形和应用程序使用的本地坐标系来解决这个问题。实际上有三种选择:

  1. 选择一些任意(但固定)的本地地点作为原点。有些系统是为在一个地方工作而构建的,对此进行了硬编码。其他人让应用程序设置它。我们不这样做是因为它会鼓励应用程序采取简单的路径并且只在一个地方工作(我们过去已经看到过这种情况)。

  2. 将本地位置设置为相机。这样做的优点是数学是最“准确”的,因为所有点都是相对于相机表示的。但是,这会导致两个问题。首先,在 AR 应用程序中,相机往往会连续移动(即使只是由于传感器噪声)。其次,许多库(同样,像物理库)假设系统的起源是稳定的并且在地球上,相机/用户在其中移动。这些问题可以解决,但对于应用程序开发人员来说处理起来很乏味。

  3. 将本地坐标的原点设置为用户附近的任意位置,如果用户远离它,则自动居中。这样做的优点是程序不必做太多处理来处理它,并且它与 3D 图形库很好地配合。缺点是局部坐标是任意的,并且每次运行程序时都可能不同。但是,应用程序开发人员可能必须注意原点何时居中。

Argon 使用 open 3。当应用程序启动时,我们在用户位置(与地球相切的平面上)创建一个新的局部坐标系。如果用户远离该位置,我们会更新原点并向应用程序发出一个事件(目前,如果您距离原点 5 公里,我们会重新居中)。在许多简单的应用程序中,只有几个帧或以地理空间坐标表示的参考(以及相对于已知地理空间位置表示的其余应用程序数据),从地理空间到本地的转换只需在每个帧中完成,从而允许应用程序开发人员忽略重入问题。程序员可以自由使用 ENU(东北上)或 EUS(东上南)作为坐标系;我们倾向于使用 EUS,因为它与大多数 3D 图形系统使用的类似(Y 向上,Z 指向南,X 指向东)。

我们选择这种方法的原因之一是,我们过去发现,如果我们有可预测的本地坐标,应用程序开发人员将使用这些坐标来存储数据,即使这不是一个好主意(您的数据现在与一些相对任意的坐标相关联)应用程序特定的坐标系,现在只能在该位置工作)。

那么,现在回答你的问题。您的问题是您想在 AFrame 中使用地理空间(铯的坐标,argon 使用的)坐标。简而言之,您不能直接使用它们,因为 AFrame 是假设本地 3D 图形坐标系构建的。 argon-aframe 包通过允许您指定将 aframe 绑定到 argonreferenceframe将 a 实体定位在氩/铯地理空间位置的组件,并为您处理所有内部转换。

当我编写该代码时,假设作者将使用本地 3D 图形坐标创建内容,并将这些图形块附加到位于世界中的实体上referenceframe's.

为了使 AFrame 中的各个坐标与地理空间位置相对应,您需要自己进行管理,也许可以通过创建一个组件来为您完成此操作,或者(如果数据在开始时已知)通过预先转换它。

这就是我要做的。

假设您有一个地理空间坐标列表(表示为 LLA),我会将每个坐标转换为本地坐标(首先从 LLA 转换为 Cesium 的 FIXED ECEF 坐标并创建一个 Cesium 实体,然后调用 Argon 的context.getEntityPose()在该实体上(这将返回它的本地坐标)。我会在集合中选择一个地理空间位置(也许是第一个?),然后从每个位置中减去它的本地坐标,以便它们都以相对于该已知地理空间位置的本地坐标表示。

然后,我将创建一个附加到该唯一地理空间实体的参考框架的 AFrame 实体,并使用相对于它表示的本地坐标在其中创建图形内容。例如,假设地理空间位置是LongLat = "-84.398881 33.778463"并且您存储了这些点(本地坐标,相对于LongLat) in userPath,你可以这样做:

<ar-scene>
  <ar-geopose id="GT" lla=" -84.398881 33.778463" userotation="false"> 
    <a-entity meshline="lineWidth: 20; path: userPath; color: #E20049"></a-entity>
 </ar-geopose>    
</ar-scene>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用地理坐标代替笛卡尔在 Argon 和 A 形框架中绘制 的相关文章

随机推荐

  • Objective-C 单例对象和全局变量

    我知道有关此主题的其他帖子 但我实际上只是从新手的阶梯上爬升的一个人 所以需要更多帮助 我的 iPhone 应用程序有几个全局变量 其中一些变量是我在类中声明并给定值的 但其他变量需要在登录过程中设置 例如令牌 然后需要可以从任何类访问应用
  • 如何通过 .NET 代码压缩和修复 ACCESS 2007 数据库?

    我需要压缩并修复 Access 2007 accdb 数据库文件 我知道 JRO JetEngine 可以使用 mdb 文件执行此操作 但我需要通过代码修复较新版本的 2007 格式 有什么建议么 EDIT 事情是这样的 我发现我可以使用
  • 有没有办法找到带有标准库的应用程序的路径?

    我想知道是否可以在 Windows 7 下找到具有标准 python 2 7 库的应用程序 例如 MS Excel 的安装目录 我的意思是 它不应该使用任何 pywin32 或 xlrd 等 也许它会查找注册表来找到安装路径 这可能非常棘手
  • 删除图像中的所有水平线和垂直线

    我想删除所有水平和垂直线 但一些小的垂直线没有被删除 添加输入和输出图像以及下面的代码 string ImageUrl C Users Jayant Desktop test images rtaImage tiff Image
  • Next.js defaultLocale 创建到同一页面的两条路由(带前缀和不带前缀)

    根据子路径路由文档对于 Next js i8n 默认区域设置没有前缀 但我的问题是 将其添加到我的 next config js 时 i18n locales en defaultLocale en localeDetection fals
  • 从 LambdaMetafactory 创建 BiConsumer

    我试图通过 LambdaMetafactory 动态创建 BiConsumer 类型的方法引用 我试图应用在https www cuba platform com blog think twice before using reflecti
  • HTTPS 连接 Python

    我正在尝试验证该目标是否公开了 https Web 服务 我有通过 HTTP 连接的代码 但我不确定如何通过 HTTPS 连接 我读过您使用 SSL 但我也读到它不支持证书错误 我得到的代码来自 python 文档 import httpl
  • 无需 jQuery 即可更改元素文本?

    我试图在不使用 jQuery 的情况下更改 div 的内容 我想通过 id 或 class 选择 div 我已经设法让附加工作 function appendHtml targetC htmldata var theDiv document
  • 使用 FFMPEG 从 FPS 不正确的视频和包含每帧时间戳的文件创建具有正确 FPS 的视频

    我有一个从网络摄像头捕获并在 python 中使用 OpenCV 的视频文件 网络摄像头标称 FPS 为 30 FPS 但由于环境的原因 实际 FPS 有所不同 有时可能低至 24 FPS 录制的视频是使用 OpenCV 创建的VideoW
  • 如何使 $_GET 更安全?

    我正在使用 get 方法来执行一些操作 例如批准 标记垃圾邮件 删除 评论系统 我知道走这条路非常不安全 但我无能为力 因为使用 GET 方法的原因是使用 PHP SELF 在页面本身内执行操作 仅供参考 我也使用带有复选框的 post 方
  • 如何优化云Firestore中的读写操作?

    我目前正在编写一个 React Firebase 项目用于学习目的 我想知道我应该采取哪种方法来有效地从 Firebase 中读取数据 说我有这个只读称为产品的集合 其中包含大约 5000 个文档 因此当用户访问我的 React 应用程序时
  • Curl 命令在 bash 脚本中不起作用

    我正在尝试使用 bash 脚本将 JSON 文件上传到我的 noSQL 数据库中 但它不起作用 我不明白为什么 这是脚本 test evaluation none test test command curl XPUT localhost
  • AngularJS 的预检选项请求不适用于 Chrome?

    我使用 AngularJS 托管开发了一个简单的应用程序here 我正在使用我自己在 Laravel 托管中开发的 APIhere 当我尝试使用 Firefox 登录该应用程序时 它工作正常 我的 API 接受飞行前 OPTIONS 请求并
  • 客户端/服务器 GKSession

    我有一个设置的应用程序 如果用户选择设备作为服务器 它会在服务器模式下创建一个 GKSession 如果它选择 cient 它会在客户端模式下创建一个 GKSession 目前发生的情况是服务器正在发送数据 这只是一个包含服务器时间的字符串
  • 在运行时使用 Guice 通过类型和 TypeLiterals 重建泛型类型

    我有几种类似的类型 a value that is aware of its key type K Bar
  • 对于提供大量数据的查询的最佳 MySQL 设置?

    我是一名科学家 我使用 MySQL 作为数值模拟结果的存储 通常 我有一组通过实验获得的数据和一组控制集 这两个数据集存储在一张表中 一个指示器字段告诉我记录是来自实验还是来自控制集 该表通常有大约 1 亿条记录 5000 万次实验和 50
  • Select2 JS 使用Ajax加载远程数据

    我正在使用 Select2 JS 版本 4 0 0 rc 1 并且在使用远程 Ajax 方法加载建议时遇到问题 以下是标记和代码
  • Android XML 中的异常

    每次启动应用程序时我都会遇到异常 这是异常的堆栈跟踪 10 01 14 49 35 321 WARN WindowManager 61 Exception when adding starting window 10 01 14 49 35
  • 如何删除 Android 中的 FATAL EXCEPTION: AsyncTask

    10 23 00 41 00 705 E AndroidRuntime 3622 FATAL EXCEPTION AsyncTask 1 10 23 00 41 00 705 E AndroidRuntime 3622 java lang
  • 使用地理坐标代替笛卡尔在 Argon 和 A 形框架中绘制

    我想创建一个GPS绘图Argon 和 A Frame 程序根据人们的动作绘制线条 可以用 A 形框架绘制线条 例如网格线组件它使用笛卡尔点