[python] 파이썬과 PyOpenGL을 사용하여 실시간으로 회전하는 큐브 만들기

이 튜토리얼에서는 파이썬과 PyOpenGL을 사용하여 실시간으로 회전하는 큐브를 만드는 방법에 대해 알아보겠습니다. 이 프로젝트는 OpenGL을 사용하여 3D 그래픽을 생성하고 제어하는 방법을 배울 수 있는 좋은 예시입니다.

필요한 도구

이 튜토리얼을 진행하기 위해 다음 도구들이 필요합니다:

Python 3.x를 설치했다면, 아래 명령어를 사용하여 PyOpenGL과 Pygame을 설치할 수 있습니다.

pip install PyOpenGL PyOpenGL_accelerate pygame

OpenGL 컨텍스트 설정

먼저, PyOpenGL을 사용하기 위해 OpenGL 컨텍스트를 설정해야 합니다. 이러한 작업은 Pygame을 사용하여 수행할 수 있습니다. 다음 코드는 Pygame 창을 생성하고 OpenGL 컨텍스트를 설정하는 방법을 보여줍니다.

import pygame
from pygame.locals import *
from OpenGL.GL import *
from OpenGL.GLU import *

pygame.init()
display = (800, 600)
pygame.display.set_mode(display, DOUBLEBUF|OPENGL)
gluPerspective(45, (display[0]/display[1]), 0.1, 50.0)
glTranslatef(0.0, 0.0, -5)

큐브 작성

이제 큐브를 작성하는 함수를 만들어보겠습니다. 큐브를 작성하기 위해 8개의 정점과 6개의 면을 사용합니다. 아래 코드는 이러한 정보를 사용하여 큐브를 그리는 방법을 보여줍니다.

def draw_cube():
    vertices = (
        (-1, -1, -1),
        (1, -1, -1),
        (1, 1, -1),
        (-1, 1, -1),
        (-1, -1, 1),
        (1, -1, 1),
        (1, 1, 1),
        (-1, 1, 1)
    )

    edges = (
        (0, 1),
        (1, 2),
        (2, 3),
        (3, 0),
        (4, 5),
        (5, 6),
        (6, 7),
        (7, 4),
        (0, 4),
        (1, 5),
        (2, 6),
        (3, 7)
    )
    
    faces = (
        (0, 1, 2, 3),
        (3, 2, 7, 6),
        (6, 7, 5, 4),
        (4, 5, 1, 0),
        (1, 5, 6, 2),
        (4, 0, 3, 7)
    )

    glBegin(GL_QUADS)
    for face in faces:
        for vertex in face:
            glVertex3fv(vertices[vertex])
    glEnd()

    glBegin(GL_LINES)
    for edge in edges:
        for vertex in edge:
            glVertex3fv(vertices[vertex])
    glEnd()

게임 루프 생성

마지막으로, 게임 루프를 생성하여 큐브를 실시간으로 회전시키는 코드를 작성해보겠습니다. 이 코드는 사용자 입력을 처리하고, OpenGL 컨텍스트를 업데이트하며, 큐브를 그리는 역할을 수행합니다.

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            quit()

    glRotatef(1, 3, 1, 1)
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)
    draw_cube()
    pygame.display.flip()
    pygame.time.wait(10)

마무리

이제 모든 코드가 완성되었습니다. 위의 코드를 모두 복사해서 실행하면 실시간으로 회전하는 큐브가 화면에 나타날 것입니다. 이 프로젝트를 통해 PyOpenGL과 Pygame을 사용하여 3D 그래픽을 만드는 기본적인 개념을 익힐 수 있습니다.

더 자세한 내용은 다음 참조를 확인해보세요:

감사합니다.