Python与kivy移动多个3D对象

时间:2015-09-01 20:11:04

标签: python 3d kivy

我有一个相当简单的目标,即在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,虽然它真的只是建立在第一个存储库之外)

0 个答案:

没有答案