본문 바로가기

Graphics

[GLUT/openGL] 기초 용어, 함수 정리

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의 사용을 요청하고 있다! 

opengl 4.0 version

 

 

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

    - 이 뒤에 그리려는 그림(도형)의 색상을 설정한다.

display 전체 코드