Код IT Загрузка примера кода…

Python main.py
#!/usr/bin/env python3

import math

from direct.showbase.ShowBase import ShowBase
from panda3d.core import LineSegs

def wireframe_sphere(segs, radius=2.0, meridians=12, parallels=8):
    segs.setColor(0.5, 0.85, 1.0, 1)
    segs.setThickness(1)

    for m in range(meridians):
        theta = 2 * math.pi * m / meridians
        for p in range(parallels + 1):
            phi = math.pi * p / parallels
            x = radius * math.sin(phi) * math.cos(theta)
            y = radius * math.sin(phi) * math.sin(theta)
            z = radius * math.cos(phi)
            if p == 0:
                segs.moveTo(x, y, z)
            else:
                segs.drawTo(x, y, z)

    for p in range(1, parallels):
        phi = math.pi * p / parallels
        r = radius * math.sin(phi)
        z = radius * math.cos(phi)
        for m in range(meridians + 1):
            theta = 2 * math.pi * m / meridians
            x = r * math.cos(theta)
            y = r * math.sin(theta)
            if m == 0:
                segs.moveTo(x, y, z)
            else:
                segs.drawTo(x, y, z)

class App(ShowBase):
    def __init__(self):
        ShowBase.__init__(self)
        self.setBackgroundColor(0.04, 0.05, 0.09, 1)
        self.disableMouse()
        self.camera.setPos(0, -9, 2)
        self.camera.lookAt(0, 0, 0)

        ls = LineSegs("wire_sphere")
        wireframe_sphere(ls)
        self.wire = self.render.attachNewNode(ls.create())
        self.taskMgr.add(self.spin, "spin")

    def spin(self, task):
        self.wire.setH(self.wire.getH() + 20 * globalClock.getDt())
        self.wire.setP(self.wire.getP() + 8 * globalClock.getDt())
        return task.cont

if __name__ == "__main__":
    App().run()
#!/usr/bin/env python3

import math

from direct.showbase.ShowBase import ShowBase
from panda3d.core import LineSegs

def wireframe_sphere(segs, radius=2.0, meridians=12, parallels=8):
    segs.setColor(0.5, 0.85, 1.0, 1)
    segs.setThickness(1)

    for m in range(meridians):
        theta = 2 * math.pi * m / meridians
        for p in range(parallels + 1):
            phi = math.pi * p / parallels
            x = radius * math.sin(phi) * math.cos(theta)
            y = radius * math.sin(phi) * math.sin(theta)
            z = radius * math.cos(phi)
            if p == 0:
                segs.moveTo(x, y, z)
            else:
                segs.drawTo(x, y, z)

    for p in range(1, parallels):
        phi = math.pi * p / parallels
        r = radius * math.sin(phi)
        z = radius * math.cos(phi)
        for m in range(meridians + 1):
            theta = 2 * math.pi * m / meridians
            x = r * math.cos(theta)
            y = r * math.sin(theta)
            if m == 0:
                segs.moveTo(x, y, z)
            else:
                segs.drawTo(x, y, z)

class App(ShowBase):
    def __init__(self):
        ShowBase.__init__(self)
        self.setBackgroundColor(0.04, 0.05, 0.09, 1)
        self.disableMouse()
        self.camera.setPos(0, -9, 2)
        self.camera.lookAt(0, 0, 0)

        ls = LineSegs("wire_sphere")
        wireframe_sphere(ls)
        self.wire = self.render.attachNewNode(ls.create())
        self.taskMgr.add(self.spin, "spin")

    def spin(self, task):
        self.wire.setH(self.wire.getH() + 20 * globalClock.getDt())
        self.wire.setP(self.wire.getP() + 8 * globalClock.getDt())
        return task.cont

if __name__ == "__main__":
    App().run()