示例#1
0
def axis(vertices, position, angle):
    AXIS_SIZE = 0.1
    transform = Transform(position, angle)
    xaxis = transform.apply_vector(Vec2(AXIS_SIZE, 0.0))
    yaxis = transform.apply_vector(Vec2(0.0, AXIS_SIZE))
    c = position
    cx = c + xaxis
    cx = Vec3(cx.x, cx.y, 0.0)
    cy = c + yaxis
    cy = Vec3(cy.x, cy.y, 0.0)
    c = Vec3(position.x, position.y, 0.0)
    xcolor = Vec3(0.5, 0.0, 0.0)
    ycolor = Vec3(0.0, 0.5, 0.0)

    vertices.append((c, xcolor))
    vertices.append((cx, xcolor))
    vertices.append((c, ycolor))
    vertices.append((cy, ycolor))
示例#2
0
    def setup(self):
        super(GameControllerNode, self).setup()
        # set up
        window = WindowNode(name='window', parent=self)
        window.open()
        window.make_context_current()

        gl.init()
        err = gl.getError()
        if err:
            print("WINDOW OPEN ERROR:", err)

        scene = SceneNode(name='scene', parent=window) # scenenode.SceneNode(name='scene')

        debugdraw_renderer = debugdraw.RendererNode(name='debugdraw_renderer', parent=scene)
        sprite_renderer = spritenode.RendererNode(name="sprite_renderer", parent=scene)

        camera_transform = transformnode.TransformNode3D(name='camera_transform', parent=scene, m=Mat4.Translation(Vec3(0.0, 0.0, 3.0)))
        camera = debugdraw.CameraNode(name='camera', parent=camera_transform)
        camera.make_current()
        # camera_controller = CameraController(input_map=InputMap(), parent=camera_transform)

        window.on('key', self.key_callback)

        gl.enable(gl.DEPTH_TEST)
        gl.enable(gl.BLEND)
        gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA)

        updater = BoundsUpdater(parent=scene, name='updater')


        b0 = BodyNode(position=(0.0, -1.0), velocity=(0.0, 0.1), angle=0.0, angular_velocity=0.0, name="body0", parent=scene)
        b1 = BodyNode(position=(0.0, 1.0), velocity=(0.0, -0.1), angle=0.0, angular_velocity=0.0, name="body1", parent=scene)

        shape = CircleShapeNode(radius=0.1, center=(0.0, 0.0), name='shap0', parent=b0)
        shape_debugdraw = debugdraw.ShapeNode.Circle(radius=0.1, center=shape.center, nverts=8, name='draw_shape0', parent=shape)

        shape = CircleShapeNode(radius=0.1, center=(0.0, 0.0), name='shape1', parent=b1)
        shape_debugdraw = debugdraw.ShapeNode.Circle(radius=0.1, center=shape.center, nverts=8, name='draw_shape1', parent=shape)

        return

        # random scene
        NVERTS = 8
        for i in range(5):
            ANGULAR_VELOCITY = 2.0
            body = BodyNode(
                position=(random.uniform(-1.0, 1.0), random.uniform(-1.0, 1.0)),
                velocity=(random.uniform(-0.1, 0.1), random.uniform(-0.1, 0.1)), 
                angle=random.uniform(-math.pi, math.pi),
                angular_velocity=random.uniform(-ANGULAR_VELOCITY*math.pi, ANGULAR_VELOCITY*math.pi),
                name='body%s' % i,
                parent=scene
            )

            for j in range(3):
                if random.uniform(0.0, 1.0) < 1.0:
                    shape = CircleShapeNode(radius=0.1, center=(random.uniform(-0.2, 0.2), random.uniform(-0.2, 0.2)), name='shape%i'%j, parent=body)
                    shape_debugdraw = debugdraw.ShapeNode.Circle(radius=0.1, center=shape.center, nverts=NVERTS, name='draw_shape%i'%j, parent=shape)
                else:
                    transform = Transform(Vec2(random.uniform(-0.2, 0.2), random.uniform(-0.2, 0.2)), random.uniform(-math.pi, math.pi))
                    w = random.uniform(0.1, 0.2) * 0.5
                    h = random.uniform(0.1, 0.2) * 0.5
                    vertices = [Vec2(w, h), Vec2(-w, h), Vec2(-w, -h), Vec2(w, -h)]
                    radius = 0.1
                    nverts = 20
                    step = math.pi * 2.0 / nverts
                    center = Vec2()
                    #vertices = [Vec2(math.cos(step*i)*radius+center.x, math.sin(step*i)*radius+center.y) for i in range(nverts)]
                    vertices = [transform.apply(v) for v in vertices]
                    shape = PolygonShapeNode(vertices, name='shape%i'%j, parent=body)
                    m = math.pi * radius * radius
                    print("M:", shape.compute_mass(), m, m * 0.5 * math.pi * radius * radius)
                    color = (1.0, 1.0, 1.0)
                    #draw_vertices = [(Vec3(v.x, v.y, 0.0), color) for v in vertices]
                    draw_vertices = []
                    for i, v in enumerate(vertices):
                        v0 = vertices[(i-1)%len(vertices)]
                        draw_vertices.append((Vec3(v0.x, v0.y, 0.0), color))
                        draw_vertices.append((Vec3(v.x, v.y, 0.0), color))
                    shape_debugdraw = debugdraw.ShapeNode(vertices=draw_vertices, name='draw_shape%i'%j, parent=body)