본문 바로가기

그래픽스

OpenGL with Python 1: Intro and Setup

https://www.youtube.com/watch?v=LCK1qdp_HhQ&t=94s

설정

원하는 폴더에 game.py를 만들고 아래의 두개를 설치한다.

  1. pip install pygame
  2. pip install PyOpenGL PyOpenGL_accelerate

코드

전체코드

import pygame as pg
from OpenGL.GL import *

class App:

    def __init__(self):
        #initialize Python
        pg.init()
        pg.display.set_mode((640,480), pg.OPENGL|pg.DOUBLEBUF)
        self.clock = pg.time.Clock()
        #initialize opengl
        glClearColor(0.1, 0.2, 0.2, 1) #RGBA
        self.mainLoop()

    def mainLoop(self):
        running = True
        while(running):
            #check events
            for event in pg.event.get():
                if(event.type ==pg.QUIT):
                    running = False

            # refresh screen
            glClear(GL_COLOR_BUFFER_BIT)
            pg.display.flip()

            #timing
            self.clock.tick(60)
        self.quit()

    def quit(self):
        pg.quit()

if __name__ == "__main__":
    myApp = App()

코드설명

PyGame 및 PyOpenGL 패키지를 가져온다.

import pygame as pg
from OpenGL.GL import *

 

초기화, 실행, 종료가 있는 새로운 app클래스를 만든다

class App:

 

PyGame을 초기화하고 새 화면을 만들려면 pygame.display.set_mode() 함수를 사용한다. 이후 pg.OPENGL로 OPENGL 플래그를 전달하고 이중 버퍼링 시스템을 사용한다. 이중 버퍼링 시스템은 화면을 렌더링하는 데 두 개의 버퍼를 사용 것이고, 한 버퍼는 그리기를 수행하는 동안 다른 버퍼는 표시된다.

    def __init__(self):
        #initialize Python
        pg.init()
        pg.display.set_mode((640,480), pg.OPENGL|pg.DOUBLEBUF)
        self.clock = pg.time.Clock()
        #initialize opengl
        glClearColor(0.1, 0.2, 0.2, 1) #RGBA
        self.mainLoop()

 

무한히 실행되는 메인 루프 함수를 만들어 루프 내에서 코드가 실행이 되는지 이벤트를 확인하고, 색상 버퍼를 지우고, 화면을 업데이트하고, 시간 hz를 입력한다.

또한 색상버퍼를 보면 이진 산술이다. OpenGL이 색상 및 기타 데이터를 이진 형식으로 사용하기 때문에 OpenGL 프로그래밍에서 이진 산술이 많이 사용된다.

    def mainLoop(self):
        running = True
        while(running):
            #check events
            for event in pg.event.get():
                if(event.type ==pg.QUIT):
                    running = False
            
            # refresh screen
            glClear(GL_COLOR_BUFFER_BIT)
            pg.display.flip()

            #timing
            self.clock.tick(60)
        self.quit()

 

할당된 메모리를 해제하는 quit() 함수 설정한다.

def quit(self):
    pg.quit()

 

결과

glClearColor(0.1, 0.2, 0.2, 1)의 값을 조정하면 RGBA에따라 화면 색상이 달라진다.

'그래픽스' 카테고리의 다른 글

OpenGL with Python 2: Drawing a Triangle  (2) 2023.10.10