我有一个相当简单的目标,即在3D空间中绘制几个球体并根据某些功能调整它们的位置。我想使用python与kivy来完成这个,因为它使触摸屏界面变得非常简单,我找到了一个repository,它可以解决大部分繁重的工作问题。
从main.py函数中的这段代码中,我想绘制n个球体,然后稍后更新它们的位置(这是在draw_elements(self)函数下完成的,而LOP []是类的列表& #39;点&#39)
def drawPoints():
print self.scene.objects
for i in range(len(self.LOP)):
PushMatrix()
point = self.LOP[i]
point.shape = self.scene.objects['Sphere']
point.color = _set_color(i/10., (i+1)/10., 0., id_color=(int(255/(1+i)), int(255/(1+i)), 255))
point.shape.scale = Scale((i+1)/10.0,(i+1)/10.0,(i+1)/10.0)
self.LOP[i] = point
point.shape.scale.origin = (point.loc[0],point.loc[1],point.loc[2])
_draw_element(point.shape)
PopMatrix()
drawPoints()
当绘制点数时,它们处于其声明的原点。 稍后程序会通过时钟调度程序调用update_scene函数。
def update_scene(self, *largs):
def randLoc(point):
newLoc = (0.1*random.random(),0.1*random.random(),0.1*random.random())
oldLoc = point.shape.scale.origin
newLoc = ( newLoc[0]-0.05+oldLoc[0], newLoc[1]-0.05+oldLoc[1], newLoc[2]-0.05+oldLoc[2] )
return newLoc
def updateLocs(self):
for i in range(len(self.LOP)):
point = self.LOP[i]
point.shape.scale.origin = randLoc(point)
if not self.pause:
updateLocs(self)
pass
运行此更新功能时,只有最后绘制的球体移动,但它确实可以正确移动。
如何移动我之前绘制的其他球体?
(我的源代码可以找到here,虽然它真的只是建立在第一个存储库之外)