Ejemplo n.º 1
0
 def setup(self):
     self.wasd = pg.WASD(self, speed=8)
     self.wasd.look_at((-10, 0, 0), (0, 0, 0))
     # cuboids
     self.context = pg.Context(pg.DirectionalLightProgram())
     self.context.use_color = True
     self.context.ambient_color = (0.5, 0.5, 0.5)
     self.context.light_color = (0.5, 0.5, 0.5)
     self.context.light_direction = pg.normalize((-1, 1, 1))
     data = []
     n = 16
     for x in range(256):
         z = random.randint(-n, n)
         y = random.randint(-n, n)
         cuboid = pg.Cuboid(x, x + 1, y - 0.5, y + 0.5, z - 0.5, z + 0.5)
         color = pg.hex_color(random.randint(0, 0xffffff))
         colors = [color] * len(cuboid.positions)
         data.extend(pg.interleave(
             cuboid.positions, cuboid.normals, colors))
     self.context.position, self.context.normal, self.context.color = (
         pg.VertexBuffer(data).slices(3, 3, 3))
     # bullets
     self.bullet = pg.Context(pg.DirectionalLightProgram())
     self.bullet.ambient_color = (0.5, 0.5, 0.5)
     self.bullet.light_color = (0.5, 0.5, 0.5)
     sphere = pg.Sphere(3, 0.05, (0, 0, 0))
     self.bullet.position = pg.VertexBuffer(sphere.positions)
     self.bullet.normal = pg.VertexBuffer(sphere.normals)
     self.bullets = []
     # crosshairs
     self.crosshairs = pg.Context(pg.SolidColorProgram())
     self.crosshairs.position = pg.VertexBuffer(pg.Crosshairs().positions)
Ejemplo n.º 2
0
 def setup(self):
     self.wasd = pg.WASD(self, speed=8)
     self.wasd.look_at((-10, 0, 0), (0, 0, 0))
     # cuboids
     self.context = pg.Context(pg.DirectionalLightProgram())
     self.context.use_color = True
     self.context.ambient_color = (0.5, 0.5, 0.5)
     self.context.light_color = (0.5, 0.5, 0.5)
     self.context.light_direction = pg.normalize((-1, 1, 1))
     data = []
     n = 16
     for x in range(256):
         z = random.randint(-n, n)
         y = random.randint(-n, n)
         cuboid = pg.Cuboid(x, x + 1, y - 0.5, y + 0.5, z - 0.5, z + 0.5)
         color = pg.hex_color(random.randint(0, 0xffffff))
         colors = [color] * len(cuboid.positions)
         data.extend(pg.interleave(
             cuboid.positions, cuboid.normals, colors))
     self.context.position, self.context.normal, self.context.color = (
         pg.VertexBuffer(data).slices(3, 3, 3))
     # bullets
     self.bullet = pg.Context(pg.DirectionalLightProgram())
     self.bullet.ambient_color = (0.5, 0.5, 0.5)
     self.bullet.light_color = (0.5, 0.5, 0.5)
     sphere = pg.Sphere(3, 0.05, (0, 0, 0))
     self.bullet.position = pg.VertexBuffer(sphere.positions)
     self.bullet.normal = pg.VertexBuffer(sphere.normals)
     self.bullets = []
     # crosshairs
     self.crosshairs = pg.Context(pg.SolidColorProgram())
     self.crosshairs.position = pg.VertexBuffer(pg.Crosshairs().positions)
Ejemplo n.º 3
0
 def setup(self):
     self.wasd = pg.WASD(self, speed=3)
     self.wasd.look_at((-5, 4, 5), (0, 0, 0))
     self.context = pg.Context(pg.DirectionalLightProgram())
     data = []
     points = pg.poisson_disc(-4, -4, 4, 4, 1, 32)
     for x, z in points:
         noise = pg.simplex2(10 + x * 0.25, 10 + z * 0.25, 4)
         y = (noise + 1) / 1
         shape = pg.Cone((x, 0, z), (x, y, z), 0.4, 36)
         data.extend(pg.interleave(shape.positions, shape.normals))
         shape = pg.Sphere(3, 0.3, (x, y, z))
         data.extend(pg.interleave(shape.positions, shape.normals))
     self.context.position, self.context.normal = (
         pg.VertexBuffer(data).slices(3, 3))
     self.plane = pg.Context(pg.DirectionalLightProgram())
     self.plane.object_color = (1, 1, 1)
     shape = pg.Plane((0, -0.1, 0), (0, 1, 0), 5)
     data = pg.interleave(shape.positions, shape.normals)
     self.plane.position, self.plane.normal = (pg.VertexBuffer(data).slices(
         3, 3))
     self.axes = pg.Context(pg.SolidColorProgram())
     self.axes.color = (0.3, 0.3, 0.3)
     self.axes.position = pg.VertexBuffer(pg.Axes(100).positions)
Ejemplo n.º 4
0
 def setup(self):
     self.wasd = pg.WASD(self, speed=3)
     self.wasd.look_at((-5, 4, 5), (0, 0, 0))
     self.context = pg.Context(pg.DirectionalLightProgram())
     data = []
     points = pg.poisson_disc(-4, -4, 4, 4, 1, 32)
     for x, z in points:
         noise = pg.simplex2(10 + x * 0.25, 10 + z * 0.25, 4)
         y = (noise + 1) / 1
         shape = pg.Cone((x, 0, z), (x, y, z), 0.4, 36)
         data.extend(pg.interleave(shape.positions, shape.normals))
         shape = pg.Sphere(3, 0.3, (x, y, z))
         data.extend(pg.interleave(shape.positions, shape.normals))
     self.context.position, self.context.normal = (
         pg.VertexBuffer(data).slices(3, 3))
     self.plane = pg.Context(pg.DirectionalLightProgram())
     self.plane.object_color = (1, 1, 1)
     shape = pg.Plane((0, -0.1, 0), (0, 1, 0), 5)
     data = pg.interleave(shape.positions, shape.normals)
     self.plane.position, self.plane.normal = (
         pg.VertexBuffer(data).slices(3, 3))
     self.axes = pg.Context(pg.SolidColorProgram())
     self.axes.color = (0.3, 0.3, 0.3)
     self.axes.position = pg.VertexBuffer(pg.Axes(100).positions)
Ejemplo n.º 5
0
 def setup(self):
     self.wasd = pg.WASD(self, speed=30)
     self.wasd.look_at((-20, 20, -8), (0, 0, 0))
     self.context = pg.Context(pg.DirectionalLightProgram())
     self.context.use_color = True
     self.context.specular_power = 8.0
     self.context.specular_multiplier = 0.3
     normals = defaultdict(list)
     position = []
     normal = []
     color = []
     size = 50
     # generate height map
     height = {}
     colors = {}
     for x in xrange(-size, size + 1):
         for z in xrange(-size, size + 1):
             height[(x, z)] = noise(x, z)
             colors[(x, z)] = generate_color(x, z)
     # generate triangles and track normals for all vertices
     for x in xrange(-size, size):
         for z in xrange(-size, size):
             t1 = [x + 0, z + 0, x + 1, z + 0, x + 0, z + 1]
             t2 = [x + 0, z + 1, x + 1, z + 0, x + 1, z + 1]
             for t in [t1, t2]:
                 x1, z1, x2, z2, x3, z3 = t
                 p1 = (x1, height[(x1, z1)], z1)
                 p2 = (x2, height[(x2, z2)], z2)
                 p3 = (x3, height[(x3, z3)], z3)
                 c1 = colors[(x1, z1)]
                 c2 = colors[(x2, z2)]
                 c3 = colors[(x3, z3)]
                 position.extend([p3, p2, p1])
                 color.extend([c3, c2, c1])
                 n = pg.normalize(pg.cross(pg.sub(p3, p1), pg.sub(p2, p1)))
                 normals[(x1, z1)].append(n)
                 normals[(x2, z2)].append(n)
                 normals[(x3, z3)].append(n)
     # compute average normal for all vertices
     for key, value in normals.items():
         normals[key] = pg.normalize(reduce(pg.add, value))
     for x, y, z in position:
         normal.append(normals[(x, z)])
     # generate vertex buffer
     vb = pg.VertexBuffer(pg.interleave(position, normal, color))
     self.context.position, self.context.normal, self.context.color = (
         vb.slices(3, 3, 3))
Ejemplo n.º 6
0
Archivo: terrain.py Proyecto: ssebs/pg
 def setup(self):
     self.wasd = pg.WASD(self, speed=30)
     self.wasd.look_at((-20, 20, -8), (0, 0, 0))
     self.context = pg.Context(pg.DirectionalLightProgram())
     self.context.use_color = True
     self.context.specular_power = 8.0
     self.context.specular_multiplier = 0.3
     normals = defaultdict(list)
     position = []
     normal = []
     color = []
     size = 50
     # generate height map
     height = {}
     colors = {}
     for x in xrange(-size, size + 1):
         for z in xrange(-size, size + 1):
             height[(x, z)] = noise(x, z)
             colors[(x, z)] = generate_color(x, z)
     # generate triangles and track normals for all vertices
     for x in xrange(-size, size):
         for z in xrange(-size, size):
             t1 = [x + 0, z + 0, x + 1, z + 0, x + 0, z + 1]
             t2 = [x + 0, z + 1, x + 1, z + 0, x + 1, z + 1]
             for t in [t1, t2]:
                 x1, z1, x2, z2, x3, z3 = t
                 p1 = (x1, height[(x1, z1)], z1)
                 p2 = (x2, height[(x2, z2)], z2)
                 p3 = (x3, height[(x3, z3)], z3)
                 c1 = colors[(x1, z1)]
                 c2 = colors[(x2, z2)]
                 c3 = colors[(x3, z3)]
                 position.extend([p3, p2, p1])
                 color.extend([c3, c2, c1])
                 n = pg.normalize(pg.cross(pg.sub(p3, p1), pg.sub(p2, p1)))
                 normals[(x1, z1)].append(n)
                 normals[(x2, z2)].append(n)
                 normals[(x3, z3)].append(n)
     # compute average normal for all vertices
     for key, value in normals.items():
         normals[key] = pg.normalize(reduce(pg.add, value))
     for x, y, z in position:
         normal.append(normals[(x, z)])
     # generate vertex buffer
     vb = pg.VertexBuffer(pg.interleave(position, normal, color))
     self.context.position, self.context.normal, self.context.color = (
         vb.slices(3, 3, 3))