Ⅰ. 3D 컴퓨터 그래픽스

1. 3D 기하 모델링 (3D Geometric Modeling)
가상의 3차원 세상에 존재하는 물체들을 어떻게 효과적으로 표현할 것인가?
- 개념: 3차원 물체를 수학적 데이터와 와이어프레임 형태로 만들어내는 과정
- 표현 기법: 폴리곤(Polygonal) 모델, 곡면(Curved surface) 모델, 볼륨(Volumetric) 모델, 절차적(Procedural) 모델 등 → 다양한 수학적 방식 사용
- 생성 방식:
- 3D 모델링 전문 소프트웨어를 사용하여 직접 형태를 만들기
- 실제 사물을 3D 스캐너로 스캔하여 데이터를 얻기
- 촬영된 여러 장의 사진을 바탕으로 3D 모델을 추출해내기
2. 3D 애니메이션 (3D Animation)
어떻게 하면 가상의 3차원 세상에서의 움직임을 자연스럽게 표현할 수 있을까?
- 키 프레이밍 (Key framing): 사용자가 주요 장명이나 뼈대의 끝점(e.g. 손끝, 발끝)의 위치를 지정하면, 컴퓨터가 그 사이의 움직임이나 관절의 각도를 수학적으로 계산하여 자연스럽게 이어주는 방식
- 모션 캡처 (Motion capture): 사람이나 동물의 실제 움직임을 센서나 카메라로 포착하여 3D 모델에 그대로 적용하는 기법
- 물리 기반 시뮬레이션 (Physically based simulation): 유체(물, 연기, 불)나 옷감 등의 움직임을 물리 법칙이나 편미분 방정식을 통해 계산하여 사실적인 애니메이션을 만들어내는 기법
3. 3D 랜더링 (3D Rendering)
어떻게 하면 마치 카메라로 촬영한 것과 같이 사실적인 이미지를 생성할 수 있을까?
- 랜더링의 의미: 모델링과 애니메이션을 통해 세팅이 완료된 가상의 3차원 장면으로부터, 우리가 화면을 통해 볼 수 있는 실제 2D 이미지나 영상을 생성해 내는 과정. 컴퓨터 내부의 보이지 않는 3D 수학 데이터들을 우리 눈에 보이는 픽셀 형태의 그림으로 변환해 주는 것.
1) Real-Time Rendering
- interactive(대화식) 그래픽스 응용 소프트웨어나 프로그램에 사용
- 화면 지연을 없애기 위해 예를 들면 1초에 30~120 프레임 이상을 매우 짧은 시간 안에 그려함
- 과거에는 시간제한 때문에 단순한 모델을 사용하여 사실성이 떨어졌으나, 최근에는 하드웨어 발전으로 인해 실시간으로도 매우 높은 사실성을 나타낼 수 있음
2) Photorealistic Rendering
- 계산량이 많지만 카메라로 실제 촬영한 것과 같은 수준의 사실적인 이미지를 생성
- 전통적으로 영화/광고의 특수 효과 생성 분야에서 널리 사용됨
3) Scientific Visualization
- 병렬 컴퓨팅(Parallel computing)을 이용하여 복잡한 유체 역학 데이터를 가시화
Ⅱ. VR + AR + MR → XR
1. Virtual Reality (VR, 가상 현실)
- 컴퓨터 기술을 사용하여 실제와 유사한 가상의 3D 환경으로 몰입할 수 있도록 해주는 기술
- 사용 기기: 주로 다면 투영 환경(VR cubes)이나 VR 헤드셋(VR headsets)을 사용

2. Augmented Reality (AR, 증강 현실)
- 실제 존재하는 3차원 세상에 컴퓨터 그래픽스 기술로 생성한 가상의 사물이나 정보를 마치 실제 세상에 존재하는 것처럼 보이게 하는 기술
- 현실 공간의 환경을 기반으로 기하학적인 위치와 방향을 계산하여 가상 객체를 배치함으로써 현실 세계의 시각적 정보를 증강(Enhance)시킴

3. Mixed Reality (MR, 혼합 현실)
- 가상의 세상에 존재하는 디지털 3D 물체와 현실 세계에 존재하는 실제 3D 물체를 혼합하여 새로운 환경을 창출함.
- 현실과 가상 현실의 하이브리드(Hybrid) 형태로, 물리적 객체와 디지털 객체가 같은 공간에 공존하며 실시간으로 상호작용
4. eXtented Reality (XR, 확장 현실)
- 컴퓨터 기술과 웨어러블 기기로 생성된 모든 '현실-가상 융합 환경'과 '인간-기계 상호작용'을 통칭하는 상위 개념
- VR, AR, MR을 모두 포괄하는 단어
Ⅲ. 실습 코드 실행
Visual Studio에서 새로운 프로젝트 실행
"솔루션 및 프로젝트를 같은 디렉터리에 배치(D)” 항목을 해제한 후 “만들기(C)” 선택
실습 코드 파일과 디렉터리 "Shaders'를 솔루션 디렉터리 아래의 프로젝트 디렉터리에 복사
.h 파일은 "헤더 파일"에 추가 / .cpp 파일은 "소스 파일"에 추가 / .vert나 .frag 같은 파일은 "리소스 파일"에 추가
솔루션 탐색기의 현재 프로젝트를 우클릭하여 "속성" 선택
- 구성(C)를 "모든 구성", 플랫폼(P)를 "x64"로 설정
- VC++ 디렉터리 -> 포함 디렉터리 , 라이브러리 수정
- 링커 -> 입력 -> 추가 종속성에 lib 파일 추가
- 디버깅 -> 환경에서 dll 경로 추가
- 프로그램 실행

현재 OpenGL version : 4.0.0 (가장 최근 버전은 4.6)
Ⅳ. OpenGL 함수
1) glutInitWindowSize()
생성될 원도우의 가로(width, height) 크기를 픽셀 단위로 지정
따라서 왼쪽의 윈도우가 더 크게 출력됨.
| glutInitWindowSize (12000.95, 8000.95); | glutInitWindowSize (4000.95, 4000.95); |
|---|---|
![]() |
![]() |
2) glutInitWindowPosition(x, y)
윈도우가 화면의 어느 위치에 나타날지 결정
좌표계: 컴퓨터 화면의 왼쪽 상단 구석이 (0, 0)임.
glutInitWindowPosition(0, 0);를 main 추가하여 출력시 (0, 0) 좌표에 윈도우가 출력



