星座信息,python3D编程进阶:几多体
假如星空上能加一些提示,我们会更容易识别出星座们。这就触及到构建几乎是最简便的几多形体——线段(唯一比它更简便的几多体是点),固然它的利用实践上可不那么简便。想在三维天下中创设一个几多体,必需了解它的构建端正。
几多体表现
在熊猫引擎中,直接布局三维几多体,必需起首了解三维几多体的表现办法。
起首,几多体触及很多的极点,好比我们想加上星座连线,每条线都必需有两个极点。比线更简便的几多体是点,作为一个几多体的点固然只须一个极点。比线更繁复的几多体是三角形,必需设置3个极点。
实践上,在三维中,统统形体,终极都是由三角形构成的。也就算说,仅有面,没有体。并且面也都被支解为一个个的三角形。
固然,我们暂且用不到三角形,我们用到的仅有线。
几多体构建
在代码中构建几多体,有如此三个步调:
- 界说一切的点
- 依据选择的几多体典范,设置每个几多体的极点编号。
- 天生几多体三维节点,并体现
我们看一下代码,为了加深对逻辑的了解:
1、界说一切的点
format = GeomVertexFormat.getV3()
vdata = GeomVertexData('lines', format, Geom.UHStatic)
vertex = GeomVertexWriter(vdata, 'vertex')
for starinfo in stars:
vertex.addData3(starinfo['x'], starinfo['y'], starinfo['z'])
第一行,界说每个点的格式。我们如今只界说点的三维坐标,以是格式是V3。极点的默许颜色就是白色的,假如我们想给极点加上颜色,还可以增长颜色信息。但如今白色切合我们的需求。
第二行,创建一个点组。
第三行,创建一个点信息添加器
第四、五行,把一切星星的地点都到场点组中
固然很多星星并不到场连线,但是多加一些点不使用,也没有什么太大的影响。
2、依据几多体典范,设置每个几多体的极点编号
starLines = Geom(vdata)
for lin in lines:
line = GeomLines(Geom.UHStatic)
line.addVertices(lin['star1'], lin['star2'])
starLines.addPrimitive(line)
第一行,依据点组创建几多体组(Geom)
第三行,创建直线几多体(GeomLines)
第四行,给每个直线几多体增长极点的编号。这里,每条连线有纪录了star1和star2两个信息,分散对应星星的编号。
第五行,将这个直线几多体到场到几多体组之中。
3、天生几多体三维节点,并体现
snode = GeomNode('square')
snode.addGeom(starLines)
self.skylines= self.skystars.attachNewNode(snode)
这里,把一切的连线独立出来,和星星分开放于不同的三维节点上。可以让我们独立控制体现或不体现连线。
星座称呼
星座称呼的体现,与东南方东南的体现没有不同。只是由于这次的笔墨太多,我们就不克不及一个一个写代码来完成了,我们必需创建一个函数(showText)。
for con in cons:
showText(con['x'],con['y'],con['z'],con['cname'], self.starnames)
在列表cons中纪录了每个星座的称呼和它应该体现的地点——但是就是本星座一切星星地点的中点。
体现切换
单独控制一个三维节点的可见性,我们用hide()和show()函数。别的,我们再给这个节点上增长一个标志,它可以用于存储任何信息——我们用来存储如今的可见性。于是控制代码相似如此(按s键切换线的体现):
elif key=='s':
if self.skylines.getTag('visible')=='F':
self.skylines.show()
self.skylines.setTag('visible', 'T')
else:
self.skylines.hide()
self.skylines.setTag('visible', 'F')
如今,就可以带着充足的帮助信息在高仿的三维星空中看星星了。
![](https://www.susu-ai.com/tupian/shuixiang/053.jpg)