Python OpenGL과 멀티미디어 사용하는 pyglet 라이브러리 알아보기

오늘은 Python으로 대부분 운영체제에서 멀티 미디어를 구동하거나 openGL으로 간단하게 그림을 그릴 수 있는 라이브러리인 pyglet을 적용해보려 합니다.

pyglet 설치

우선 virtualenv로 파이썬 환경을 분리해줍니다.

pip3 install virtualenv
virtualenv -mvenv env

env라는 이름의 가상 환경을 생성합니다.

source env/bin/activate

가상환경을 폴더에서 활성화합니다.

pip3 install --upgrade pip

pip의 업그레이드가 존재하는지 확인하고 진행합니다.

pip install pyglet

pip로 pyglet을 설치합니다.

hello world

import pyglet

pyglet을 가져옵니다.

window = pyglet.window.Window()

Window 객체를 반환합니다.

label = pyglet.text.Label('Hello, world',
                          font_size=36,
                          x=window.width // 2,
                          y=window.height // 2,
                          anchor_x='center',
                          anchor_y='center')

Hello, world라는 문자열을 라벨로 출력합니다.

@window.event
def on_draw():
    label.draw()

만든 라벨을 그려줍니다.

pyglet.app.run()

pyglet 이벤트와 윈도우를 수행합니다

multi media

image = pyglet.image.load('image.png')
image.blit(0, 0)
music = pyglet.resource.media('music.mp3')
music.play()

사진이나 음악을 가져와서 보여주거나 재생할 수 있습니다.

input

import pyglet
from pyglet.window import mouse, key

마우스와 키보드를 인식하기 위해 pyglet의 mouse, key를 가져옵니다.

window = pyglet.window.Window()

Window 객체를 반환합니다.

@window.event
def on_key_press(symbol, modifiers):
    if symbol == key.A:
        print('A')
    elif symbol == key.S:
        print('S')
    elif symbol == key.D:
        print('D')
    elif symbol == key.F:
        print('F')

on_key_press 이벤트 함수로 키가 눌렸을 때에 조건문을 만들 수 있습니다.

    elif symbol == key.LEFT:
        print('left')
    elif symbol == key.RIGHT:
        print('right')
    elif symbol == key.UP:
        print('up')
    elif symbol == key.DOWN:
        print('down')

방향키도 동일하게 처리할 수 있습니다.

@window.event
def on_mouse_press(x, y, button, modifiers):
    if button == mouse.LEFT:
        print('mouse left')
    elif button == mouse.RIGHT:
        print('mouse right')

마우스도 왼쪽 클릭과 오른쪽 클릭을 할 수 있습니다.

@window.event
def on_draw():
    window.clear()

on_draw 이벤트 함수로 화면이 그려질 때 할 행동을 지정할 수 있습니다.

pyglet.app.run()

pyglet 이벤트와 윈도우를 수행합니다

OpenGL

from pyglet.gl import *

pyglet.gl을 가져옵니다.

win = pyglet.window.Window()

Window 객체를 반환합니다.

@win.event
def on_draw():
    glBegin(GL_LINES)
    glVertex3f(100.0, 100.0, 0)
    glVertex3f(400.0, 100.0, 0)
    glEnd()

    glBegin(GL_LINES)
    glVertex3f(100.0, 400.0, 0)
    glVertex3f(100.0, 100.0, 0)
    glEnd()

    glBegin(GL_LINES)
    glVertex3f(400.0, 100.0, 0)
    glVertex3f(400.0, 400.0, 0)
    glEnd()

    glBegin(GL_LINES)
    glVertex3f(100.0, 400.0, 0)
    glVertex3f(400.0, 400.0, 0)
    glEnd()

openGL로 선을 그립니다.

glBegin으로 그리기를 시작하고, glEnd로 그리는 것을 종료합니다.

glVertex3f로 각각 x, y, z 좌표를 작성하여 서로 두 선을 이을 수 있습니다.

pyglet.app.run()

pyglet 이벤트와 윈도우를 수행합니다

Written on May 15, 2019