Пример #1
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, time, frame_time):
        self.ctx.clear(1.0, 1.0, 1.0)
        self.ctx.enable(moderngl.DEPTH_TEST)

        proj = Matrix44.perspective_projection(45.0, self.aspect_ratio, 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()


if __name__ == '__main__':
    run_example(LoadingOBJ)
Пример #2
0
    float d = raymarch(o, r, c);

    // pixel color
    vec3 color = vec3(0);
    if (d < FAR)
    {
        vec3 p = o + r * d;
        vec3 n = norm(p);

        float lambert = dot(n, l);
        lambert = clamp(lambert, 0.1, 1.0);

        #define SPEC_COLOR vec3(0.85, 0.75, 0.5)
        vec3 h = normalize(o + l);
        float ndh = clamp(dot(n, h), 0.0, 1.0);
        float ndv = clamp(dot(n, -o), 0.0, 1.0);
        float spec = pow((ndh + ndv) + 0.01, 64.0) * 0.25;

        color = c * lambert + SPEC_COLOR * spec;
    }

    // add simple fog
    color = mix(FOG_COLOR, color, clamp(pow(FOG_DIST / abs(d), FOG_DENSITY), 0.0, 1.0));

    out_color = vec4(color, 1.0);
}
'''

if __name__ == '__main__':
    run_example(Raymarching)
Пример #3
0
    def key_event(self, key, action):
        if action == self.wnd.keys.ACTION_PRESS:
            self.shoot()

    def render(self, time, frame_time):
        width, height = self.wnd.size

        self.ctx.clear(1.0, 1.0, 1.0)
        self.ctx.enable(moderngl.BLEND)

        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))


if __name__ == '__main__':
    run_example(PymunkExample)
Пример #4
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, time: float, frame_time: float):
        self.ctx.clear(1.0, 1.0, 1.0)
        self.ctx.enable(moderngl.BLEND)
        self.rotation.value = time
        self.vao.render(instances=10)


if __name__ == '__main__':
    run_example(AlphaBlending)
Пример #5
0
            self.camera.rotate_right()

        if self.states.get(self.wnd.keys.Z):
            self.camera.zoom_in()

        if self.states.get(self.wnd.keys.X):
            self.camera.zoom_out()

    def key_event(self, key, action):
        if key not in self.states:
            print(key, action)
            return        

        if action == self.wnd.keys.ACTION_PRESS:
            self.states[key] = True
        else:
            self.states[key] = False

    def render(self, time, frame_time):
        self.move_camera()

        self.ctx.clear(1.0, 1.0, 1.0)
        self.ctx.enable(moderngl.DEPTH_TEST)

        self.mvp.write((self.camera.mat_projection * self.camera.mat_lookat).astype('f4').tobytes())
        self.vao.render(moderngl.LINES)


if __name__ == '__main__':
    run_example(PerspectiveProjection)
Пример #6
0
    // pixel color
    vec3 color = vec3(0);
    if (d < FAR)
    {
        vec3 p = o + r * d;
        vec3 n = norm(p);

        float lambert = dot(n, l);
        lambert = clamp(lambert, 0.1, 1.0);

        #define SPEC_COLOR vec3(0.85, 0.75, 0.5)
        vec3 h = normalize(o + l);
        float ndh = clamp(dot(n, h), 0.0, 1.0);
        float ndv = clamp(dot(n, -o), 0.0, 1.0);
        float spec = pow((ndh + ndv) + 0.01, 64.0) * 0.25;

        color = c * lambert + SPEC_COLOR * spec;
    }

    // add simple fog
    color = mix(FOG_COLOR, color, clamp(pow(FOG_DIST / abs(d), FOG_DENSITY), 0.0, 1.0));

    out_color = vec4(color, 1.0);
}
'''


if __name__ == '__main__':
    run_example(Raymarching)
Пример #7
0
import os

from PIL import Image

import moderngl.next as mgl
from sampler_basic_example import SamplerBasicExample
from window import run_example


class SamplerLinearFilter(SamplerBasicExample):
    gl_version = (3, 3)
    aspect_ratio = 1.0
    title = "Sampler Linear Filter"

    img = Image.frombytes('RGB', (8, 8), os.urandom(192))

    def __init__(self, **kwargs):
        super().__init__(**kwargs)

        # self.sampler.filter = (mgl.LINEAR, mgl.LINEAR)
        self.sampler.filter = mgl.LINEAR

        self.sampler.wrap = mgl.REPEAT_X | mgl.REPEAT_Y


if __name__ == '__main__':
    run_example(SamplerLinearFilter)
Пример #8
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, time: float, frame_time: float):
        self.ctx.clear(1.0, 1.0, 1.0)
        self.vao.render()


if __name__ == '__main__':
    run_example(SimpleColorTriangle)
Пример #9
0
        self.ctx.clear(1.0, 1.0, 1.0)
        self.ctx.enable(moderngl.BLEND)

        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))


if __name__ == '__main__':
    run_example(PymunkExample)
        GL_R32F = 0x822E
        self.texture.bind_to_image(0,GL_WRITE_ONLY, GL_R32F)
        self.compute.run(nx, ny, nz)
        print('-' * 50)

        with self.scope:
            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.objects['billboard-image'].render()


if __name__ == '__main__':
    run_example(RenderTextureCompute)
                    f_color = v_color;
                }
            ''',
        )

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

        vertices = np.array([
            # x, y, red, green, blue, alpha
            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, 'in_vert', 'in_color')

    def render(self, time, frame_time):
        width, height = self.wnd.size

        self.ctx.clear(1.0, 1.0, 1.0)
        self.ctx.enable(moderngl.BLEND)
        self.scale.value = (0.5, self.aspect_ratio * 0.5)
        self.rotation.value = time
        self.vao.render(instances=10)


if __name__ == '__main__':
    run_example(InstancedRendering)
            (0.9, 0.9),
        ], dtype='f4')

        left, bottom, right, top = self.texrect
        self.texcoords = np.array([
            (left, bottom),
            (left, top),
            (right, bottom),
            (right, top),
        ], dtype='f4')

        self.texture = self.ctx.texture(self.img.transpose(Image.FLIP_TOP_BOTTOM).convert('RGB'))
        self.sampler = self.ctx.sampler(self.texture)

    def render(self, time: float, frame_time: float):
        # clear screen
        self.ctx.clear(1.0, 1.0, 1.0)

        # render texture
        self.sampler.use()
        self.renderer.render(mgl.TRIANGLE_STRIP, vertices=self.vertices, texcoords=self.texcoords)

        # render grid
        self.renderer.render(mgl.LINES, vertices=np.array([
            (i * 0.18, -0.9, i * 0.18, 0.9, -0.9, i * 0.18, 0.9, i * 0.18) for i in range(-5, 7, 2)
        ], 'f4').reshape(-1, 2), texture=False, color=(0.0, 0.0, 0.0, 1.0))


if __name__ == '__main__':
    run_example(SamplerBasicExample)
Пример #13
0
        self.color = self.prog['Color']
        self.mvp = self.prog['Mvp']

        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, time, frame_time):
        self.ctx.clear(1.0, 1.0, 1.0)
        self.ctx.enable(moderngl.DEPTH_TEST)

        proj = Matrix44.perspective_projection(45.0, self.aspect_ratio, 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()


if __name__ == '__main__':
    run_example(LoadingOBJ)
        tex0.use(0)
        tex1.use(1)
        tex2.use(2)
        tex3.use(3)
        tex4.use(4)

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

    def render(self, time, frame_time):
        angle = time * 0.2
        self.ctx.clear(1.0, 1.0, 1.0)
        self.ctx.enable(moderngl.DEPTH_TEST)

        proj = Matrix44.perspective_projection(45.0, self.aspect_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.mvp.write((proj * lookat).astype('f4').tobytes())
        self.vao.render(moderngl.TRIANGLE_STRIP)


if __name__ == '__main__':
    run_example(MultiTextireTerrain)
Пример #15
0
            (self.vbo, '2f', 'in_vert'),
        ]

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

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

    def render(self, time, frame_time):
        angle = time * 0.2

        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, self.aspect_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.mvp.write((proj * lookat).astype('f4').tobytes())
        self.vao.render(moderngl.TRIANGLE_STRIP)


if __name__ == '__main__':
    run_example(WireframeTerrain)
Пример #16
0
            (0.0, 0.0, 1.0),
        )

        rotate = Matrix44.from_z_rotation(np.sin(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()


if __name__ == '__main__':
    run_example(ColorsAndTexture)
            ''',
            varyings=['out_vert']
        )

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

        self.texture = self.ctx.texture((width, height), 1, pixels.tobytes(), dtype='f4')
        self.texture.filter = (moderngl.NEAREST, moderngl.NEAREST)
        self.texture.swizzle = 'RRR1'
        self.texture.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, time, frame_time):
        self.ctx.clear(1.0, 1.0, 1.0)

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

        self.vao.render(moderngl.TRIANGLE_STRIP)


if __name__ == '__main__':
    run_example(Conway)
            (0.0, 0.0, 1.0),
        )

        rotate = Matrix44.from_z_rotation(np.sin(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()


if __name__ == '__main__':
    run_example(MatplotlibTexture)
        rotate = Matrix44.from_z_rotation(np.sin(time) * 0.5 + 0.2)

        self.fbo.clear(0, (1.0, 1.0, 1.0))
        self.fbo.clear(-1, 1.0)
        for scope in [self.scope1, self.scope2]:
            with scope:
                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.objects['billboard-image'].render()


if __name__ == '__main__':
    run_example(RenderToTexture)
            (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.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))


if __name__ == '__main__':
    run_example(ToyCars)
Пример #21
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, time, frame_time):
        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(moderngl.POINTS, 1024)
        self.vao1.transform(self.vbo2, moderngl.POINTS, 1024)
        self.ctx.copy_buffer(self.vbo1, self.vbo2)


if __name__ == '__main__':
    run_example(Particles)
Пример #22
0
            fragment_shader='''
            #version 400 core

            out vec4 frag_color;

            void main() { frag_color = vec4(1.0); }
            '''
        )

        # four vertices define a cubic Bézier curve; has to match the shaders
        self.ctx.patch_vertices = 4

        self.ctx.line_width = 5.0
        vertices = np.array([
            [-1.0, 0.0],
            [-0.5, 1.0],
            [0.5, -1.0],
            [1.0, 0.0],
        ])

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

    def render(self, time, frame_time):
        self.ctx.clear(0.2, 0.4, 0.7)
        self.vao.render(mode=moderngl.PATCHES)


if __name__ == '__main__':
    run_example(Tessellation)
Пример #23
0
        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, time, frame_time):
        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)
Пример #24
0
            (0.0, 0.0, 1.0),
        )

        rotate = Matrix44.from_z_rotation(np.sin(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()


if __name__ == '__main__':
    run_example(MatplotlibTexture)
Пример #25
0
        tex1.use(1)
        tex2.use(2)
        tex3.use(3)
        tex4.use(4)

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

    def render(self, time, frame_time):
        angle = time * 0.2
        self.ctx.clear(1.0, 1.0, 1.0)
        self.ctx.enable(moderngl.DEPTH_TEST)

        proj = Matrix44.perspective_projection(45.0, self.aspect_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.mvp.write((proj * lookat).astype('f4').tobytes())
        self.vao.render(moderngl.TRIANGLE_STRIP)


if __name__ == '__main__':
    run_example(MultiTextireTerrain)
Пример #26
0
            ''',
                                     fragment_shader='''
            #version 400 core

            out vec4 frag_color;

            void main() { frag_color = vec4(1.0); }
            ''')

        # four vertices define a cubic Bézier curve; has to match the shaders
        self.ctx.patch_vertices = 4

        self.ctx.line_width = 5.0
        vertices = np.array([
            [-1.0, 0.0],
            [-0.5, 1.0],
            [0.5, -1.0],
            [1.0, 0.0],
        ])

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

    def render(self, time, frame_time):
        self.ctx.clear(0.2, 0.4, 0.7)
        self.vao.render(mode=moderngl.PATCHES)


if __name__ == '__main__':
    run_example(Tessellation)
Пример #27
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))


if __name__ == '__main__':
    run_example(ToyCars)
Пример #28
0
            rect(0.5, -0.5, 0.9, 0.9, 2.0),
            rect(0.5, 0.5, 0.9, 0.9, 3.0),
        ])

        img1 = Image.new('RGB', (200, 200), '#fee')
        img2 = Image.new('RGB', (200, 200), '#efe')
        img3 = Image.new('RGB', (200, 200), '#eef')
        img4 = Image.new('RGB', (200, 200), '#ffe')

        ImageDraw.ImageDraw(img1).text((10, 10), 'img 1', '#000', ImageFont.truetype('arial', 32))
        ImageDraw.ImageDraw(img2).text((10, 10), 'img 2', '#000', ImageFont.truetype('arial', 32))
        ImageDraw.ImageDraw(img3).text((10, 10), 'img 3', '#000', ImageFont.truetype('arial', 32))
        ImageDraw.ImageDraw(img4).text((10, 10), 'img 4', '#000', ImageFont.truetype('arial', 32))

        def join(*images):
            return b''.join(img.tobytes('raw', 'RGB', 0, -1) for img in images)

        self.texture = self.ctx.texture_array((200, 200, 4), 3, join(img1, img2, img3, img4))
        self.sampler = self.ctx.sampler(self.texture)
        self.sampler.use()

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

    def render(self, time: float, frame_time: float):
        self.ctx.clear(1.0, 1.0, 1.0)
        self.vao.render()


run_example(HelloWorld)
Пример #29
0
                out vec4 f_color;

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

        self.mvp = self.prog['Mvp']

        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, time, frame_time):
        self.ctx.clear(1.0, 1.0, 1.0)
        self.ctx.enable(moderngl.DEPTH_TEST)

        proj = Matrix44.perspective_projection(45.0, self.aspect_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.mvp.write((proj * lookat).astype('f4').tobytes())
        self.vao.render(moderngl.LINES)


if __name__ == '__main__':
    run_example(SimpleGrid)
Пример #30
0
        self.fbo.clear(0, (1.0, 1.0, 1.0))
        self.fbo.clear(-1, 1.0)
        for scope in [self.scope1, self.scope2]:
            with scope:
                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.objects['billboard-image'].render()


if __name__ == '__main__':
    run_example(RenderToTexture)
Пример #31
0
                                             join(img1, img2, img3, img4, img5,
                                                  img6))
        self.sampler = self.ctx.sampler(self.texture)
        self.sampler.filter = mgl.LINEAR
        self.sampler.use()

        obj = Obj.open(data.find('sitting_dummy.obj'))
        self.vbo = self.ctx.buffer(obj.pack('vx vy vz nx ny nz'))
        self.vao = self.ctx.simple_vertex_array(self.prog, self.vbo, 'in_vert',
                                                'in_norm')
        self.scope = self.ctx.scope(mgl.DEPTH_TEST)

    def render(self, time: float, frame_time: float):
        camera_pos = (np.cos(time) * 300.0, np.sin(time) * 300.0, 120.0)
        proj = Matrix44.perspective_projection(45.0, self.aspect_ratio, 0.1,
                                               1000.0)
        lookat = Matrix44.look_at(
            camera_pos,
            (0.0, 0.0, 50.0),
            (0.0, 0.0, 1.0),
        )

        with self.scope:
            self.prog['Mvp'] = (proj * lookat).astype('f4').tobytes()
            self.prog['Eye'] = camera_pos
            self.ctx.clear(1.0, 1.0, 1.0)
            self.vao.render()


run_example(HelloWorld)
Пример #32
0
        vao_content = [
            (self.vbo, '2f', 'in_vert'),
        ]

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

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

    def render(self, time, frame_time):
        angle = time * 0.2

        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, self.aspect_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.mvp.write((proj * lookat).astype('f4').tobytes())
        self.vao.render(moderngl.TRIANGLE_STRIP)


if __name__ == '__main__':
    run_example(WireframeTerrain)
Пример #33
0
            ''',
        )

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

        self.scale.value = (self.wnd.width / self.wnd.height * 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, time: float, frame_time: float):
        sin_scale = np.sin(np.deg2rad(time * 60))

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

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


if __name__ == '__main__':
    run_example(UniformsAndAttributes)
            (0.0, 0.0, 1.0),
        )

        rotate = Matrix44.from_z_rotation(np.sin(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()


if __name__ == '__main__':
    run_example(ColorsAndTexture)
Пример #35
0
        if self.states.get(self.wnd.keys.Z):
            self.camera.zoom_in()

        if self.states.get(self.wnd.keys.X):
            self.camera.zoom_out()

    def key_event(self, key, action):
        if key not in self.states:
            print(key, action)
            return

        if action == self.wnd.keys.ACTION_PRESS:
            self.states[key] = True
        else:
            self.states[key] = False

    def render(self, time, frame_time):
        self.move_camera()

        self.ctx.clear(1.0, 1.0, 1.0)
        self.ctx.enable(moderngl.DEPTH_TEST)

        self.mvp.write((self.camera.mat_projection *
                        self.camera.mat_lookat).astype('f4').tobytes())
        self.vao.render(moderngl.LINES)


if __name__ == '__main__':
    run_example(PerspectiveProjection)
Пример #36
0
                print("Space was pressed")

        if action == self.wnd.keys.ACTION_RELEASE:
            if key == self.wnd.keys.SPACE:
                print("Space was released")

    def mouse_position_event(self, x, y):
        """
        Mouse position reported in pixel position
        with the upper left corner as the origin
        """
        print("Mouse pos", x, y)

    def mouse_press_event(self, x, y, button):
        """Reports left and right mouse button presses + position"""
        if button == 1:
            print("Left mouse button pressed @", x, y)
        if button == 2:
            print("Right mouse button pressed @", x, y)

    def mouse_release_event(self, x, y, button):
        """Reports left and right mouse button releases + position"""
        if button == 1:
            print("Left mouse button released @", x, y)
        if button == 2:
            print("Right mouse button released @", x, y)


if __name__ == '__main__':
    run_example(EmptyWindow)
Пример #37
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, time: float, frame_time: float):
        self.ctx.clear(1.0, 1.0, 1.0)
        self.vao.render()


if __name__ == '__main__':
    run_example(IndexBuffer)
        # 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, time: float, frame_time: float):
        self.ctx.clear(1.0, 1.0, 1.0)
        self.vao.render(instances=8)


if __name__ == '__main__':
    run_example(InstancedRendering)
Пример #39
0
            (4, 4), 3, np.random.randint(128, 255, (4, 4, 3), 'u1'))
        self.sampler = self.ctx.sampler(self.texture,
                                        wrap=mgl.REPEAT_X | mgl.REPEAT_Y)

        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')
        self.vao.scope = self.ctx.scope(mgl.DEPTH_TEST,
                                        samplers=[(self.sampler, 0)])

    def render(self, time, frame_time):
        angle = time
        self.ctx.clear(1.0, 1.0, 1.0)

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

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

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


run_example(CrateExample)
Пример #40
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, time, frame_time):
        angle = time * 0.2
        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.aspect_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

        crate_z = np.sin(self.crate_a * 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)


if __name__ == '__main__':
    run_example(InstancedCrates)
import os

from PIL import Image

import moderngl.next as mgl
from sampler_basic_example import SamplerBasicExample
from window import run_example


class ClampToEdgeAndBorder(SamplerBasicExample):
    gl_version = (3, 3)
    aspect_ratio = 1.0
    title = "Clamp to Edge and Border"

    def __init__(self, **kwargs):
        super().__init__(**kwargs)

        # self.sampler.border = 0.3
        # self.sampler.border = (0.0, 0.5, 1.0, 1.0)
        self.sampler.border = (0.0, 0.5, 1.0)

        self.sampler.wrap = mgl.CLAMP_TO_EDGE_X | mgl.CLAMP_TO_BORDER_Y


if __name__ == '__main__':
    run_example(ClampToEdgeAndBorder)
Пример #42
0
        ])

        self.sticker_vbo = self.ctx.buffer(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, time, frame_time):
        self.ctx.clear(1.0, 1.0, 1.0)
        self.bg_texture.use()
        self.ctx.enable_only(moderngl.BLEND)
        self.canvas_vao.render(moderngl.TRIANGLE_STRIP)
        self.ctx.enable_only(moderngl.DEPTH_TEST)

        proj = Matrix44.perspective_projection(30.0, self.aspect_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.mvp.write((proj * lookat).astype('f4').tobytes())
        self.light.value = (-143.438, -159.072, 213.268)
        self.mug_texture.use()
        self.mug_vao.render()
        self.ctx.enable_only(moderngl.DEPTH_TEST | moderngl.BLEND)
        self.sticker_texture.use()
        self.sticker_vao.render(moderngl.TRIANGLE_STRIP)


if __name__ == '__main__':
    run_example(MugExample)
        self.crate_y = (np.repeat(np.arange(32), 32) - 16) * 1.5
        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, time, frame_time):
        angle = time * 0.2
        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.aspect_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

        crate_z = np.sin(self.crate_a * 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)


if __name__ == '__main__':
    run_example(InstancedCrates)
Пример #44
0
                    float cm = fract((i == Iter ? 0.0 : float(i)) * 10 / Iter);
                    f_color = vec4(
                        fract(cm + 0.0 / 3.0),
                        fract(cm + 1.0 / 3.0),
                        fract(cm + 2.0 / 3.0),
                        1.0
                    );
                }
            ''',
        )

        self.center = self.prog['Center']
        self.iter = self.prog['Iter']

        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, time, frame_time):
        self.ctx.clear(1.0, 1.0, 1.0)

        self.center.value = (0.49, 0.32)
        self.iter.value = 100

        self.vao.render(moderngl.TRIANGLE_STRIP)


if __name__ == '__main__':
    run_example(Fractal)
Пример #45
0
            (right, top),
        ],
                                  dtype='f4')

        self.texture = self.ctx.texture(
            self.img.transpose(Image.FLIP_TOP_BOTTOM).convert('RGB'))
        self.sampler = self.ctx.sampler(self.texture)

    def render(self, time: float, frame_time: float):
        # clear screen
        self.ctx.clear(1.0, 1.0, 1.0)

        # render texture
        self.sampler.use()
        self.renderer.render(mgl.TRIANGLE_STRIP,
                             vertices=self.vertices,
                             texcoords=self.texcoords)

        # render grid
        self.renderer.render(mgl.LINES,
                             vertices=np.array([(i * 0.18, -0.9, i * 0.18, 0.9,
                                                 -0.9, i * 0.18, 0.9, i * 0.18)
                                                for i in range(-5, 7, 2)],
                                               'f4').reshape(-1, 2),
                             texture=False,
                             color=(0.0, 0.0, 0.0, 1.0))


if __name__ == '__main__':
    run_example(SamplerBasicExample)
Пример #46
0
from PIL import Image

import moderngl.next as mgl
from sampler_basic_example import SamplerBasicExample
from window import run_example


class SamplerWrapModes(SamplerBasicExample):
    gl_version = (3, 3)
    aspect_ratio = 1.0
    title = "Sampler Wrap Modes"

    def __init__(self, **kwargs):
        super().__init__(**kwargs)

        self.sampler.wrap = mgl.REPEAT_X | mgl.MIRROR_CLAMP_TO_EDGE_Y


if __name__ == '__main__':
    run_example(SamplerWrapModes)
            ''',
        )

        obj = Obj.open(data.find('texture-test-cube.obj'))
        self.texture = self.ctx.texture((2, 2, 2), 3, np.random.randint(128, 255, (2, 2, 2, 3), 'u1'))
        self.sampler = self.ctx.sampler(self.texture, wrap=mgl.REPEAT_X | mgl.REPEAT_Y | mgl.REPEAT_Z)

        self.vbo = self.ctx.buffer(obj.pack('vx vy vz nx ny nz tx ty tz'))
        self.vao = self.ctx.simple_vertex_array(self.prog, self.vbo, 'in_vert', 'in_norm', 'in_text')
        self.vao.scope = self.ctx.scope(mgl.DEPTH_TEST, samplers=[(self.sampler, 0)])

    def render(self, time, frame_time):
        angle = time
        self.ctx.clear(1.0, 1.0, 1.0)

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

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

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


run_example(CrateExample)
                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, time: float, frame_time: float):
        self.ctx.clear(1.0, 1.0, 1.0)
        self.vao.render()


if __name__ == '__main__':
    run_example(SimpleColorTriangle)
Пример #49
0
        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, time: float, frame_time: float):
        self.ctx.clear(1.0, 1.0, 1.0)
        self.vao.render()


if __name__ == '__main__':
    run_example(IndexBuffer)
        GL_R32F = 0x822E
        self.texture.bind_to_image(0, GL_WRITE_ONLY, GL_R32F)
        self.compute.run(nx, ny, nz)
        print('-' * 50)

        with self.scope:
            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.objects['billboard-image'].render()


if __name__ == '__main__':
    run_example(RenderTextureCompute)