【小沐学AR】小沐带您遨游太阳系(model-viewer,trimesh,Python)

文章目录

  • 1、准备工作
    • 1.1 gltf
    • 1.2 usdz
    • 1.3 trimesh (python)
    • 1.4 model-viewer (javascript, WebAR)
  • 2、八大行星
    • 2.1 Mercury(水星)
    • 2.2 Venus(金星)
    • 2.3 Earth(地球)
    • 2.4 Mars(火星)
    • 2.5 Jupiter (木星)
    • 2.6 Saturn(土星)
    • 2.7 Uranus(天王星)
    • 2.8 Neptune(海王星)
    • 2.9 Pluto(冥王星)
  • 结语

【小沐学AR】小沐带您遨游太阳系(model-viewer,trimesh,Python)_第1张图片

1、准备工作

1.1 gltf

glTF™ 是一种免版税规范,用于通过引擎和应用程序高效传输和加载 3D 场景和模型。glTF 最小化 3D 资产的大小,以及解包和使用它们所需的运行时处理。glTF 定义了一种可扩展的发布格式,通过在整个行业中实现 3D 内容的互操作使用来简化创作工作流程和交互式服务。
【小沐学AR】小沐带您遨游太阳系(model-viewer,trimesh,Python)_第2张图片

详情请见作者的另一篇文章:
【GIS开发】glTF和b3dm文件格式读取(C++,Python)

1.2 usdz

https://graphics.pixar.com/usd/release/spec_usdz.html
“在WWDC 2018大会上,苹果宣布正在与皮克斯合作,为AR创作提供一个叫做“USDZ”(Universal Scene Description)的新文件格式。并且,Adobe、Autodesk、Sketchfab、Pixar、PTC、Quixel等众多应用程序都将支持此格式。”

USDZ基于皮克斯的USD工具。简单来说, USDZ就是将多个USD源文件和渲染对象所需的其它资源不压缩、不加密地合并成一个更大的ZIP文件,一个USDZ文件就相当于是一个完整的3D模型了。 而且USDZ是未压缩、不加密的文件,它也允许从外部引用内部的单个文件,或是在给定的USDZ文件当中嵌套其它文件。

1.3 trimesh (python)

https://pypi.org/project/trimesh/
Trimesh 是一个纯 Python (2.7-3.4+) 库,用于加载和使用三角形网格。 该库的目标是提供一个功能齐全且经过良好测试的 Trimesh 对象,该对象允许以 Shapely 库中的 Polygon 对象的样式轻松操作和分析。
【小沐学AR】小沐带您遨游太阳系(model-viewer,trimesh,Python)_第3张图片

安装python的第三方库:

pip install numpy
pip install trimesh

执行如下代码,通过trimesh库加载gltf模型:

import numpy as np
import trimesh

trimesh.util.attach_to_log()
mesh = trimesh.load('D:\\test_astronomy\\Earth_1_12756.glb', force='mesh')

v = mesh.vertices  
f = mesh.faces
print(f)

#这样得到的v,f格式是trimesh 内置的格式,不能直接用于其它计算,需要转换为numpy
v = np.array(v)
f = np.array(f)
print(f)

mesh.bounding_box_oriented.primitive.extents
mesh.bounding_box_oriented.primitive.transform
print(mesh.bounding_box_oriented.volume,
      mesh.bounding_cylinder.volume,
      mesh.bounding_sphere.volume)

mesh.show(background=[1,0,0,1])

这里继续安装python第三方库pyrender,增强trimesh的功能。

pip install pyrender 

加载和显示地球等行星的代码例子如下:

from pyrender import Mesh, Scene, Viewer
from io import BytesIO
import numpy as np
import trimesh
import requests

# duck_source = "https://github.com/KhronosGroup/glTF-Sample-Models/raw/master/2.0/Duck/glTF-Binary/Duck.glb"
# duck_source = "D:/test_astronomy/Mars_1_6792.glb"
# duck_source = "D:/test_astronomy/Jupiter_1_142984.glb"
# duck_source = "D:/test_astronomy/Mercury_1_4878.glb"
# duck_source = "D:/test_astronomy/Neptune_1_49528.glb"
# duck_source = "D:/test_astronomy/Uranus_1_51118.glb"  
# duck_source = "D:/test_astronomy/Venus_1_12103.glb"  
duck_source = "D:/test_astronomy/Earth_1_12756.glb"

# duck = trimesh.load(BytesIO(requests.get(duck_source).content), file_type='glb')
duck = trimesh.load(duck_source, file_type='glb')

duckmesh = Mesh.from_trimesh(list(duck.geometry.values())[0])
scene = Scene(ambient_light=np.array([1.0, 1.0, 1.0, 1.0]), bg_color=[1,0,0,1])
scene.add(duckmesh)
Viewer(scene)
  • 绘制地球、火星、木星
【小沐学AR】小沐带您遨游太阳系(model-viewer,trimesh,Python)_第4张图片 【小沐学AR】小沐带您遨游太阳系(model-viewer,trimesh,Python)_第5张图片 【小沐学AR】小沐带您遨游太阳系(model-viewer,trimesh,Python)_第6张图片

1.4 model-viewer (javascript, WebAR)

https://github.com/google/model-viewer

2、八大行星

在我们的银河系中,行星比恒星还多。目前围绕我们的恒星运行的八颗行星。内部的岩石行星是水星、金星、地球和火星。外行星是气态巨行星木星和土星以及冰巨星天王星和海王星。
【小沐学AR】小沐带您遨游太阳系(model-viewer,trimesh,Python)_第7张图片

国际天文学联合会于 2006 年采用了行星的最新定​​义。它说行星必须做三件事:

  • 它必须绕着一颗恒星运行(在我们的宇宙邻居太阳中)。
  • 它必须足够大,才能有足够的重力迫使它变成球形。
  • 它必须足够大,以至于它的引力可以清除它围绕太阳运行的轨道附近的任何其他类似大小的物体。

【小沐学AR】小沐带您遨游太阳系(model-viewer,trimesh,Python)_第8张图片
八大行星排列顺序:

  1. 体积:(以地球为1)木星 :土星 :天王星 :海王星 :地球 :金星 :火星 :水星 = 1330 :745 :65 :60 :1 :0.86 :0.15 :0.056

  2. 质量:(以地球为1)木星 :土星 :天王星 :海王星 :地球 :金星 :火星 :水星 =318 :95 :14.53 :17.15 :1 :0.8 :0.11 :0.0553

  3. 离太阳从近到远的顺序:水星、金星、地球、火星、木星、土星、天王星、海王星。

【小沐学AR】小沐带您遨游太阳系(model-viewer,trimesh,Python)_第9张图片

2.1 Mercury(水星)

作为我们太阳系中最小且离太阳最近的行星,水星仅比地球的月球大一点。

从水星表面看,太阳的大小是地球的三倍多,而阳光的亮度是地球的七倍。尽管水星靠近太阳,但它并不是我们太阳系中最热的行星——这个称号属于附近的金星,这要归功于它稠密的大气层。

由于水星的椭圆形(蛋形)轨道和缓慢的自转,太阳似乎会短暂地从行星表面的某些部分升起、落下并再次升起。同样的事情在日落时反过来发生。

【小沐学AR】小沐带您遨游太阳系(model-viewer,trimesh,Python)_第10张图片

2.2 Venus(金星)

金星是太阳的第二颗行星,是地球最近的行星邻居。它是四个内部的类地(或岩石)行星之一,通常被称为地球的双胞胎,因为它的大小和密度相似。然而,这些不是同卵双胞胎——两个世界之间存在根本差异。

金星有一层厚厚的有毒大气,充满了二氧化碳,它永远被厚厚的黄色硫酸云所笼罩,这些硫酸云会吸收热量,造成失控的温室效应。它是我们太阳系中最热的行星,尽管水星离太阳更近。金星的表面温度约为 900 华氏度(475 摄氏度)——热得足以熔化铅。表面呈锈色,上面布满了剧烈嘎吱作响的山脉和数千座大型火山。科学家们认为一些火山可能仍然活跃。
【小沐学AR】小沐带您遨游太阳系(model-viewer,trimesh,Python)_第11张图片

2.3 Earth(地球)

地球只是太阳系中的第五大行星,但它是太阳系中唯一一个表面有液态水的世界。地球仅比附近的金星大一点,是距离太阳最近的四颗行星中最大的一颗,所有这些行星都是由岩石和金属制成的。

地球这个名字至少有 1000 年的历史。除地球外,所有行星均以希腊和罗马诸神命名。然而,地球这个名字是一个日耳曼语单词,意思是“地面”。
【小沐学AR】小沐带您遨游太阳系(model-viewer,trimesh,Python)_第12张图片

地球的卫星:月亮

2.4 Mars(火星)

火星是来自太阳的第四颗行星——一个尘土飞扬、寒冷的沙漠世界,大气层非常稀薄。火星也是一个充满活力的行星,有四季、极地冰盖、峡谷、死火山,并且有证据表明它在过去更加活跃。

【小沐学AR】小沐带您遨游太阳系(model-viewer,trimesh,Python)_第13张图片

2.5 Jupiter (木星)

木星是太阳系中最大的行星,它是太阳系中最大的行星——质量是所有其他行星总和的两倍多。

木星是我们太阳系中最大的行星。它类似于一颗恒星,但它从来没有大到足以开始燃烧。
木星上覆盖着旋转的云纹。它有像大红斑这样的大风暴,已经持续了数百年。
木星是一个气态巨行星,没有固体表面,但它可能有一个与地球大小相当的固体内核。木星也有光环,但它们太微弱,看不清楚。
【小沐学AR】小沐带您遨游太阳系(model-viewer,trimesh,Python)_第14张图片

2.6 Saturn(土星)

土星是来自太阳的第六颗行星,也是我们太阳系中的第二大行星。

土星装饰着成千上万个美丽的小环,在行星中是独一无二的。它不是唯一有环的行星——由大块冰和岩石组成——但没有一个行星像土星的那样壮观或复杂。

与同为气态巨行星的木星一样,土星是一个主要由氢和氦组成的巨大球体。

【小沐学AR】小沐带您遨游太阳系(model-viewer,trimesh,Python)_第15张图片

2.7 Uranus(天王星)

天王星是来自太阳的第七颗行星,在我们的太阳系中具有第三大直径。它是第一颗借助望远镜发现的行星,天文学家威廉·赫歇尔于 1781 年发现了天王星,尽管他最初认为它不是彗星就是恒星。

两年后,该物体被普遍接受为一颗新行星,部分原因是天文学家约翰·埃勒特·博德的观察。赫歇尔试图以乔治三世国王的名字命名他的发现Georgium Sidus,但没有成功。相反,科学界接受了博德的建议,将其命名为希腊天王星,正如博德所建议的那样。
【小沐学AR】小沐带您遨游太阳系(model-viewer,trimesh,Python)_第16张图片

2.8 Neptune(海王星)

黑暗、寒冷、受超音速风的鞭打,冰巨海王星是我们太阳系中第八颗也是最遥远的行星。

海王星与太阳的距离是地球的 30 多倍,是太阳系中唯一一颗肉眼不可见的行星,也是发现之前数学预测的第一颗行星。2011 年,海王星完成了自 1846 年发现以来第一个 165 年的轨道。

美国宇航局的航海者 2 号是唯一近距离访问海王星的航天器。它于 1989 年飞出太阳系时飞过。

【小沐学AR】小沐带您遨游太阳系(model-viewer,trimesh,Python)_第17张图片

2.9 Pluto(冥王星)

冥王星是柯伊伯带中的一颗矮行星,柯伊伯带是海王星轨道之外的一个甜甜圈形状的冰体区域。在我们太阳系的这个遥远区域,可能有数百万个这样的冰天体,统称为柯伊伯带天体 (KBO) 或跨海王星天体 (TNO)。

冥王星——比地球的月球还小——有一个心形的冰川,相当于德克萨斯州和俄克拉荷马州的大小。这个迷人的世界拥有蔚蓝的天空、旋转的月亮、与落基山脉一样高的山脉,而且下雪——但雪是红色的。

当冥王星在 2006 年从行星重新分类为矮行星时,代表被降级的行星引起了广泛的愤怒。随着教科书的更新,互联网催生了冥王星经历一系列情绪的模因,从愤怒到孤独。但自从新视野号图像的发布显示出表面上非常突出的心形特征,悲伤的冥王星模因已经让位于一个非常满足、充满爱的冥王星,它希望再次被航天器访问。
【小沐学AR】小沐带您遨游太阳系(model-viewer,trimesh,Python)_第18张图片

结语

如果您觉得该方法或代码有一点点用处,可以给作者点个赞,或打赏杯咖啡;╮( ̄▽ ̄)╭
如果您感觉方法或代码不咋地//(ㄒoㄒ)//,就在评论处留言,作者继续改进。o_O???
感谢各位童鞋们的支持!( ´ ▽´ )ノ ( ´ ▽´)っ!!!

在这里插入图片描述

你可能感兴趣的:(AR/VR,model-viewer,python,WebAR,trimesh,earth)