コード例 #1
0
        def __init__(self):
            """Initialise the test scene."""

            # Show the framerate
            base.setFrameRateMeter(True)

            # Make 4 terrain nodepath objects with different hilliness values
            # and arrange them side-by-side in a 2x2 grid, giving a big terrain
            # with variable hilly and flat areas.

            color = (0.6, 0.8, 0.5, 1)  # Bright green-ish
            scale = 12

            t1 = Terrain(color=color, scale=scale, trees=0.7)
            t1.prime.reparentTo(render)
            t2 = Terrain(color=color,
                         scale=scale,
                         h=24,
                         pos=P.Vec3(32 * scale, 0, 0),
                         trees=0.5)
            t2.prime.reparentTo(render)
            t3 = Terrain(color=color,
                         scale=scale,
                         h=16,
                         pos=P.Vec3(32 * scale, 32 * scale, 0),
                         trees=0.3)
            t3.prime.reparentTo(render)
            t4 = Terrain(color=color,
                         scale=scale,
                         h=2,
                         pos=P.Vec3(0, 32 * scale, 0),
                         trees=0.9)
            t4.prime.reparentTo(render)

            # Setup a camera.
            base.disableMouse()
            self.camera = Camera(P.Vec3(0, 0, 100))
            self.camera.lookAt(320, 320, 0)

            # Setup keyboard controls.
            # Accept some keys to move the camera.
            self.accept("a", self.camera.setControl, ["left", 1])
            self.accept("a-up", self.camera.setControl, ["left", 0])
            self.accept("d", self.camera.setControl, ["right", 1])
            self.accept("d-up", self.camera.setControl, ["right", 0])
            self.accept("w", self.camera.setControl, ["up", 1])
            self.accept("w-up", self.camera.setControl, ["up", 0])
            self.accept("s", self.camera.setControl, ["down", 1])
            self.accept("s-up", self.camera.setControl, ["down", 0])
            self.accept("arrow_up", self.camera.setControl, ["forward", 1])
            self.accept("arrow_up-up", self.camera.setControl, ["forward", 0])
            self.accept("arrow_down", self.camera.setControl, ["backward", 1])
            self.accept("arrow_down-up", self.camera.setControl,
                        ["backward", 0])
            self.accept("arrow_left", self.camera.setControl,
                        ["strafe-left", 1])
            self.accept("arrow_left-up", self.camera.setControl,
                        ["strafe-left", 0])
            self.accept("arrow_right", self.camera.setControl,
                        ["strafe-right", 1])
            self.accept("arrow_right-up", self.camera.setControl,
                        ["strafe-right", 0])
            # Accept the Esc key to exit.
            self.accept("escape", sys.exit)

            # Setup lighting.
            self.alight = P.AmbientLight('alight')
            self.alight.setColor(P.VBase4(0.35, 0.35, 0.35, 1))
            self.alnp = render.attachNewNode(self.alight)
            render.setLight(self.alnp)

            self.dlight = P.DirectionalLight('dlight')
            self.dlight.setColor(P.VBase4(0.4, 0.4, 0.4, 1))
            self.dlnp = render.attachNewNode(self.dlight)
            self.dlnp.setHpr(45, -45, 0)
            render.setLight(self.dlnp)

            self.plight = P.PointLight('plight')
            self.plight.setColor(P.VBase4(0.8, 0.8, 0.5, 1))
            self.plnp = render.attachNewNode(self.plight)
            self.plnp.setPos(160, 160, 50)

            self.slight = P.Spotlight('slight')
            self.slight.setColor(P.VBase4(1, 1, 1, 1))
            lens = P.PerspectiveLens()
            self.slight.setLens(lens)
            self.slnp = render.attachNewNode(self.slight)
            self.slnp.setPos(-20, -20, 20)
            self.slnp.lookAt(50, 50, 0)

            # Setup some scene-wide exponential fog.
            colour = (0.5, 0.8, 0.8)
            self.expfog = P.Fog("Scene-wide exponential Fog object")
            self.expfog.setColor(*colour)
            self.expfog.setExpDensity(0.0005)
            render.setFog(self.expfog)
            base.setBackgroundColor(*colour)