class HelloTriangle(OpenGLApp):
    def __init__(self):
        super().__init__("Hello Triangle")
        self._vao = 0
        self._shader_program = None

    def initialize(self):
        vertices = np.array([-0.5, -0.5, 0.0, 0.5, -0.5, 0.0, 0.0, 0.5, 0.0],
                            dtype=np.float32)

        self._vao = GL.glGenVertexArrays(1)
        GL.glBindVertexArray(self._vao)

        vbo = GL.glGenBuffers(1)
        GL.glBindBuffer(GL.GL_ARRAY_BUFFER, vbo)
        GL.glBufferData(GL.GL_ARRAY_BUFFER, vertices, GL.GL_STATIC_DRAW)

        GL.glVertexAttribPointer(0, 3, GL.GL_FLOAT, GL.GL_FALSE,
                                 3 * ctypes.sizeof(ctypes.c_float), None)
        GL.glEnableVertexAttribArray(0)

        GL.glBindVertexArray(0)

        vertex_shader = Shader(GL.GL_VERTEX_SHADER,
                               "shaders_src/hello_triangle_vertex.glsl")
        fragment_shader = Shader(GL.GL_FRAGMENT_SHADER,
                                 "shaders_src/hello_triangle_frag.glsl")
        self._shader_program = ShaderProgram(vertex_shader, fragment_shader)
        vertex_shader.delete()
        fragment_shader.delete()

    def render(self):
        self._shader_program.use()
        GL.glBindVertexArray(self._vao)
        GL.glDrawArrays(GL.GL_TRIANGLES, 0, 3)
    def initialize(self):
        vertices = np.array(
            [0.5, 0.5, 0.0, 0.5, -0.5, 0.0, -0.5, -0.5, 0.0, -0.5, 0.5, 0.0],
            dtype=np.float32)

        indices = np.array([0, 1, 3, 1, 2, 3], dtype=np.uint32)

        self._vao = GL.glGenVertexArrays(1)
        GL.glBindVertexArray(self._vao)

        vbo = GL.glGenBuffers(1)
        GL.glBindBuffer(GL.GL_ARRAY_BUFFER, vbo)
        GL.glBufferData(GL.GL_ARRAY_BUFFER, vertices, GL.GL_STATIC_DRAW)

        GL.glVertexAttribPointer(0, 3, GL.GL_FLOAT, GL.GL_FALSE,
                                 3 * ctypes.sizeof(ctypes.c_float), None)
        GL.glEnableVertexAttribArray(0)

        ebo = GL.glGenBuffers(1)
        GL.glBindBuffer(GL.GL_ELEMENT_ARRAY_BUFFER, ebo)
        GL.glBufferData(GL.GL_ELEMENT_ARRAY_BUFFER, indices, GL.GL_STATIC_DRAW)

        GL.glBindVertexArray(0)

        vertex_shader = Shader(GL.GL_VERTEX_SHADER,
                               "shaders_src/hello_triangle_vertex.glsl")
        fragment_shader = Shader(GL.GL_FRAGMENT_SHADER,
                                 "shaders_src/hello_triangle_frag.glsl")

        self._shader_program = ShaderProgram(vertex_shader, fragment_shader)

        vertex_shader.delete()
        fragment_shader.delete()
    def initialize(self):
        vertices = np.array([
            # position       # color
            0.5, 0.5, 0.0, 1.0, 0.0, 0.0,
            -0.5, 0.5, 0.0, 0.0, 1.0, 0.0,
            0.0, -0.5, 0.0, 0.0, 0.0, 1.0],
            dtype=np.float32)

        self._vao = GL.glGenVertexArrays(1)
        GL.glBindVertexArray(self._vao)

        vbo = GL.glGenBuffers(1)
        GL.glBindBuffer(GL.GL_ARRAY_BUFFER, vbo)
        GL.glBufferData(GL.GL_ARRAY_BUFFER, vertices, GL.GL_STATIC_DRAW)

        # position vertex attribute
        GL.glVertexAttribPointer(0, 3, GL.GL_FLOAT, GL.GL_FALSE, 6 * ctypes.sizeof(ctypes.c_float), c_void_p(0))
        GL.glEnableVertexAttribArray(0)
        # color vertex attribute
        GL.glVertexAttribPointer(1, 3, GL.GL_FLOAT, GL.GL_FALSE, 6 * ctypes.sizeof(ctypes.c_float), c_void_p(3 * ctypes.sizeof(ctypes.c_float)))
        GL.glEnableVertexAttribArray(1)

        vertex_shader = Shader(GL.GL_VERTEX_SHADER, "shaders_src/shaders_ex1_vertex.glsl")
        fragment_shader = Shader(GL.GL_FRAGMENT_SHADER, "shaders_src/shaders_ex1_frag.glsl")
        self._shader_program = ShaderProgram(vertex_shader, fragment_shader)
Esempio n. 4
0
class MultiTexturesApp(OpenGLApp):
    def __init__(self):
        super().__init__("Textures")
        self._vao = 0
        self._texture1 = None
        self._texture2 = None
        self._shader_program = None

    def initialize(self):
        vertices = np.array([
            0.5, 0.5, 0.0, 1.0, 1.0,  # top right
            0.5, -0.5, 0.0, 1.0, 0.0,  # bottom right
            -0.5, -0.5, 0.0, 0.0, 0.0,  # bottom left
            -0.5, 0.5, 0.0, 0.0, 1.0  # top left
        ], dtype=np.float32)

        indices = np.array([0, 1, 3, 1, 2, 3], dtype=np.uint32)

        self._vao = GL.glGenVertexArrays(1)
        GL.glBindVertexArray(self._vao)

        vbo = GL.glGenBuffers(1)
        GL.glBindBuffer(GL.GL_ARRAY_BUFFER, vbo)
        GL.glBufferData(GL.GL_ARRAY_BUFFER, vertices, GL.GL_STATIC_DRAW)

        float_size = ctypes.sizeof(ctypes.c_float)
        GL.glVertexAttribPointer(0, 3, GL.GL_FLOAT, GL.GL_FALSE, 5 * float_size, ctypes.c_void_p(0))
        GL.glEnableVertexAttribArray(0)

        GL.glVertexAttribPointer(1, 2, GL.GL_FLOAT, GL.GL_FALSE, 5 * float_size, ctypes.c_void_p(3 * float_size))
        GL.glEnableVertexAttribArray(1)

        ebo = GL.glGenBuffers(1)
        GL.glBindBuffer(GL.GL_ELEMENT_ARRAY_BUFFER, ebo)
        GL.glBufferData(GL.GL_ELEMENT_ARRAY_BUFFER, indices, GL.GL_STATIC_DRAW)

        GL.glBindVertexArray(0)

        self._texture1 = Texture2D("img.png", unit=0)
        self._texture2 = Texture2D("awesomeface.png", flip_y=True, unit=1)

        vertex_shader = Shader(GL.GL_VERTEX_SHADER, "shaders_src/textures_multi_vertex.glsl")
        fragment_shader = Shader(GL.GL_FRAGMENT_SHADER, "shaders_src/textures_multi_frag.glsl")
        self._shader_program = ShaderProgram(vertex_shader, fragment_shader)
        vertex_shader.delete()
        fragment_shader.delete()

    def render(self):
        self._texture1.use()
        self._texture2.use()
        GL.glBindVertexArray(self._vao)
        self._shader_program.use()
        self._shader_program.set_int("texture1", 0)
        self._shader_program.set_int("texture2", 1)
        GL.glDrawElements(GL.GL_TRIANGLES, 6, GL.GL_UNSIGNED_INT, None)
        GL.glBindVertexArray(0)
Esempio n. 5
0
    def initialize(self):
        vertices_a = np.array([
            -0.6, -0.5, 0.0,
            0.4, -0.5, 0.0,
            -0.1, 0.5, 0.0], dtype=np.float32)

        vertices_b = np.array([
            0.1, 0.5, 0.0,
            0.6, -0.5, 0.0,
            1.0, 0.5, 0.0
        ], dtype=np.float32)

        self._vao_a = GL.glGenVertexArrays(1)
        GL.glBindVertexArray(self._vao_a)

        vbo = GL.glGenBuffers(1)
        GL.glBindBuffer(GL.GL_ARRAY_BUFFER, vbo)
        GL.glBufferData(GL.GL_ARRAY_BUFFER, vertices_a, GL.GL_STATIC_DRAW)

        GL.glVertexAttribPointer(0, 3, GL.GL_FLOAT, GL.GL_FALSE, 3 * ctypes.sizeof(ctypes.c_float), None)
        GL.glEnableVertexAttribArray(0)

        GL.glBindVertexArray(0)

        self._vao_b = GL.glGenVertexArrays(1)
        GL.glBindVertexArray(self._vao_b)

        vbo = GL.glGenBuffers(1)
        GL.glBindBuffer(GL.GL_ARRAY_BUFFER, vbo)
        GL.glBufferData(GL.GL_ARRAY_BUFFER, vertices_b, GL.GL_STATIC_DRAW)

        GL.glVertexAttribPointer(0, 3, GL.GL_FLOAT, GL.GL_FALSE, 3 * ctypes.sizeof(ctypes.c_float), None)
        GL.glEnableVertexAttribArray(0)

        GL.glBindVertexArray(0)

        vertex_shader = Shader(GL.GL_VERTEX_SHADER, "shaders_src/hello_triangle_vertex.glsl")
        fragment_shader_orange = Shader(GL.GL_FRAGMENT_SHADER, "shaders_src/hello_triangle_ex3_frag.glsl.template", color="1.0, 0.6, 0.2, 1.0")
        fragment_shader_pink = Shader(GL.GL_FRAGMENT_SHADER, "shaders_src/hello_triangle_ex3_frag.glsl.template", color="1.0, 0.75, 0.8, 1.0")

        self._shader_program_orange = ShaderProgram(vertex_shader, fragment_shader_orange)
        self._shader_program_pink = ShaderProgram(vertex_shader, fragment_shader_pink)

        vertex_shader.delete()
        fragment_shader_orange.delete()
        fragment_shader_pink.delete()
Esempio n. 6
0
class HelloTriangleImgui(OpenGLApp):
    def __init__(self):
        super().__init__("Hello Triangle with ImGui")
        self._vao = 0
        self._shader_program = None
        self._ui = None

    def initialize(self):
        vertices = np.array([-0.5, -0.5, 0.0, 0.5, -0.5, 0.0, 0.0, 0.5, 0.0], dtype=np.float32)

        self._vao = GL.glGenVertexArrays(1)
        GL.glBindVertexArray(self._vao)

        vbo = GL.glGenBuffers(1)
        GL.glBindBuffer(GL.GL_ARRAY_BUFFER, vbo)
        GL.glBufferData(GL.GL_ARRAY_BUFFER, vertices, GL.GL_STATIC_DRAW)

        GL.glVertexAttribPointer(0, 3, GL.GL_FLOAT, GL.GL_FALSE, 3 * ctypes.sizeof(ctypes.c_float), None)
        GL.glEnableVertexAttribArray(0)

        GL.glBindVertexArray(0)

        vertex_shader = Shader(GL.GL_VERTEX_SHADER, "shaders_src/hello_triangle_vertex.glsl")
        fragment_shader = Shader(GL.GL_FRAGMENT_SHADER, "shaders_src/hello_triangle_frag.glsl")
        self._shader_program = ShaderProgram(vertex_shader, fragment_shader)
        vertex_shader.delete()
        fragment_shader.delete()

        imgui.create_context()
        self._ui = GlfwRenderer(self._window, False)

    def render(self):
        self._shader_program.use()
        GL.glBindVertexArray(self._vao)
        GL.glDrawArrays(GL.GL_TRIANGLES, 0, 3)

    def render_ui(self):
        imgui.new_frame()
        imgui.show_demo_window()
        imgui.render()
        self._ui.render(imgui.get_draw_data())
        self._ui.process_inputs()
Esempio n. 7
0
    def initialize(self):
        vertices = np.array([
            0.5, 0.5, 0.0, 1.0, 1.0,  # top right
            0.5, -0.5, 0.0, 1.0, 0.0,  # bottom right
            -0.5, -0.5, 0.0, 0.0, 0.0,  # bottom left
            -0.5, 0.5, 0.0, 0.0, 1.0  # top left
        ], dtype=np.float32)

        indices = np.array([0, 1, 3, 1, 2, 3], dtype=np.uint32)

        self._vao = GL.glGenVertexArrays(1)
        GL.glBindVertexArray(self._vao)

        vbo = GL.glGenBuffers(1)
        GL.glBindBuffer(GL.GL_ARRAY_BUFFER, vbo)
        GL.glBufferData(GL.GL_ARRAY_BUFFER, vertices, GL.GL_STATIC_DRAW)

        float_size = ctypes.sizeof(ctypes.c_float)
        GL.glVertexAttribPointer(0, 3, GL.GL_FLOAT, GL.GL_FALSE, 5 * float_size, ctypes.c_void_p(0))
        GL.glEnableVertexAttribArray(0)

        GL.glVertexAttribPointer(1, 2, GL.GL_FLOAT, GL.GL_FALSE, 5 * float_size, ctypes.c_void_p(3 * float_size))
        GL.glEnableVertexAttribArray(1)

        ebo = GL.glGenBuffers(1)
        GL.glBindBuffer(GL.GL_ELEMENT_ARRAY_BUFFER, ebo)
        GL.glBufferData(GL.GL_ELEMENT_ARRAY_BUFFER, indices, GL.GL_STATIC_DRAW)

        GL.glBindVertexArray(0)

        self._texture1 = Texture2D("img.png", unit=0)
        self._texture2 = Texture2D("awesomeface.png", flip_y=True, unit=1)

        vertex_shader = Shader(GL.GL_VERTEX_SHADER, "shaders_src/textures_multi_vertex.glsl")
        fragment_shader = Shader(GL.GL_FRAGMENT_SHADER, "shaders_src/textures_multi_frag.glsl")
        self._shader_program = ShaderProgram(vertex_shader, fragment_shader)
        vertex_shader.delete()
        fragment_shader.delete()
class ShadersApp(OpenGLApp):
    def __init__(self):
        super().__init__("Shaders Uniform")
        self._vao = 0
        self._shader_program = None

    def initialize(self):
        vertices = np.array([-0.5, -0.5, 0.0, 0.5, -0.5, 0.0, 0.0, 0.5, 0.0], dtype=np.float32)

        self._vao = GL.glGenVertexArrays(1)
        GL.glBindVertexArray(self._vao)

        vbo = GL.glGenBuffers(1)
        GL.glBindBuffer(GL.GL_ARRAY_BUFFER, vbo)
        GL.glBufferData(GL.GL_ARRAY_BUFFER, vertices, GL.GL_STATIC_DRAW)

        GL.glVertexAttribPointer(0, 3, GL.GL_FLOAT, GL.GL_FALSE, 3 * ctypes.sizeof(ctypes.c_float), None)
        GL.glEnableVertexAttribArray(0)

        GL.glBindVertexArray(0)

        vertex_shader = Shader(GL.GL_VERTEX_SHADER, "shaders_src/hello_triangle_vertex.glsl")
        fragment_shader = Shader(GL.GL_FRAGMENT_SHADER, "shaders_src/shaders_uniform_frag.glsl")
        self._shader_program = ShaderProgram(vertex_shader, fragment_shader)
        vertex_shader.delete()
        fragment_shader.delete()

    def render(self):
        self._shader_program.use()

        # Update the uniform color
        time_value = glfw.get_time()
        green_value = math.sin(time_value) / 2.0 + 0.5
        self._shader_program.set_float4("ourColor", 0.0, green_value, 0.0, 0.0)

        GL.glBindVertexArray(self._vao)
        GL.glDrawArrays(GL.GL_TRIANGLES, 0, 3)
class ShadersEx1(OpenGLApp):
    def __init__(self):
        super().__init__("Shaders Exercise 1")
        self._vao = 0
        self._shader_program = None

    def initialize(self):
        vertices = np.array([
            # position       # color
            0.5, 0.5, 0.0, 1.0, 0.0, 0.0,
            -0.5, 0.5, 0.0, 0.0, 1.0, 0.0,
            0.0, -0.5, 0.0, 0.0, 0.0, 1.0],
            dtype=np.float32)

        self._vao = GL.glGenVertexArrays(1)
        GL.glBindVertexArray(self._vao)

        vbo = GL.glGenBuffers(1)
        GL.glBindBuffer(GL.GL_ARRAY_BUFFER, vbo)
        GL.glBufferData(GL.GL_ARRAY_BUFFER, vertices, GL.GL_STATIC_DRAW)

        # position vertex attribute
        GL.glVertexAttribPointer(0, 3, GL.GL_FLOAT, GL.GL_FALSE, 6 * ctypes.sizeof(ctypes.c_float), c_void_p(0))
        GL.glEnableVertexAttribArray(0)
        # color vertex attribute
        GL.glVertexAttribPointer(1, 3, GL.GL_FLOAT, GL.GL_FALSE, 6 * ctypes.sizeof(ctypes.c_float), c_void_p(3 * ctypes.sizeof(ctypes.c_float)))
        GL.glEnableVertexAttribArray(1)

        vertex_shader = Shader(GL.GL_VERTEX_SHADER, "shaders_src/shaders_ex1_vertex.glsl")
        fragment_shader = Shader(GL.GL_FRAGMENT_SHADER, "shaders_src/shaders_ex1_frag.glsl")
        self._shader_program = ShaderProgram(vertex_shader, fragment_shader)

    def render(self):
        self._shader_program.use()
        GL.glBindVertexArray(self._vao)
        GL.glDrawArrays(GL.GL_TRIANGLES, 0, 3)
class TexturesApp(OpenGLApp):
    def __init__(self):
        super().__init__("Textures Exercise 3")
        self._vao = 0
        self._texture = None
        self._shader_program = None

    def initialize(self):
        vertices = np.array(
            [
                0.5,
                0.5,
                0.0,
                1.0,
                0.0,
                0.0,
                0.55,
                0.55,  # top right
                0.5,
                -0.5,
                0.0,
                0.0,
                1.0,
                0.0,
                0.55,
                0.45,  # bottom right
                -0.5,
                -0.5,
                0.0,
                0.0,
                0.0,
                1.0,
                0.45,
                0.45,  # bottom left
                -0.5,
                0.5,
                0.0,
                1.0,
                1.0,
                0.0,
                0.45,
                0.55  # top left
            ],
            dtype=np.float32)

        indices = np.array([0, 1, 3, 1, 2, 3], dtype=np.uint32)

        self._vao = GL.glGenVertexArrays(1)
        GL.glBindVertexArray(self._vao)

        vbo = GL.glGenBuffers(1)
        GL.glBindBuffer(GL.GL_ARRAY_BUFFER, vbo)
        GL.glBufferData(GL.GL_ARRAY_BUFFER, vertices, GL.GL_STATIC_DRAW)

        float_size = ctypes.sizeof(ctypes.c_float)
        GL.glVertexAttribPointer(0, 3, GL.GL_FLOAT, GL.GL_FALSE,
                                 8 * float_size, ctypes.c_void_p(0))
        GL.glEnableVertexAttribArray(0)

        GL.glVertexAttribPointer(1, 3, GL.GL_FLOAT,
                                 GL.GL_FALSE, 8 * float_size,
                                 ctypes.c_void_p(3 * float_size))
        GL.glEnableVertexAttribArray(1)

        GL.glVertexAttribPointer(2, 2, GL.GL_FLOAT,
                                 GL.GL_FALSE, 8 * float_size,
                                 ctypes.c_void_p(6 * float_size))
        GL.glEnableVertexAttribArray(2)

        ebo = GL.glGenBuffers(1)
        GL.glBindBuffer(GL.GL_ELEMENT_ARRAY_BUFFER, ebo)
        GL.glBufferData(GL.GL_ELEMENT_ARRAY_BUFFER, indices, GL.GL_STATIC_DRAW)

        GL.glBindVertexArray(0)

        self._texture = Texture2D("awesomeface.png",
                                  flip_y=True,
                                  wrap_s=GL.GL_REPEAT,
                                  wrap_t=GL.GL_REPEAT,
                                  min_filter=GL.GL_NEAREST,
                                  mag_filter=GL.GL_NEAREST)

        vertex_shader = Shader(GL.GL_VERTEX_SHADER,
                               "shaders_src/textures_vertex.glsl")
        fragment_shader = Shader(GL.GL_FRAGMENT_SHADER,
                                 "shaders_src/textures_frag.glsl")
        self._shader_program = ShaderProgram(vertex_shader, fragment_shader)
        vertex_shader.delete()
        fragment_shader.delete()

    def render(self):
        self._texture.use()
        GL.glBindVertexArray(self._vao)
        self._shader_program.use()
        GL.glDrawElements(GL.GL_TRIANGLES, 6, GL.GL_UNSIGNED_INT, None)
        GL.glBindVertexArray(0)