1. 기초 용어 정리
GLUT : openGL Utility Toolkit. 그래픽과는 무관한 기능으로 그래픽을 그리기 위한 껍데기를 만들어준다.
freeglut : GLUT 라이브러리 대신 쓰는 오픈소스
GLEW : the openGL Extension Wrangler library, openGL의 헤더파일
-> openGL은 하나의 라이브러리가 아니라서, glew.h를 include하여 openGL의 기능을 사용함.
-> openGL 사용을 위해, freeglut, glew의 두가지 라이브러리가 필요하다.
opengl | directX | |
공통점 | 2D/3D graphics API | |
차이점 | 세계적 표준. intel, NVIDIA에서 사용. | microsoft가 window 전용으로 만듬. |
cross-language : 언어 무관
cross-platform : platform 무관 (Window, MacOS, Linux 무관)
-openGL은 cross-language, cross-platform하다.
vertex : 정점
vertex shader : vertex를 화면에 그리는 과정
pixel shader : vertex shader단계 이후. pixel에 이미지를 그리는 과정
primitive : openGL이 그릴 수 있는 점, 선, 삼각형 같은 기본 요소
VBO : Vertex Buffer Objects
VAO : Vertex Array Objects
- vertex 정보 -> VBO -> VAO
FPS : Frame per second. 높을수록 부드럽다. 60fps 이상 추천
해상도(resolution) : 한 화면을 구성하는 화소(pixel) 수
-> 1920 * 1080 : full HD (FHD) / 3840 * 2160 : 4K (UHD)
V-sync : vertical synchronization(수직 동기화)
UV coordinate(uv 좌표) : uvw 세개의 값을 갖지만, 주로 uv 두 값 사용
2. 함수 정리
glutInit
-GLUT 라이브러리 초기화, 기반 플랫폼(Window, macOS)의 윈도우 시스템과 연결.
-main으로부터 전달받은 argc, argv를 전달하는데, 반드시 참조로 전달!
-★에러처리
glutInitContextVersion
-인자로 입력하는 version의 사용을 요청하는 함수.
-내 경우에는 opengl version이 4.0이고, 아래와 같이 4.0의 사용을 요청하고 있다!
glutInitContextProfile
-인자가 "compatibility profile" : 이전 버전의 함수를 계속 사용하겠다
-인자가 "core profile" : 이전 버전의 함수를 사용x
glutInitDisplayMode
-display 표면의 주요 특징 결정. 윈도우 생성 이후엔 변경 불가!
ex) GLUT_RGBA : 트루컬러 모드, 기본값
glutCreateWindow
-window 생성
glutInitWindowSize, glutInitWindowPosition
-초기 window 설정! 크기 및 위치를 설정한다.
window size(x, y) | window position(width, height) | |
기본값 | -1, -1 | 300, 300 |
양수 only |
-window system은 이렇게 초기화한 값을 필수적으로 활용하지는 않는다. 그래서 glut program은 reshape callback을 활용해야함!
실제로 이 코드로 코드 수정 없이 여러번 실행해본 결과, window position이 자꾸 바뀌는 결과가 나왔다..!!!
느낌으로는 몇개의 후보가 있고 계속 번갈아가며 위치가 바뀌는 것 같다.
glutKeyboardFunc
- current window의 keyboard callback 설정
- 키보드에서 key press -> keyboard callback 발생
- <key, x, y를 인자로 갖는 함수>가 이 함수의 인자이다.
glutMouseFunc
- current window의 mouse callback 설정
- 마우스 press&release -> mouse callback 발생
- <button, state, x, y를 인자로 갖는 함수>가 이 함수의 인자이다.
button | GLUT_LEFT_BUTTON, GLUT_MIDDLE_BUTTON, GLUT_RIGHT_BUTTON |
state | GLUT_UP, GLUT_DOWN |
x, y | window relative coordinates |
glutPostRedisplay
- 화면의 내용을 다시 그려라
glBegin / glEnd
- glBegin 으로 그리기 시작함을 알리고, glEnd로 그리기가 끝났음을 알린다.
glBegin과 glEnd 사이에 있는 vertex 정보들을 이용하여 그림을 그리는 것이다.
- glVertex2f(0.0f, 0.0f); 이런식으로 정점들을 찍는데, 찍은 vertex들은 vertex buffer 라는 메모리 버퍼에 저장되고, VBO(Vertex Buffer Object) 단위로 관리된다.
cf) VBO(Vertex Buffer Object)
openGL의 객체 중 GL_ARRAY_BUFFER 타입의 버퍼 객체이다.
vertex들을 GPU 메모리 상에 저장하는 역할.
glFlush
- 버퍼에 쌓인 코드들을 실행시켜라.
- 지금까지 쌓아놓은 명령어를 모두 GPU에게 전달시키는 함수.
- color buffer 쌓은 배경색, vertex buffer 쌓은 정점 모두 glFlush로 실행되는 듯하다..!
glClearColor / glClear
- glClearColor 는 color buffer의 초기값을 설정하고, glClear는 color buffer를 설정된 초기값으로 초기화한다.
- 이때의 color는 윈도우의 배경색상이다.
glColor3f
- 이 뒤에 그리려는 그림(도형)의 색상을 설정한다.
'Graphics' 카테고리의 다른 글
[이론] Single Buffering / Double Buffering / VSync / Triple Buffering (0) | 2023.03.13 |
---|---|
* 일반적인 Rendering Pipeline 정리 (0) | 2023.03.13 |
[GLUT/openGL] glViewport 함수 (0) | 2023.03.08 |
[GLUT/openGL] 그래픽스 프로그램의 흐름 (0) | 2023.03.06 |
[GLUT] 윈도우 시스템과 윈도우 프로그래밍 (0) | 2023.03.05 |