3D 그래픽스2: 뷰포트, 저수준, 좌표
저수준은 뭐고 고수준은 뭡니까? 뭐가 고수준?
저수준 언어: 어셈블리어 (컴퓨터 쪽에 가까움)
-> 기계 쪽에 가깝다, 빠르다
-> OpenGL: 그래픽카드를 직접 건드린다.
고수준 언어: C++, Java… (사용자 쪽에 가까움)
-> XNA, Unreal Engine…
(사람이 생각하는 문제 중심)
Open GL로 짠 것은 그래픽카드를 건드린다.
DirectX도 역시 그래픽카드에 어떤 일을 시키기 위해 사용하는
API: Application Program Interface 애플리케이션 작성 인터페이스
Win32API: Win32(Windows System PC용 프로그래밍 환경)
OpenGL: 상태 기계
-> 상태를 기록해 놓으면 그게 유지됨
그림판을 생각해 보면 굵기 선택시 그 선의 굵기가 유지되죠. 굵기 변경하려면 상태를 변경해야겠죠.
-> 상태를 계속 유지하는 겁니다.
-> 상태 기계: 여러분의 그래픽카드
그래픽작업 속도 계산하려면?
-> 1만개의 요소를 나눠서 한다고 생각하면? 데이터를 잘 관리하면 상태 변경 작업이 개선되어 속도 개선
좌표는 유지하고 돌리는 것만 하면 됨. 원래의 좌표 하나만 쓰고 변환 행렬을 통해 곱해서 보여주기만 하면 됨. -> 이 과정이 변환 프로세스임.
모든 좌표는 변환 프로세스를 통해 계산.
모든 것은 2D로 … -> 투상 프로세서.
상태 테이블은 상태변수값을 설정하는 역할을 한다.
OpenGL 라이브러리는 Gl로 시작. Vertex가 뭡니까?
꼭지점 or 정점 : Vertex
점을 연결하는 선: Edge(간선)
점을 설정한 것일 뿐 보이지는 않는다. 점을 지정할 때. 삼각형은 3개의 점.
접미사가 의미가 있다는 것만 알면 됨. Float, double, integer, unsigned -> 외울 것도 아니죠? 이런건 OpenGL 레퍼런스를 보면 되죠?
V가 오면 …???
원소 3개짜리 배열이라는 걸 알 수 있음
GL 라이브러리는 오픈GL의 가장 핵심적인 라이브러리다. (Core)
U는 Utility: 유용한 라이브러리겠죠. 추가적인 라이브러리다. 카메라 조작 등을 다루게 됩니다.
GLUT는 OS를 Windows/MAC 가리지 않고 동작. 기본적으론 없지만 가져와서 설치하면 된다.
GL프로그램을 직접 짜서 살펴봅시다.
뷰포트 윈도우 설정: 넓이와 높이 설정…
뷰포트는 윈도우 내의 공간에서 잡히겠죠? 지금부터 그리기 코드는 이 안에만 그려지는 겁니다. 이게 뷰포트 개념이다.
OpenGL을 통해 명령을 주면 그래픽카드가 일을 하겠죠. 2차원 공간에 이미지가 나오죠. 그 생성된 이미지를 어디에 저장하느냐. 버퍼는 임시로 저장해 주는 공간이죠. 프레임 버퍼의 내용은 여러분 모니터에 저장되는것과 똑같은 겁니다. 일초에 30장을 보여주는 것을 만들면 프레임버퍼에 30장의 내용이 들어가겠죠.
버퍼에 기록하는 건 상대적으로 느리다. 버퍼 하나를 쓰면 막 그리겠죠. 또 새로그리면 시간이 많이 걸리겠죠. 2장의 버퍼를 씁니다. 하나를 송출할때(프론트버퍼) 뒤에서 그리고 있습니다(백버퍼) 다 그리고 나서 앞에 갖다 놓으면 송출이 되겠죠. 그게 이중버퍼가 되구요. (효율적) 이중버퍼를 써야만 애니메이션 된다는 겁니다.
이건 돌아가는 코드는 아니고 sudo code입니다. 이런식으로 짜면 안되고 함수를 만들어 놓아야 하는데…
카메라 포지션은 0,0,0 입니다. 1만큼 이동하면 전체의 오브젝트를 그만큼 이동했다고 보면 됨.
이게 기본적인 OpenGL 구조. 매우 중요한 개념. 이해 하려고 노력.
코딩은 하드코딩을 하면 안됨. 상수보다 변수를 사용.
'이론 수업 > 3D 그래픽스' 카테고리의 다른 글
3D그래픽스5: 종료 (1) | 2020.09.23 |
---|---|
3D 그래픽스4: 관측 (0) | 2020.09.23 |
3D 그래픽스3: 변환과 CTM의 이해 (0) | 2020.09.23 |
3D 그래픽스1: 무엇을 배우나 (0) | 2020.09.21 |