[python] PyOpenGL을 활용한 파이썬 게임 엔진 개발하기

파이썬을 이용하여 게임 개발을 하고 싶다면, PyOpenGL은 필수적인 라이브러리입니다. PyOpenGL은 OpenGL을 파이썬에서 사용할 수 있게 해주는 라이브러리로, 게임 그래픽을 효과적으로 처리할 수 있는 강력한 도구입니다. 이번 포스트에서는 PyOpenGL을 활용하여 파이썬 게임 엔진을 개발하는 방법에 대해 알아보겠습니다.

1. PyOpenGL 설치하기

PyOpenGL을 사용하기 위해서는 먼저 설치가 필요합니다. 다음 명령어를 사용하여 PyOpenGL을 설치할 수 있습니다.

pip install PyOpenGL

2. 게임 윈도우 생성하기

PyOpenGL을 사용하여 게임을 개발하기 위해서는 먼저 게임 윈도우를 생성해야 합니다. 다음 코드는 PyOpenGL을 사용하여 간단한 게임 윈도우를 생성하는 예제입니다.

from OpenGL.GLUT import *
from OpenGL.GL import *

def display():
    glClear(GL_COLOR_BUFFER_BIT)
    glFlush()

glutInit()
glutInitWindowSize(800, 600)
glutCreateWindow(b"PyOpenGL Game Engine")
glutDisplayFunc(display)
glutMainLoop()

위 코드를 실행하면 800x600 크기의 윈도우가 생성되고, 윈도우 내부는 텅 빈 상태로 나타납니다.

3. 2D 그래픽 처리하기

게임에서는 주로 2D 그래픽을 사용하여 게임 오브젝트를 그리고, 애니메이션을 구현합니다. PyOpenGL을 사용하여 간단한 2D 그래픽을 그려보겠습니다.

def display():
    glClear(GL_COLOR_BUFFER_BIT)
    
    glColor3f(1.0, 1.0, 1.0)  # 흰색으로 설정
    glBegin(GL_QUADS)  # 사각형 그리기 시작
    glVertex2f(-0.5, -0.5)
    glVertex2f(0.5, -0.5)
    glVertex2f(0.5, 0.5)
    glVertex2f(-0.5, 0.5)
    glEnd()  # 사각형 그리기 종료
    
    glFlush()

glutInit()
glutInitWindowSize(800, 600)
glutCreateWindow(b"PyOpenGL Game Engine")
glutDisplayFunc(display)
glutMainLoop()

위 코드는 윈도우 내에 흰색의 사각형을 그리는 예제입니다. glColor3f 함수로 색상을 지정하고, glBeginglEnd 함수로 사각형의 꼭짓점을 지정하여 사각형을 그립니다.

4. 키 입력 처리하기

게임에서는 플레이어의 키 입력에 따라 게임 오브젝트를 움직이는 등의 동작을 구현해야 합니다. PyOpenGL을 사용하여 키 입력을 처리하는 예제를 살펴보겠습니다.

def display():
    glClear(GL_COLOR_BUFFER_BIT)
    glFlush()

def keyboard(key, x, y):
    if key == b'q':  # 'q' 키를 누르면 종료
        sys.exit()

glutInit()
glutInitWindowSize(800, 600)
glutCreateWindow(b"PyOpenGL Game Engine")
glutDisplayFunc(display)
glutKeyboardFunc(keyboard)  # 키 입력 처리 함수 등록
glutMainLoop()

위 코드는 ‘q’ 키를 누르면 게임을 종료하는 예제입니다. keyboard 함수에서는 키 입력을 매개변수로 받아 처리하고, glutKeyboardFunc 함수로 키 입력을 처리하는 함수를 등록합니다.

5. 마우스 입력 처리하기

게임에서는 마우스 입력에 따라서 게임 오브젝트를 선택하거나, 클릭한 위치에 따라 동작을 구현해야 합니다. PyOpenGL을 사용하여 마우스 입력을 처리하는 예제를 살펴보겠습니다.

def display():
    glClear(GL_COLOR_BUFFER_BIT)
    glFlush()

def mouse(button, state, x, y):
    if button == GLUT_LEFT_BUTTON and state == GLUT_DOWN:  # 왼쪽 버튼이 눌렸을 때
        print(f"Clicked at ({x}, {y})")

glutInit()
glutInitWindowSize(800, 600)
glutCreateWindow(b"PyOpenGL Game Engine")
glutDisplayFunc(display)
glutMouseFunc(mouse)  # 마우스 입력 처리 함수 등록
glutMainLoop()

위 코드는 마우스 왼쪽 버튼이 클릭된 경우 클릭한 위치를 출력하는 예제입니다. mouse 함수에서는 마우스 입력을 매개변수로 받아 처리하고, glutMouseFunc 함수로 마우스 입력을 처리하는 함수를 등록합니다.

결론

위에서 소개한 방법을 기반으로 PyOpenGL을 활용하여 파이썬 게임 엔진을 개발할 수 있습니다. PyOpenGL의 다양한 기능들을 익히고, 게임에 맞는 다양한 시스템들을 구현해보세요. Happy coding!

참고 자료