我在Three.js框架中渲染了一些3D对象(JSON和OBJ模型)。现在我需要根据地理坐标将场景渲染到Cesium框架中。
以前有人试过这个吗?如果有人可以分享一些文章或样本申请(即整合Cesium和Three.js),将会很有帮助。
答案 0 :(得分:3)
这个问题现在已经相当陈旧了,在那段时间里,Cesium和Three.js都对名为glTF的3D模型格式提供了更强大的支持,这种模式由Khronos小组(WebGL标准人员)支持。现在,这是渲染3D模型的首选方法(至少在Cesium中)。
Cesium无法支持与Three.js直接集成,部分原因是这两款产品的引擎引擎差别很大。 Three.js力求灵活性和易用性,而Cesium力求在行星级或更大的渲染上获得准确性。许多Cesium的着色器使用位置数据执行64位数学运算(使用单独的32位“高”和“低”属性,for example),这对于13000km宽的行星上的毫米级精度是必需的。铯还有一个使用multiple view frustums的系统,允许太阳系大小的渲染(例如,最接近1米或更近的平面,最远的1e11 km或更远的平面。这不适用于单个传递一个典型的WebGL深度缓冲区,因此Cesium将总视图体积减少到3或4个部分以完成它。
一般来说,我建议你应该为你正在尝试的工作选择正确的渲染引擎,使用相关功能和可用引擎优势的知识。我不认为尝试将两个引擎混合在一起是正确的答案。
答案 1 :(得分:1)
对于您想要做的事情没有单一的答案,并且在任一项目中都没有开箱即用的支持。从理论上讲,应该可以在各种三个对象周围编写包装器并将它们转换为Cesium等价物。 (例如,Three.Mesh可能很容易映射到Cesium.Primitive。)事实上没有人这样做(据我所知)让我怀疑它的用处有限。 (虽然我认为三个适配器无论如何都会很酷)
在大多数情况下,放弃three.js并在Cesium中做所有事情可能更容易。例如,使用Cesium的BoxGeometry而不是Three.BoxGeometry。
答案 2 :(得分:1)
要将.obj添加到cesium,您可以使用blender将您的3d模型导出为collada .dae文件, 然后使用' collada来gltf'转换器位于[http://cesiumjs.org/convertmodel.html] 将其转换为.glb(gl binary)
然后在您的html中,您可以将对象作为实体添加到查看器中。例如,
{{1}}