그래픽스/opengl

[learn-OpenGL] Introduction : OpenGL

느스그 2021. 7. 22. 02:30

LearnOpenGL - Introduction

 

LearnOpenGL - OpenGL

1. OpenGL 

OpenGL은 API로 간주되나, 단지 스펙임 (Khronos Group 에서 개발하고 유지관리하는)

-  스펙은 각 함수가 어떤 output/result 를 내야하는지 명시됨 (어떻게 동작해야하는지)

-  그렇기 때문에 다양한 구현체가 있음

- 실제 개발하는 사람들은 그래픽 카드 제조사임

- OpenGL이 이상하게 돌아간다하면 그래픽 제조사의 문제일 가능성이 큼, 드라이버 업데이트 자주해야함

 

 

immediate mode (fixed function pipeline)

- 예전에 쓰였던 방식

- 대부분 기능이 내부에 숨겨져있음, 내부에서 작동확인 어려움

- 그대신 사용하기 쉽고 이해하기 쉬움

- 그러나 비효율적 

- OpenGL 3.2 이후 core-profile mode

 

core-profile mode

- 최신 기술(modern practices)을 사용하도록 유도 (deprecated functions 사용시 정지)

- 따라서 배우기 어려움.

- 하지만 매우 유연하고 효율적

- 내부에서의 동작을 확인하기 쉬워짐

 

OpenGL 3.3버전 을 배우는 이유 :

    이후버전은 기능이 추가되거나 함수가 더 효율적으로 바뀐것. 핵심 메커니즘은 동일함

2. Extensions

- 그래픽 카드 회사에서 렌더링을 위해 새로운 기술을 개발하거나 최적화 작업을 한것을

  사용가능하거나 안하게 할 수 있음.

    (하드웨어에 맞게 주어진 기능을 활성화하는 Functional Mode 이야기인거 같음)

 

3. State Machine

OpenGL은 커다란 상태 머신

(상태변수 설정하는 역할, 하드웨어가 불가능함)

 

상태 변수 == context

 

상태, 옵션을 설정하고 버퍼를 조작한다음

current context(현 상태)를 변경해야함

(상태 = 점의 크기, 색, 길이 등등)

(현상태는 변경하기전 까지 계속 유지)

 

 

4. Objects

core 는 C 라이브러리,

추상화를 고려하여 개발된 OpenGL

 

추상화중 하나인

 

객체는 상태를 나타내는 옵션들의 모음

 

 

1) 객체를 생성하고, 레퍼런스를 id 로 저장 (실제 데이터는 scenes 뒤에 저장)

2) 객체를 id를 이용하여, context의 대상 위치에 바인딩

3) 옵션을 설정

4) 바인딩 해제 -> id가 참조하는객체에 옵션은 저장됨, context의 대상 위치는 복원됨-- objectid를 바인딩하면..)

 

=> 여러 객체를 정의하고 옵션을 설정할 수 있음, 특정 모델을 그리려 할때마다 해당 옵션을 다시 설정하지 않아도

     저장된 옵션이 설정됨, 해당 객체를 바인딩만 하면됨.