Beispiel #1
0
        self.vbo1 = self.ctx.buffer(b''.join(particle() for i in range(1024)))
        self.vbo2 = self.ctx.buffer(reserve=self.vbo1.size)

        self.vao1 = self.ctx.simple_vertex_array(self.transform, self.vbo1,
                                                 'in_pos', 'in_prev')
        self.vao2 = self.ctx.simple_vertex_array(self.transform, self.vbo2,
                                                 'in_pos', 'in_prev')

        self.render_vao = self.ctx.vertex_array(self.prog, [
            (self.vbo1, '2f 2x4', 'in_vert'),
        ])

        self.idx = 0

    def render(self):
        self.ctx.screen.viewport = self.wnd.viewport
        self.ctx.clear(1.0, 1.0, 1.0)
        # self.ctx.point_size = 2.0

        for i in range(8):
            self.vbo1.write(particle(), offset=self.idx * 16)
            self.idx = (self.idx + 1) % 1024

        self.render_vao.render(mgl.POINTS, 1024)
        self.vao1.transform(self.vbo2, mgl.POINTS, 1024)
        self.ctx.copy_buffer(self.vbo1, self.vbo2)


run_example(Particles)
Beispiel #2
0
        self.crate_x += np.random.uniform(-0.2, 0.2, 32 * 32)
        self.crate_y += np.random.uniform(-0.2, 0.2, 32 * 32)

    def render(self):
        angle = self.wnd.time * 0.2
        width, height = self.wnd.size
        self.ctx.viewport = self.wnd.viewport
        self.ctx.clear(1.0, 1.0, 1.0)
        self.ctx.enable(moderngl.DEPTH_TEST)

        camera_pos = (np.cos(angle) * 5.0, np.sin(angle) * 5.0, 2.0)

        proj = Matrix44.perspective_projection(45.0, width / height, 0.1, 1000.0)
        lookat = Matrix44.look_at(
            camera_pos,
            (0.0, 0.0, 0.5),
            (0.0, 0.0, 1.0),
        )

        self.mvp.write((proj * lookat).astype('f4').tobytes())
        self.light.value = camera_pos

        crate_z = np.sin(self.crate_a * self.wnd.time + self.crate_b) * 0.2
        coordinates = np.dstack([self.crate_x, self.crate_y, crate_z])

        self.vbo2.write(coordinates.astype('f4').tobytes())
        self.vao.render(instances=1024)


run_example(InstancedCrates)
        )

        self.scale = self.prog['scale']
        self.rotation = self.prog['rotation']

        width, height = self.wnd.size
        self.scale.value = (height / width * 0.75, 0.25)

        vertices = np.array([
            1.0, 0.0,
            -0.5, 0.86,
            -0.5, -0.86,
        ])

        self.vbo = self.ctx.buffer(vertices.astype('f4').tobytes())
        self.vao = self.ctx.simple_vertex_array(self.prog, self.vbo, 'vert')

    def render(self):
        sin_scale = np.sin(np.deg2rad(self.wnd.time * 60))

        self.ctx.viewport = self.wnd.viewport
        self.ctx.clear(1.0, 1.0, 1.0)
        self.vao.render()
        self.rotation.value = self.wnd.time

        # Change the scale of the triangle sin-ly
        self.scale.value = (sin_scale * 0.75, 0.75)


run_example(UniformsAndAttributes)
                    gl_Position = vec4(in_vert, 0.0, 1.0);
                }
            ''',
            fragment_shader='''
                #version 330

                out vec4 f_color;

                void main() {
                    f_color = vec4(0.3, 0.5, 1.0, 1.0);
                }
            ''',
        )

        vertices = np.array([
            0.0, 0.8,
            -0.6, -0.8,
            0.6, -0.8,
        ])

        self.vbo = self.ctx.buffer(vertices.astype('f4').tobytes())
        self.vao = self.ctx.simple_vertex_array(self.prog, self.vbo, 'in_vert')

    def render(self):
        self.ctx.screen.viewport = self.wnd.viewport
        self.ctx.clear(1.0, 1.0, 1.0)
        self.vao.render()


run_example(HelloWorld)
Beispiel #5
0
                        z.x = x;
                        z.y = y;
                    }

                    f_color = texture(Texture, vec2((i == Iter ? 0.0 : float(i)) / 100.0, 0.0));
                }
            ''',
        )

        img = Image.open(data.find('pal.png')).convert('RGB')
        self.texture = self.ctx.texture(img.size, 3, img.tobytes())
        self.sampler = self.ctx.sampler(self.texture)
        self.sampler.use()

        vertices = np.array([-1.0, -1.0, -1.0, 1.0, 1.0, -1.0, 1.0, 1.0])

        self.vbo = self.ctx.buffer(vertices.astype('f4').tobytes())
        self.vao = self.ctx.simple_vertex_array(self.prog, self.vbo, 'in_vert')

    def render(self):
        self.ctx.screen.viewport = self.wnd.viewport
        self.ctx.clear(1.0, 1.0, 1.0)

        self.prog['Seed'] = (-0.8, 0.156)
        self.prog['Iter'] = 100

        self.vao.render(mgl.TRIANGLE_STRIP)


run_example(Fractal)
Beispiel #6
0
                0.0,
                0.0,
                1.0,
                0.0,
                0.0,
                0.0,
                1.0,
            ) for car in cars))
        self.vao.render(instances=len(cars))
        self.vbo2.write(b''.join(
            struct.pack(
                '15f',
                0.0,
                0.0,
                0.0,
                *car['pos'],
                1.0,
                0.0,
                0.0,
                0.0,
                1.0,
                0.0,
                0.3,
                0.6,
                0.0,
            ) for car in cars))
        self.vao.render(instances=len(cars))


run_example(ToyCars)
Beispiel #7
0
        ]

        self.vao = self.ctx.vertex_array(self.prog, vao_content, self.ibo)

        self.img = Image.open(local('data', 'noise.jpg')).convert('L')
        texture = self.ctx.texture(self.img.size, 1, self.img.tobytes())
        texture.use()

    def render(self):
        width, height = self.wnd.size
        angle = self.wnd.time * 0.2

        self.ctx.viewport = self.wnd.viewport
        self.ctx.clear(1.0, 1.0, 1.0)
        self.ctx.enable(moderngl.DEPTH_TEST)
        self.ctx.wireframe = True

        proj = Matrix44.perspective_projection(45.0, width / height, 0.1,
                                               1000.0)
        lookat = Matrix44.look_at(
            (np.cos(angle), np.sin(angle), 0.8),
            (0.0, 0.0, 0.1),
            (0.0, 0.0, 1.0),
        )

        self.mvp.write((proj * lookat).astype('f4').tobytes())
        self.vao.render(moderngl.TRIANGLE_STRIP)


run_example(WireframeTerrain)
Beispiel #8
0
        self.scale = self.prog['scale']
        self.rotation = self.prog['rotation']

        width, height = self.wnd.size
        self.scale.value = (height / width * 0.75, 0.75)

        vertices = np.array([
            1.0, 0.0,
            1.0, 0.0, 0.0, 0.5,

            -0.5, 0.86,
            0.0, 1.0, 0.0, 0.5,

            -0.5, -0.86,
            0.0, 0.0, 1.0, 0.5,
        ])

        self.vbo = self.ctx.buffer(vertices.astype('f4').tobytes())
        self.vao = self.ctx.simple_vertex_array(self.prog, self.vbo, 'vert', 'vert_color')

    def render(self):
        self.ctx.viewport = self.wnd.viewport
        self.ctx.clear(1.0, 1.0, 1.0)
        self.ctx.enable(moderngl.BLEND)
        self.rotation.value = self.wnd.time
        self.vao.render(instances=10)


run_example(AlphaBlending)
        # There are 2 trianges to render
        #
        #     A, B, C
        #     B, C, D
        render_indicies = np.array([
            0, 1, 2,
            1, 2, 3
        ])
        self.index_buffer = self.ctx.buffer(render_indicies.astype('i4').tobytes())

        # The vao_content is a list of 3-tuples (buffer, format, attribs)
        # the format can have an empty or '/v', '/i', '/r' ending.
        # '/v' attributes are the default
        # '/i` attributes are per instance attributes
        # '/r' attributes are default values for the attributes (per render attributes)
        vao_content = [
            (self.position_vertex_buffer, '2f', 'in_vert'),
            (self.color_buffer, '3f', 'in_color'),
            (self.pos_scale_buffer, '2f 1f/i', 'in_pos', 'in_scale'),
        ]

        self.vao = self.ctx.vertex_array(self.prog, vao_content, self.index_buffer)

    def render(self):
        self.ctx.screen.viewport = self.wnd.viewport
        self.ctx.clear(1.0, 1.0, 1.0)
        self.vao.render(instances=8)


run_example(InstancedRendering)
            self.use_texture.value = False

            self.light.value = (67.69, -8.14, 52.49)
            self.mvp.write((proj * lookat * rotate).astype('f4').tobytes())

            self.color.value = (0.67, 0.49, 0.29)
            self.objects['ground'].render()

            self.color.value = (0.46, 0.67, 0.29)
            self.objects['grass'].render()

            self.color.value = (1.0, 1.0, 1.0)
            self.objects['billboard'].render()

            self.color.value = (0.2, 0.2, 0.2)
            self.objects['billboard-holder'].render()

            self.use_texture.value = True

            if mode == 'render_to_texture':
                self.texture1.use()

            else:
                self.texture2.use()

            self.objects['billboard-image'].render()


run_example(RenderToTexture)
            varyings=['out_vert']
        )

        self.transform['Width'] = width
        self.transform['Height'] = height

        self.texture = self.ctx.texture((width, height), 1, pixels.tobytes(), dtype='f4')
        self.texture.swizzle = 'RRR1'
        self.sampler = self.ctx.sampler(self.texture)
        # self.sampler.filter = (mgl.NEAREST, mgl.NEAREST)
        self.sampler.use()

        self.vbo = self.ctx.buffer(canvas.tobytes())
        self.vao = self.ctx.simple_vertex_array(self.prog, self.vbo, 'in_vert')

        self.text = self.ctx.buffer(grid.tobytes())
        self.tao = self.ctx.simple_vertex_array(self.transform, self.text, 'in_text')
        self.pbo = self.ctx.buffer(reserve=pixels.nbytes)

    def render(self):
        self.ctx.screen.viewport = self.wnd.viewport
        self.ctx.clear(1.0, 1.0, 1.0)

        self.tao.transform(self.pbo)
        self.texture.write(self.pbo)

        self.vao.render(mgl.TRIANGLE_STRIP)


run_example(Conway)
Beispiel #12
0
        self.ctx.enable(moderngl.BLEND)

        if self.wnd.key_pressed(32):
            self.shoot()

        for i in range(10):
            self.space.step(1 / 60 / 10)

        self.prog['Camera'].value = (200, 300, width / 2, height / 2)

        bodies = np.array(
            [(b.position.x, b.position.y, b.angle, 10, 10, 1, 1, 1, 0)
             for b in self.bodies],
            dtype='f4')
        self.vbo2.write(bodies.tobytes())
        self.prog['Texture'].value = 0
        self.vao.render(moderngl.TRIANGLE_STRIP, instances=len(self.bodies))

        self.vbo2.orphan()

        balls = np.array(
            [(b.position.x, b.position.y, b.angle, 15, 15, 1, 1, 1, 0)
             for b in self.balls],
            dtype='f4')
        self.vbo2.write(balls.tobytes())
        self.prog['Texture'].value = 1
        self.vao.render(moderngl.TRIANGLE_STRIP, instances=len(self.balls))


run_example(PymunkExample)
Beispiel #13
0
        sampler1.use(1)
        sampler2.use(2)
        sampler3.use(3)
        sampler4.use(4)

        self.prog['Heightmap'] = 0
        self.prog['Color1'] = 1
        self.prog['Color2'] = 2
        self.prog['Cracks'] = 3
        self.prog['Darken'] = 4

    def render(self):
        angle = self.wnd.time * 0.2
        self.ctx.screen.viewport = self.wnd.viewport
        self.ctx.clear(1.0, 1.0, 1.0)

        with self.ctx.scope(mgl.DEPTH_TEST):
            proj = Matrix44.perspective_projection(45.0, self.wnd.ratio, 0.1,
                                                   1000.0)
            lookat = Matrix44.look_at(
                (np.cos(angle), np.sin(angle), 0.8),
                (0.0, 0.0, 0.1),
                (0.0, 0.0, 1.0),
            )

            self.prog['Mvp'] = (proj * lookat).astype('f4').tobytes()
            self.vao.render(mgl.TRIANGLE_STRIP)


run_example(MultiTextireTerrain)
        self.vao3.scope = self.ctx.scope(mgl.DEPTH_TEST, samplers=[(self.sampler2, 0)])

        with self.ctx.recorder:
            self.ctx.clear(1.0, 1.0, 1.0)
            self.vao1.render()
            self.vao2.render()
            self.vao3.render()

        self.bytecode = self.ctx.recorder.dump()
        print(self.bytecode)

    def render(self):
        angle = self.wnd.time
        self.ctx.screen.viewport = self.wnd.viewport

        camera_pos = (np.cos(angle) * 5.0, np.sin(angle) * 5.0, 2.0)

        proj = Matrix44.perspective_projection(45.0, self.wnd.ratio, 0.1, 1000.0)
        lookat = Matrix44.look_at(
            camera_pos,
            (0.0, 0.0, 0.5),
            (0.0, 0.0, 1.0),
        )

        self.prog['Mvp'] = (proj * lookat).astype('f4').tobytes()
        self.prog['Light'] = camera_pos

        self.ctx.replay(self.bytecode)

run_example(CrateExample)
                void main() {
                    color = vec4(0.3, 0.5, 1.0, 1.0);
                }
            ''',
        )

        width, height = self.wnd.size

        vertices = np.array([
            1.0, 0.0,
            -0.5, 0.86,
            -0.5, -0.86,
        ])

        self.vbo = self.ctx.buffer(vertices.astype('f4').tobytes())
        self.vao = self.ctx.simple_vertex_array(self.prog, self.vbo, 'vert')

    def render(self):
        sin_scale = np.sin(np.deg2rad(self.wnd.time * 60))

        self.ctx.screen.viewport = self.wnd.viewport
        self.ctx.clear(1.0, 1.0, 1.0)
        self.vao.render()
        self.prog['rotation'] = self.wnd.time

        # Change the scale of the triangle sin-ly
        self.prog['scale'] = (sin_scale * 0.75, 0.75)


run_example(UniformsAndAttributes)
Beispiel #16
0
            varyings=['out_vert']
        )

        self.transform['Width'] = width
        self.transform['Height'] = height

        self.texture = self.ctx.texture((width, height), 1, pixels.tobytes(), dtype='f4')
        self.sampler = self.ctx.sampler(self.texture)
        # self.sampler.filter = (mgl.NEAREST, mgl.NEAREST)
        # self.sampler.swizzle = 'RRR1'
        self.sampler.use()

        self.vbo = self.ctx.buffer(canvas.tobytes())
        self.vao = self.ctx.simple_vertex_array(self.prog, self.vbo, 'in_vert')

        self.text = self.ctx.buffer(grid.tobytes())
        self.tao = self.ctx.simple_vertex_array(self.transform, self.text, 'in_text')
        self.pbo = self.ctx.buffer(reserve=pixels.nbytes)

    def render(self):
        self.ctx.screen.viewport = self.wnd.viewport
        self.ctx.clear(1.0, 1.0, 1.0)

        self.tao.transform(self.pbo)
        self.texture.write(self.pbo)

        self.vao.render(mgl.TRIANGLE_STRIP)


run_example(Conway)
Beispiel #17
0
            (0.0, 0.0, 8.0),
            (0.0, 0.0, 1.0),
        )

        rotate = Matrix44.from_z_rotation(np.sin(self.wnd.time) * 0.5 + 0.2)

        self.use_texture.value = False

        self.light.value = (67.69, -8.14, 52.49)
        self.mvp.write((proj * lookat * rotate).astype('f4').tobytes())

        self.color.value = (0.67, 0.49, 0.29)
        self.objects['ground'].render()

        self.color.value = (0.46, 0.67, 0.29)
        self.objects['grass'].render()

        self.color.value = (1.0, 1.0, 1.0)
        self.objects['billboard'].render()

        self.color.value = (0.2, 0.2, 0.2)
        self.objects['billboard-holder'].render()

        self.use_texture.value = True
        self.texture.use()

        self.objects['billboard-image'].render()


run_example(MatplotlibTexture)
        )

        width, height = self.wnd.size
        self.prog['z_near'] = 0.1
        self.prog['z_far'] = 1000.0
        self.prog['ratio'] = width / height
        self.prog['fovy'] = 60

        self.prog['eye'] = (3, 3, 3)
        self.prog['center'] = (0, 0, 0)
        self.prog['up'] = (0, 0, 1)

        grid = []

        for i in range(65):
            grid.append([i - 32, -32.0, 0.0, i - 32, 32.0, 0.0])
            grid.append([-32.0, i - 32, 0.0, 32.0, i - 32, 0.0])

        grid = np.array(grid)

        self.vbo = self.ctx.buffer(grid.astype('f4').tobytes())
        self.vao = self.ctx.simple_vertex_array(self.prog, self.vbo, 'vert')

    def render(self):
        self.ctx.screen.viewport = self.wnd.viewport
        self.ctx.clear(1.0, 1.0, 1.0)
        self.vao.render(mgl.LINES, 65 * 4)


run_example(PerspectiveProjection)
                (0.0, 0.0, 1.0),
            )

            rotate = Matrix44.from_z_rotation(np.sin(self.wnd.time) * 0.5 + 0.2)

            self.prog['UseTexture'] = False

            self.prog['Light'] = (67.69, -8.14, 52.49)
            self.prog['Mvp'] = (proj * lookat * rotate).astype('f4').tobytes()

            self.prog['Color'] = (0.67, 0.49, 0.29)
            self.objects['ground'].render()

            self.prog['Color'] = (0.46, 0.67, 0.29)
            self.objects['grass'].render()

            self.prog['Color'] = (1.0, 1.0, 1.0)
            self.objects['billboard'].render()

            self.prog['Color'] = (0.2, 0.2, 0.2)
            self.objects['billboard-holder'].render()

            self.prog['UseTexture'] = True
            # self.texture.use()
            self.sampler.use()

            self.objects['billboard-image'].render()


run_example(ColorsAndTexture)
        vertices = np.array([
            0.0, 0.0,

            -0.6, -0.8,
            0.6, -0.8,

            0.6, 0.8,
            -0.6, 0.8,
        ])

        # Indecies are given to specify the order of drawing
        indecies = np.array([0, 1, 2, 0, 3, 4])

        self.vbo = self.ctx.buffer(vertices.astype('f4').tobytes())
        self.ibo = self.ctx.buffer(indecies.astype('i4').tobytes())

        vao_content = [
            # 2 floats are assigned to the 'in' variable named 'in_vert' in the shader code
            (self.vbo, '2f', 'in_vert')
        ]

        self.vao = self.ctx.vertex_array(self.prog, vao_content, self.ibo)

    def render(self):
        self.ctx.screen.viewport = self.wnd.viewport
        self.ctx.clear(1.0, 1.0, 1.0)
        self.vao.render()


run_example(IndexBuffer)
        )

        width, height = self.wnd.size
        self.prog['z_near'].value = 0.1
        self.prog['z_far'].value = 1000.0
        self.prog['ratio'].value = width / height
        self.prog['fovy'].value = 60

        self.prog['eye'].value = (3, 3, 3)
        self.prog['center'].value = (0, 0, 0)
        self.prog['up'].value = (0, 0, 1)

        grid = []

        for i in range(65):
            grid.append([i - 32, -32.0, 0.0, i - 32, 32.0, 0.0])
            grid.append([-32.0, i - 32, 0.0, 32.0, i - 32, 0.0])

        grid = np.array(grid)

        self.vbo = self.ctx.buffer(grid.astype('f4').tobytes())
        self.vao = self.ctx.simple_vertex_array(self.prog, self.vbo, 'vert')

    def render(self):
        self.ctx.viewport = self.wnd.viewport
        self.ctx.clear(1.0, 1.0, 1.0)
        self.vao.render(moderngl.LINES, 65 * 4)


run_example(PerspectiveProjection)
Beispiel #22
0
            sticker_vertices.T.astype('f4').tobytes())
        self.sticker_vao = self.ctx.simple_vertex_array(
            self.prog, self.sticker_vbo, 'in_vert', 'in_norm', 'in_text')

    def render(self):
        self.ctx.screen.viewport = self.wnd.viewport
        self.ctx.clear(1.0, 1.0, 1.0)
        self.bg_sampler.use()
        with self.ctx.scope(mgl.BLEND):
            self.canvas_vao.render(mgl.TRIANGLE_STRIP)
        with self.ctx.scope(mgl.DEPTH_TEST):

            proj = Matrix44.perspective_projection(30.0, self.wnd.ratio, 1.0,
                                                   1000.0)
            lookat = Matrix44.look_at(
                (46.748, -280.619, 154.391),
                (-23.844, 2.698, 44.493),
                (0.0, 0.0, 1.0),
            )

            self.prog['Mvp'] = (proj * lookat).astype('f4').tobytes()
            self.prog['Light'] = (-143.438, -159.072, 213.268)
            self.mug_sampler.use()
            self.mug_vao.render()
        with self.ctx.scope(mgl.DEPTH_TEST | mgl.BLEND):
            self.sticker_sampler.use()
            self.sticker_vao.render(mgl.TRIANGLE_STRIP)


run_example(MugExample)
Beispiel #23
0
        self.texture = self.ctx.texture(self.wood.size, 3, self.wood.tobytes())
        self.texture.build_mipmaps()

        self.vbo = self.ctx.buffer(self.obj.pack('vx vy vz nx ny nz tx ty'))
        self.vao = self.ctx.simple_vertex_array(self.prog, self.vbo, 'in_vert',
                                                'in_norm', 'in_text')

    def render(self):
        width, height = self.wnd.size
        self.ctx.viewport = self.wnd.viewport
        self.ctx.clear(1.0, 1.0, 1.0)
        self.ctx.enable(moderngl.DEPTH_TEST)

        proj = Matrix44.perspective_projection(45.0, width / height, 0.1,
                                               1000.0)
        lookat = Matrix44.look_at(
            (-85, -180, 140),
            (0.0, 0.0, 65.0),
            (0.0, 0.0, 1.0),
        )

        self.light.value = (-140.0, -300.0, 350.0)
        self.color.value = (1.0, 1.0, 1.0, 0.25)
        self.mvp.write((proj * lookat).astype('f4').tobytes())

        self.texture.use()
        self.vao.render()


run_example(LoadingOBJ)
        self.transform['Acc'] = (0.0, -0.0001)

        self.vbo1 = self.ctx.buffer(b''.join(particle() for i in range(1024)))
        self.vbo2 = self.ctx.buffer(reserve=self.vbo1.size)

        self.vao1 = self.ctx.simple_vertex_array(self.transform, self.vbo1, 'in_pos', 'in_prev')
        self.vao2 = self.ctx.simple_vertex_array(self.transform, self.vbo2, 'in_pos', 'in_prev')

        self.render_vao = self.ctx.vertex_array(self.prog, [
            (self.vbo1, '2f 2x4', 'in_vert'),
        ])

        self.idx = 0

    def render(self):
        self.ctx.screen.viewport = self.wnd.viewport
        self.ctx.clear(1.0, 1.0, 1.0)
        # self.ctx.point_size = 2.0

        for i in range(8):
            self.vbo1.write(particle(), offset=self.idx * 16)
            self.idx = (self.idx + 1) % 1024

        self.render_vao.render(mgl.POINTS, 1024)
        self.vao1.transform(self.vbo2, mgl.POINTS, 1024)
        self.ctx.copy_buffer(self.vbo1, self.vbo2)


run_example(Particles)
                in vec3 v_color;
                out vec4 f_color;

                void main() {
                    // We're not interested in changing the alpha value
                    f_color = vec4(v_color, 1.0);
                }
            ''',
        )

        # Point coordinates are put followed by the vec3 color values
        vertices = np.array([
            # x, y, red, green, blue
            0.0, 0.8, 1.0, 0.0, 0.0,
            -0.6, -0.8, 0.0, 1.0, 0.0,
            0.6, -0.8, 0.0, 0.0, 1.0,
        ])

        self.vbo = self.ctx.buffer(vertices.astype('f4').tobytes())

        # We control the 'in_vert' and `in_color' variables
        self.vao = self.ctx.simple_vertex_array(self.prog, self.vbo, 'in_vert', 'in_color')

    def render(self):
        self.ctx.screen.viewport = self.wnd.viewport
        self.ctx.clear(1.0, 1.0, 1.0)
        self.vao.render()


run_example(SimpleColorTriangle)
Beispiel #26
0
            )

            rotate = Matrix44.from_z_rotation(
                np.sin(self.wnd.time) * 0.5 + 0.2)

            self.prog['UseTexture'] = False

            self.prog['Light'] = (67.69, -8.14, 52.49)
            self.prog['Mvp'] = (proj * lookat * rotate).astype('f4').tobytes()

            self.prog['Color'] = (0.67, 0.49, 0.29)
            self.objects['ground'].render()

            self.prog['Color'] = (0.46, 0.67, 0.29)
            self.objects['grass'].render()

            self.prog['Color'] = (1.0, 1.0, 1.0)
            self.objects['billboard'].render()

            self.prog['Color'] = (0.2, 0.2, 0.2)
            self.objects['billboard-holder'].render()

            self.prog['UseTexture'] = True
            # self.texture.use()
            self.sampler.use()

            self.objects['billboard-image'].render()


run_example(ColorsAndTexture)
Beispiel #27
0
                #version 330

                out vec4 f_color;

                void main() {
                    f_color = vec4(0.1, 0.1, 0.1, 1.0);
                }
            ''',
        )

        self.vbo = self.ctx.buffer(grid(15, 10).astype('f4').tobytes())
        self.vao = self.ctx.simple_vertex_array(self.prog, self.vbo, 'in_vert')

    def render(self):
        self.ctx.screen.viewport = self.wnd.viewport
        self.ctx.clear(1.0, 1.0, 1.0)
        with self.ctx.scope(mgl.DEPTH_TEST):
            proj = Matrix44.perspective_projection(45.0, self.wnd.ratio, 0.1,
                                                   1000.0)
            lookat = Matrix44.look_at(
                (40.0, 30.0, 30.0),
                (0.0, 0.0, 0.0),
                (0.0, 0.0, 1.0),
            )

            self.prog['Mvp'] = (proj * lookat).astype('f4').tobytes()
            self.vao.render(mgl.LINES)


run_example(SimpleGrid)
            ''',
        )

        width, height = self.wnd.size
        self.prog['scale'] = (height / width * 0.75, 0.75)

        vertices = np.array([
            1.0, 0.0,
            1.0, 0.0, 0.0, 0.5,

            -0.5, 0.86,
            0.0, 1.0, 0.0, 0.5,

            -0.5, -0.86,
            0.0, 0.0, 1.0, 0.5,
        ])

        self.vbo = self.ctx.buffer(vertices.astype('f4').tobytes())
        self.vao = self.ctx.simple_vertex_array(self.prog, self.vbo, 'vert', 'vert_color')
        self.blend = self.ctx.scope(enable_only=mgl.BLEND)

    def render(self):
        self.ctx.screen.viewport = self.wnd.viewport
        self.ctx.clear(1.0, 1.0, 1.0)
        self.prog['rotation'] = self.wnd.time
        with self.blend:
            self.vao.render(instances=10)


run_example(AlphaBlending)
                camera_pos,
                (0.0, 0.0, 0.5),
                (0.0, 0.0, 1.0),
            )

            self.prog['Mvp'] = (proj * lookat).astype('f4').tobytes()
            self.prog['Light'] = camera_pos

            # self.vbo2.write(Matrix33.from_z_rotation(self.wnd.time).astype('f4').tobytes(), offset=24)
            self.vbo2.write(b''.join(struct.pack(
                '15f',
                *car['color'],
                *car['pos'],
                1.0, 0.0, 0.0,
                0.0, 1.0, 0.0,
                0.0, 0.0, 1.0,
            ) for car in cars))
            self.vao.render(instances=len(cars))
            self.vbo2.write(b''.join(struct.pack(
                '15f',
                0.0, 0.0, 0.0,
                *car['pos'],
                1.0, 0.0, 0.0,
                0.0, 1.0, 0.0,
                0.3, 0.6, 0.0,
            ) for car in cars))
            self.vao.render(instances=len(cars))


run_example(ToyCars)
Beispiel #30
0
                        z.y = y;
                    }

                    f_color = texture(Texture, vec2((i == Iter ? 0.0 : float(i)) / 100.0, 0.0));
                }
            ''')

        img = Image.open(data.find('pal.png')).convert('RGB')
        self.texture = self.ctx.texture(img.size, 3, img.tobytes())
        self.sampler = self.ctx.sampler(self.texture)
        self.sampler.use()

        vertices = np.array([-1.0, -1.0, -1.0, 1.0, 1.0, -1.0, 1.0, 1.0])

        self.vbo = self.ctx.buffer(vertices.astype('f4').tobytes())
        self.vao = self.ctx.simple_vertex_array(self.prog, self.vbo, 'in_vert')

    def render(self):
        self.ctx.screen.viewport = self.wnd.viewport
        self.ctx.clear(1.0, 1.0, 1.0)

        self.prog['Center'] = (0.5, 0.0)
        self.prog['Iter'] = 100
        self.prog['Scale'] = 1.5
        self.prog['Ratio'] = self.wnd.ratio

        self.vao.render(mgl.TRIANGLE_STRIP)


run_example(Fractal)
Beispiel #31
0
            0.0,
            0.8,
            1.0,
            0.0,
            0.0,
            -0.6,
            -0.8,
            0.0,
            1.0,
            0.0,
            0.6,
            -0.8,
            0.0,
            0.0,
            1.0,
        ])

        self.vbo = self.ctx.buffer(vertices.astype('f4').tobytes())

        # We control the 'in_vert' and `in_color' variables
        self.vao = self.ctx.simple_vertex_array(self.prog, self.vbo, 'in_vert',
                                                'in_color')

    def render(self):
        self.ctx.screen.viewport = self.wnd.viewport
        self.ctx.clear(1.0, 1.0, 1.0)
        self.vao.render()


run_example(SimpleColorTriangle)
Beispiel #32
0
        # Index buffer (also called element buffer)
        # There are 2 trianges to render
        #
        #     A, B, C
        #     B, C, D
        render_indicies = np.array([0, 1, 2, 1, 2, 3])
        self.index_buffer = self.ctx.buffer(
            render_indicies.astype('i4').tobytes())

        # The vao_content is a list of 3-tuples (buffer, format, attribs)
        # the format can have an empty or '/v', '/i', '/r' ending.
        # '/v' attributes are the default
        # '/i` attributes are per instance attributes
        # '/r' attributes are default values for the attributes (per render attributes)
        vao_content = [
            (self.position_vertex_buffer, '2f', 'in_vert'),
            (self.color_buffer, '3f', 'in_color'),
            (self.pos_scale_buffer, '2f 1f/i', 'in_pos', 'in_scale'),
        ]

        self.vao = self.ctx.vertex_array(self.prog, vao_content,
                                         self.index_buffer)

    def render(self):
        self.ctx.screen.viewport = self.wnd.viewport
        self.ctx.clear(1.0, 1.0, 1.0)
        self.vao.render(instances=8)


run_example(InstancedRendering)
Beispiel #33
0
            fragment_shader='''
                #version 330

                out vec4 f_color;

                void main() {
                    f_color = vec4(0.1, 0.1, 0.1, 1.0);
                }
            ''',
        )

        self.vbo = self.ctx.buffer(grid(15, 10).astype('f4').tobytes())
        self.vao = self.ctx.simple_vertex_array(self.prog, self.vbo, 'in_vert')

    def render(self):
        self.ctx.screen.viewport = self.wnd.viewport
        self.ctx.clear(1.0, 1.0, 1.0)
        with self.ctx.scope(mgl.DEPTH_TEST):
            proj = Matrix44.perspective_projection(45.0, self.wnd.ratio, 0.1, 1000.0)
            lookat = Matrix44.look_at(
                (40.0, 30.0, 30.0),
                (0.0, 0.0, 0.0),
                (0.0, 0.0, 1.0),
            )

            self.prog['Mvp'] = (proj * lookat).astype('f4').tobytes()
            self.vao.render(mgl.LINES)


run_example(SimpleGrid)
Beispiel #34
0
            -0.6,
            -0.8,
            0.6,
            -0.8,
            0.6,
            0.8,
            -0.6,
            0.8,
        ])

        # Indecies are given to specify the order of drawing
        indecies = np.array([0, 1, 2, 0, 3, 4])

        self.vbo = self.ctx.buffer(vertices.astype('f4').tobytes())
        self.ibo = self.ctx.buffer(indecies.astype('i4').tobytes())

        vao_content = [
            # 2 floats are assigned to the 'in' variable named 'in_vert' in the shader code
            (self.vbo, '2f', 'in_vert')
        ]

        self.vao = self.ctx.vertex_array(self.prog, vao_content, self.ibo)

    def render(self):
        self.ctx.screen.viewport = self.wnd.viewport
        self.ctx.clear(1.0, 1.0, 1.0)
        self.vao.render()


run_example(IndexBuffer)
Beispiel #35
0
            fragment_shader='''
                #version 330

                out vec4 f_color;

                void main() {
                    f_color = vec4(0.3, 0.5, 1.0, 1.0);
                }
            ''',
        )

        vertices = np.array([
            0.0,
            0.8,
            -0.6,
            -0.8,
            0.6,
            -0.8,
        ])

        self.vbo = self.ctx.buffer(vertices.astype('f4').tobytes())
        self.vao = self.ctx.simple_vertex_array(self.prog, self.vbo, 'in_vert')

    def render(self):
        self.ctx.screen.viewport = self.wnd.viewport
        self.ctx.clear(1.0, 1.0, 1.0)
        self.vao.render()


run_example(HelloWorld)
Beispiel #36
0
        obj = Obj.open(local('data', 'crate.obj'))
        img = Image.open(local('data', 'crate.png')).transpose(Image.FLIP_TOP_BOTTOM).convert('RGB')
        self.texture = self.ctx.texture(img.size, 3, img.tobytes())
        self.texture.use()

        self.vbo = self.ctx.buffer(obj.pack('vx vy vz nx ny nz tx ty'))
        self.vao = self.ctx.simple_vertex_array(self.prog, self.vbo, 'in_vert', 'in_norm', 'in_text')

    def render(self):
        angle = self.wnd.time
        self.ctx.viewport = self.wnd.viewport
        self.ctx.clear(1.0, 1.0, 1.0)
        self.ctx.enable(moderngl.DEPTH_TEST)

        camera_pos = (np.cos(angle) * 5.0, np.sin(angle) * 5.0, 2.0)

        proj = Matrix44.perspective_projection(45.0, self.wnd.ratio, 0.1, 1000.0)
        lookat = Matrix44.look_at(
            camera_pos,
            (0.0, 0.0, 0.5),
            (0.0, 0.0, 1.0),
        )

        self.mvp.write((proj * lookat).astype('f4').tobytes())
        self.light.value = camera_pos
        self.vao.render()


run_example(CrateExample)
Beispiel #37
0
import moderngl

from example_window import Example, run_example


class EmptyWindow(Example):
    def __init__(self):
        self.ctx = moderngl.create_context()

    def render(self):
        self.ctx.viewport = self.wnd.viewport
        self.ctx.clear(0.2, 0.4, 0.7)


run_example(EmptyWindow)