[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을 통해 다양한 텍스처 매핑 효과를 구현할 수 있으니, 참고하여 활용해보시기 바랍니다.