[python] PyOpenGL을 활용하여 3D 모델에 텍스처 매핑 적용하기

이번 포스트에서는 PyOpenGL을 사용하여 3D 모델에 텍스처 매핑을 적용하는 방법에 대해 알아보겠습니다.

1. PyOpenGL 설치하기

PyOpenGL은 OpenGL을 파이썬에서 사용할 수 있도록 해주는 라이브러리입니다. 아래 명령을 사용하여 PyOpenGL을 설치합니다.

pip install PyOpenGL

2. OpenGL 초기화하기

먼저, OpenGL을 초기화하는 코드를 작성해보겠습니다. 아래 코드는 PyOpenGL을 사용하여 OpenGL을 초기화하는 간단한 예제입니다.

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

def initialize():
    glutInit()
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH)
    glutInitWindowSize(800, 600)
    glutCreateWindow(b"Texture Mapping Example")
    glEnable(GL_TEXTURE_2D)
    glClearColor(0.0, 0.0, 0.0, 1.0)
    gluOrtho2D(0, 800, 0, 600)

3. 텍스처 로딩하기

다음으로, 텍스처를 로딩하는 함수를 작성해보겠습니다. PyOpenGL은 OpenGL의 기능을 모두 사용할 수 있기 때문에 텍스처 로딩 역시 OpenGL의 기능을 활용합니다.

from PIL import Image

def load_texture(filename):
    image = Image.open(filename)
    image_data = numpy.array(list(image.getdata()), numpy.uint8)

    texture_id = glGenTextures(1)
    glBindTexture(GL_TEXTURE_2D, texture_id)
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, image.width, image.height, 0, GL_RGB, GL_UNSIGNED_BYTE, image_data)

    return texture_id

4. 텍스처 매핑 적용하기

마지막으로, 3D 모델에 텍스처 매핑을 적용하는 코드를 작성해보겠습니다. 아래 코드는 OpenGL의 기능을 사용하여 텍스처 매핑을 적용하는 예제입니다.

def draw_model(texture_id):
    glBindTexture(GL_TEXTURE_2D, texture_id)
    glBegin(GL_QUADS)
    glTexCoord2f(0.0, 0.0)
    glVertex3f(-1.0, -1.0, 0.0)
    glTexCoord2f(1.0, 0.0)
    glVertex3f(1.0, -1.0, 0.0)
    glTexCoord2f(1.0, 1.0)
    glVertex3f(1.0, 1.0, 0.0)
    glTexCoord2f(0.0, 1.0)
    glVertex3f(-1.0, 1.0, 0.0)
    glEnd()

5. 실행하기

이제 위에서 작성한 함수들을 사용하여 OpenGL을 초기화하고, 텍스처를 로딩하고, 텍스처 매핑을 적용하는 코드를 작성합니다.

def main():
    initialize()
    texture_id = load_texture("texture.png")

    glutDisplayFunc(lambda: draw_model(texture_id))
    glutMainLoop()

if __name__ == "__main__":
    main()

위 코드를 실행하면 3D 모델에 텍스처가 적용된 화면을 볼 수 있습니다.

이렇게 PyOpenGL을 활용하여 3D 모델에 텍스처 매핑을 적용하는 방법에 대해 알아보았습니다. PyOpenGL을 통해 다양한 텍스처 매핑 효과를 구현할 수 있으니, 참고하여 활용해보시기 바랍니다.