当前位置: 首页 > 知识库问答 >
问题:

javascript - 【three.js】地理坐标系的模型如何渲染?

莘羽
2024-03-28

原需求是将模型与地图进行结合渲染,结合的问题解决了。
但是,甲方提出一个需求说是希望使用地理坐标系的模型,这样可以方便后续的一些操作,虽然一时没有想明白,但是还是要做。
我的想法是:
1、模型在给到前端的时候,就已经是从地理坐标系转成了适用的右手坐标系。(这当然是最好的了)
2、在渲染前,可以对three进行一些配置,让其识别地理坐标系。
3、或者在添加到场景前先对所有构件进行坐标的转换。
...

2和3,哪种有可执行的地步呢?亦或是有更好的办法?

共有1个答案

周浩博
2024-03-28

在Three.js中,通常模型是以右手坐标系(即笛卡尔坐标系)进行渲染的。地理坐标系(例如WGS84)是基于经纬度和海拔的,这与Three.js的默认坐标系不同。为了满足甲方需求,将模型从地理坐标系转换到Three.js可以使用的坐标系,有几种可能的方法:

1. 转换模型数据

在模型到达前端之前,将模型数据从地理坐标系转换到笛卡尔坐标系。这通常涉及到复杂的数学运算,因为你需要考虑地球的形状(不是完美的球体,而是椭球体)以及经纬度和海拔到笛卡尔坐标的转换。一旦模型数据被转换,Three.js可以像处理任何其他模型一样处理它。

2. 使用Three.js的内置功能

Three.js 本身不直接支持地理坐标系的渲染,但你可以使用其他库,如three-geo,它允许你使用经纬度坐标来放置物体。这些库通常提供了将地理坐标转换为Three.js坐标系的工具。

3. 自定义转换函数

在将模型添加到Three.js场景之前,编写一个自定义函数来转换模型的每个顶点。这涉及到对每个顶点应用一个转换矩阵,该矩阵将地理坐标转换为笛卡尔坐标。这种方法可能需要较高的编程技能和数学知识。

结论

方法1 可能是最理想的选择,因为它在模型到达前端之前就完成了所有转换工作,从而简化了前端的处理。但是,这可能需要后端支持或模型制作工具的支持,以进行必要的转换。

方法2方法3 都可以在没有后端支持的情况下在前端进行转换。然而,它们可能需要更多的编程工作和对Three.js的深入了解。

总之,选择哪种方法取决于你的具体需求、资源和时间。如果可能的话,我会推荐在模型制作阶段就将其转换为笛卡尔坐标系,这样可以简化前端的工作。

 类似资料:
  • 在课程的第二章对Threejs几何体Geometry和BufferGeometry的顶点概念做过比较多的介绍,讲解过顶点位置坐标数据、顶点颜色数据、顶点法线方向向量数据,不过顶点的UV数据没有去讲解,主要是几何体顶点的纹理坐标数据和纹理贴图的映射有关系,所以放在了本章节去讲解。 纹理UV坐标 纹理坐标含义就是一面意思,一张纹理贴图图像的坐标,选择一张图片,比如以图片左下角为坐标原点,右上角为坐标(

  • 问题内容: 我正在使用THREE.js OBJ加载器将模型导入场景。 我知道我可以很好地导入几何图形,因为当我给它分配MeshNormalMaterial时,它显示的很好。但是,如果我使用任何需要UV坐标的东西,则会出现以下错误: 我知道这是因为加载的OBJ没有UV坐标,但是我想知道是否有任何方法可以生成所需的纹理坐标。我努力了 …但无济于事。 有什么方法可以使用three.js自动生成UV纹理,

  • 问题描述: 我使用three.js来渲染模型,然后我是打算实现分层渲染的效果,所以模型按照层数给到了我,所以就是多个模型一起渲染。 可以看到下面的图片,是有很多模型数据的。我是使用new THREE.Object3D() 或者 new THREE.Group() 来集合这些模型的,然后scene.add(floorGroup)。scene里面的确也是有这些模型数据的存在。 但是实际渲染的时候却只有

  • 本文向大家介绍Cocos2d-x学习笔记之世界坐标系、本地坐标系、opengl坐标系、屏幕坐标系,包括了Cocos2d-x学习笔记之世界坐标系、本地坐标系、opengl坐标系、屏幕坐标系的使用技巧和注意事项,需要的朋友参考一下  cocos2d-x的坐标系很重要,想要学好该引擎,深入理解它的坐标体系很重要。注释写的很清楚了,对照上运行结果一块来看代码吧!

  • threejs的使用过程中,我发现会透光,在一些角度会穿过模型,有些时候不会穿过模型,是怎么回事 threejs的使用过程中,我发现会透光,在一些角度会穿过模型,有些时候不会穿过模型,是怎么回事,希望各位大佬帮忙解决,感谢

  • 问题内容: 我有一个包含地理数据的SQLite数据库。我的表是这样定义的: 接下来,我的软件(Java)使用一个简单的SQL请求来寻找GEO_OBJECTS,如下所示: 从GEO_OBJECTS中选择*纬度<= 123.4和纬度> = 26.32和经度<= 12.41和经度> = 6.23; 如果我在纬度和经度上创建索引,是否可以改善性能? 接下来,当我得到此查询的结果时,我正在使用Haversi