PyOpenGL과 GLFW를 사용하여 사각형을 그려보는 Modern OpenGL 예제입니다.
다음 깃허브의 코드를 바탕으로 강좌를 진행하고 있습니다. https://github.com/totex/PyOpenGL_tutorials Python으로 배우는 Modern OpenGL - 1. 개발환경 만들기 https://webnautes.tistory.com/1271 Python으로 배우는 Modern OpenGL - 2. 삼각형 그리기(Vertex Buffer Object) https://webnautes.tistory.com/1272 |
이전 포스팅과 겹치는 부분을 제외하고 설명합니다.
사각형을 그리려면 삼각형을 2번 그려야 합니다. 그러면 같은 버텍스를 두 번 정의해야 하는 문제가 생깁니다.
복잡한 모델을 이 방식으로 화면에 보여줄 경우에는 메모리 낭비와 성능 저하가 생길 수 있습니다.
이 문제를 해결하기 위해 EBO(Element Buffer Object)를 사용합니다.
EBO를 사용하면 버텍스에 인덱스를 부여하여 렌더링시 재사용할 수 있도록 해줍니다.
4개의 vertex에 대한 vertex 데이터만 배열에 저장합니다.
추가로 vertex 데이터에 대한 인덱스를 저장하는 elements 배열을 선언하고, 6개의 인덱스를 정의합니다. 두 개의 삼각형을 그릴 때, vertices 배열에서 몇번째 vertex를 이용할지를 정수로 적어주는 것입니다.
# positions colors |
VBO를 생성하여 quad에 있는 버텍스 데이터 96바이트( = 4바이트 x 24 )를 GPU 메모리에 복사합니다.
VBO = glGenBuffers(1) |
EBO를 생성하여 vertex 데이터에 대한 인덱스인 indices 배열을 복사합니다.
‘
EBO = glGenBuffers(1) |
인덱스를 사용하여 삼각형 2개를 그리기위해서 glDrawArrays 함수 대신에 glDrawElements 함수를 사용합니다.
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, None) |
실행시켜 보면 다음 처럼 사각형이 그려집니다.
포스팅에 사용한 코드입니다.
import glfw |
'OpenGL' 카테고리의 다른 글
Visual Studio 2023에 OpenGL 개발 환경 만들기 ( GLFW / GLEW ) (0) | 2023.10.19 |
---|---|
Windows 환경에서 그래픽 드라이버가 지원하는 OpenGL 버전 확인하기 (0) | 2023.10.19 |
Python으로 배우는 Modern OpenGL - 2. 삼각형 그리기(Vertex Buffer Object) (0) | 2018.12.16 |
Python으로 배우는 Modern OpenGL - 1. 개발환경 만들기 (0) | 2018.12.01 |
OpenGL과 MFC 연동 예제( GLEW 사용, Dialog 기반, OpenGL 2.x 코드) (9) | 2017.05.26 |
시간날때마다 틈틈이 이것저것 해보며 블로그에 글을 남깁니다.
블로그의 문서는 종종 최신 버전으로 업데이트됩니다.
여유 시간이 날때 진행하는 거라 언제 진행될지는 알 수 없습니다.
영화,책, 생각등을 올리는 블로그도 운영하고 있습니다.
https://freewriting2024.tistory.com
제가 쓴 책도 한번 검토해보세요 ^^
그렇게 천천히 걸으면서도 그렇게 빨리 앞으로 나갈 수 있다는 건.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!