프로그램
[파이썬] OpenGL 사용해서 삼각형, 사각형, 원 그리기
오디세이99
2024. 7. 13. 17:21
728x90
반응형
import pygame # Pygame 모듈을 임포트
from pygame.locals import * # Pygame 로컬 상수 임포트
from OpenGL.GL import * # OpenGL 함수 임포트
from OpenGL.GLU import * # OpenGL 유틸리티 함수 임포트
import math # 수학 함수 사용을 위한 math 모듈 임포트
def draw_triangle(): # 삼각형을 그리는 함수 정의
glBegin(GL_TRIANGLES) # 삼각형 그리기 시작
glVertex2f(-0.2, -0.2) # 첫 번째 꼭짓점 좌표
glVertex2f(0.2, -0.2) # 두 번째 꼭짓점 좌표
glVertex2f(0.0, 0.2) # 세 번째 꼭짓점 좌표
glEnd() # 그리기 종료
def draw_square(): # 사각형을 그리는 함수 정의
glBegin(GL_QUADS) # 사각형 그리기 시작
glVertex2f(-0.2, -0.2) # 첫 번째 꼭짓점 좌표
glVertex2f(0.2, -0.2) # 두 번째 꼭짓점 좌표
glVertex2f(0.2, 0.2) # 세 번째 꼭짓점 좌표
glVertex2f(-0.2, 0.2) # 네 번째 꼭짓점 좌표
glEnd() # 그리기 종료
def draw_circle(radius=0.2, num_segments=100): # 원을 그리는 함수 정의
theta = 2 * 3.1415926 / num_segments # 원의 각도 계산
c = math.cos(theta) # 코사인 값 계산
s = math.sin(theta) # 사인 값 계산
x = radius # 초기 x 좌표
y = 0 # 초기 y 좌표
glBegin(GL_POLYGON) # 다각형 그리기 시작
for i in range(num_segments): # 각 세그먼트에 대해
glVertex2f(x, y) # 꼭짓점 추가
t = x # 임시 변수에 x 저장
x = c * x - s * y # 회전 변환
y = s * t + c * y # 회전 변환
glEnd() # 그리기 종료
def main(): # 메인 함수 정의
pygame.init() # Pygame 초기화
display = (1000, 600) # 창 크기 설정
pygame.display.set_mode(display, DOUBLEBUF | OPENGL) # OpenGL 창 생성
width, height = display # 창의 너비와 높이 설정
gluOrtho2D(-1, 1, -1 * height / width, 1 * height / width) # 종횡비 맞추기
while True: # 무한 루프 시작
for event in pygame.event.get(): # 이벤트 처리
if event.type == pygame.QUIT: # 창 닫기 이벤트 처리
pygame.quit() # Pygame 종료
return # 함수 종료
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) # 화면 지우기
glColor3f(1, 0, 0) # 빨간색 설정
glPushMatrix() # 현재 변환 행렬 저장
glTranslatef(-0.5, 0, 0) # 위치 이동
draw_triangle() # 삼각형 그리기
glPopMatrix() # 이전 변환 행렬 복원
glColor3f(0, 1, 0) # 초록색 설정
glPushMatrix() # 현재 변환 행렬 저장
glTranslatef(0.5, 0, 0) # 위치 이동
draw_square() # 사각형 그리기
glPopMatrix() # 이전 변환 행렬 복원
glColor3f(0, 0, 1) # 파란색 설정
glPushMatrix() # 현재 변환 행렬 저장
glTranslatef(0, 0, 0) # 위치 이동
draw_circle() # 원 그리기
glPopMatrix() # 이전 변환 행렬 복원
pygame.display.flip() # 화면 업데이트
pygame.time.wait(10) # 잠시 대기
if __name__ == "__main__": # 메인 함수 실행 조건
main() # 메인 함수 실행
728x90
반응형