게임 프로그래밍 전문가 필기 2023년 2회 A형 개념 정리
게임프로그래밍 방법론
문제 1. 변수의 크기
문제 해설:
- int: 4byte → 약 ±21억까지 저장 가능
- short: 2byte → -32,768 ~ 32,767 저장 가능
- unsigned char: 1byte → 0 ~ 255만 표현 가능.
- unsigned char를 출력 시 255까지만 가능하기 때문에 3000 입력 시 오버플로우 발생 → 3000%4 값인 184가 나옴.
정답: ④
문제 2. 오버 로딩
문제 해설:
- func(int x) ← 정확히 하나의 int만 받음
- func(int x, int y=1) ← int 2개를 받는데, 두 번째는 디폴트값이 있어서 int 1개만 줘도 호출 가능
- 따라서 s.func(10) 호출 시 두 개 다 가능한 상황이 되어서 컴파일러에서 모호성 오류를 발생시킴.
정답: ①
문제 3. 포인터 변수의 정의
문제 해설:
포인터(pointer)란 다른 변수의 메모리 주소를 저장하는 변수입니다.
정답: ②
문제 4. 포인터 변수
문제 해설:
ptr은 x의 주소를 가리키는데
*ptr = 20 → x의 값을 20으로 변경
따라서 x와 *ptr 모두 20이 된다.
정답: ④
문제 5. 메모리 동적 할당
문제 해설:
- malloc(n * sizeof(int)): 5개 공간을 할당.
- 그런데 for (i=0; i <=n; i++)는 6번 반복. (i=0,1,2,3,4,5)
정답: ②
문제 6. 함수를 만들 때 지켜야 할 규칙
문제 해설:
- C언어 함수는 반드시 리턴타입을 지정해야 한다.
- 생략하면 컴파일러가 기본 int형으로 간주하는 구식 문법이 존재했지만, 현재는 오류나 경고 발생.
- 공백과 특수문자는 사용할 수 없음.
- C언어는 대/소문사를 구분한다 (섞어서 사용 가능.)
- 선언부는 나중에 정의해도 된다.
문제 7. 코드 실행 결과
문제 해설:
- CopyInt1(&Value2, &Value1);
- 포인터로 주소를 넘겼기 때문에 Value2 = Value1 = 11 된다.
- CopyInt2(Value3, Value1);
- 값을 복사했을 뿐, 실제 Value3 변수에 적용되지 않는다. (Call by Value)
정답: ③
문제 8. C++ 클래스 생성
문제 해설:
- ① 일반적으로 클래스 선언(class declaration)은. h 파일에, 클래스 정의(구현부)는. cpp 파일에 작성한다.
- 좋은 코드 관리 관례이자 컴파일 속도 최적화에도 좋다.
- ② struct도 C++에서는 함수 가질 수 있음 (C랑 다름)
- ③ 생성자, 소멸자 모두 생략 가능 (필요시 자동 생성됨)
- ④ 소멸자 역시 생략 가능 (디폴트 소멸자가 생성됨)
정답: ①
문제 9. 코드 결과물
문제 해설:
- 기본 생성자 호출 → 기본값 50/Wood
- 인자 2개 생성자 호출 → 넘긴 값(60/Metal) 적용
정답: ④
문제 10. 컴파일 에러 발생 부분
문제 해설:
myYear는 접근제한자가 선언하지 않아 기본인 private로 설정되어 있는데
private 멤버는 외부(main 함수 등)에서 직접 접근할 수 없음.
따라서 ㄹ,ㅅ 에서 오류가 발생.
정답: ④
문제 11. 빈칸에 알맞는 내용
문제 해설:
- JSON(JavaScript Object Notation)
- 가볍고 텍스트 기반의 데이터 교환 형식.
- 이름-값 쌍 구조 ({ "key" : "value" }).
- 여러 언어(C++, C#, Python 등)에서 사용.
- ① XML: <key>value</key> 형태, 괄호형 구조라 문제 지문과 다름.
- ② YAML: JSON보다 더 가벼운 형식이지만 {} 형태는 아님 (들여 쓰기 기반).
- ④ INI: key=value 형태로 섹션별 구성됨.
정답: ③
문제 12. 프로그래밍 언어
문제 해설:
- ① JavaScript: 웹용 언어, MS 개발 아님.
- ② C#은 마이크로소프트(MS)가 개발.
- Unity 엔진 스크립트 언어로도 널리 사용.
- 문법이 Java와 매우 유사.
- 크로스 플랫폼 (.NET Core 이후 지원 확대).
- C++ 보다 배우기 쉬움.
- ③ Python: 쉽지만, MS 개발 아님.
- ④ Visual Basic: MS 개발했지만 게임엔진 스크립트로 사용되지 않음.
정답: ②
문제 13. 프로그래밍 설명
문제 해설:
- 64비트 환경에서도 int는 여전히 4바이트.
- 포인터(pointer)는 64비트 환경에서는 8바이트가 맞음.
- 기본적으로 64비트 OS에서는 4GB 메모리 제한을 넘을 수 있음.
- 64비트 Windows에서 32비트 프로그램을 실행할 수 있도록 WOW64(Windows on Windows) 환경 제공.
정답: ①
문제 14. 메모리 영역
문제 해설:
- ① 지역변수는 스택에 저장.
- ② malloc/free는 힙 사용.
- ③ 텍스트는 실행코드 저장하는 영역.
- ④ BSS(Block Started Symbol): 초기화되지 않은 전역 변수(static, global)를 저장하는 메모리 공간.
정답: ④
문제 15. Handle 설명
문제 해설:
- 핸들을 닫을 때 사용하는 함수는 CloseHandle()이다.
- ExitHandle()이라는 함수는 존재하지 않는다.
- HANDLE - 핸들 자료형
- CreateFile(), CreateThread() - 핸들 반환 함수
- CloseHandle() - 핸들을 닫는 함수, 핸들을 닫는다라는 의미는 커널 객체 연결을 끊는다는 의미
정답: ③
문제 16. 스케쥴링 기법
문제 해설:
- FCFS (First Come First Served)
- "들어온 순서" 그대로 처리.
- 가장 기본적인 디스크 스케줄링 방식.
- SSTF: 가장 가까운 요청부터 처리 (seek time 최단).
- SCAN: 디스크 헤드가 끝까지 갔다가 반대 방향으로 이동.
- SLTF: 실린더 내에서 회전 지연시간이 가장 짧은 요청을 먼저 처리하는 방식.
정답: ①
문제 17. 메모리 단편화
문제 해설:
- 외부 단편화(External Fragmentation)
- 메모리 "전체 여유는 많지만" 필요한 만큼 연속된 공간이 없는 상태.
- 조각나서 효율적으로 쓰지 못하는 문제.
- 반대 개념:
- 내부 단편화: 메모리 할당했지만 남는 공간이 생기는 것 (할당된 블록 내부).
정답: ②
문제 18. 프로토콜
문제 해설:
- HTTP(HyperText Transfer Protocol)
- 웹 페이지, 이미지 등 다양한 리소스를 주고받기 위한 프로토콜.
- 모바일 게임, 수집형 RPG 등에서 서버 통신에 사용.
- TCP: 신뢰성 있는 데이터 전송 프로토콜.
- UDP: 빠른 데이터 전송 (신뢰성 없음).
- ICMP: 네트워크 오류 메시지요 프로토콜 (예: 핑).
정답: ②
문제 19. 소켓 함수
문제 해설:
listen 함수
- 서버 소켓을 "수신 대기" 상태로 만듦.
- 클라이언트가 연결 요청할 때 기다릴 수 있게 한다.
connect: 클라이언트가 서버에 연결 요청.
accept: 연결 요청을 받아서 새 소켓을 반환.
bind: 소켓에 주소(포트)를 할당.
정답: ①
문제 20. 데이터 베이스
문제 해설:
SQL 표준에는 NOT ZERO, NOT EMPTY 같은 제약조건은 없음.
PRIMARY KEY는 고유 식별자에 사용하는 것이고
NOT NULL은 NULL 불가, 값 필수.
정답: ④
문제 21. 메모리 저장 방식
문제 해설:
리틀 엔디안(little-endian):
- "가장 작은 바이트가 가장 앞에 저장"된다.
- 메모리에 저장된 순서대로 읽으면 역순으로 구성해야 한다.
정답: ④
문제 22. C++ 헤더 파일 설명
문제 해설:
- 헤더파일(header file):
- 클래스, 함수 선언을 모아놓은 파일.
- . h 확장자를 주로 쓰지만, 무조건. h여야 할 필요는 없음.
- 예:. hpp (C++ 표준)
- Unity에서는. cs를 쓰기도 함.
- ① 선언부 모아두는 게 맞음.
- ② include 순서가 중요할 수 있음 (특히 의존성 많을 때).
- ④ 필요한 것만 include 하는 게 컴파일 최적화에 좋음.
정답: ③
문제 23. 2진수 표현
문제 해설:
- 1바이트(8비트) 이진수로 표현할 때,
- 음수는 2의 보수법을 사용한다.
- 7의 이진수 → 00000111
- 1의 보수 (비트 반전) → 11111000
- +1 해서 2의 보수 → 11111001
정답: ④
문제 24. 출력되는 값
문제 해설:
arr [3][3]은 각각 행, 렬
0행의 1열은 2,
1행의 1열은 5,
2행의 0열은 7
따라서 257.
정답: ①
문제 25. 오버라이딩
문제 해설:
- B b;
- B 객체 생성
- A* p = &b;
- 부모 타입 포인터(A*)로 B 객체를 가리킴.
- p->Set("_");
- Set은 virtual이 아니다.
- → Set은 포인터 타입(A)의 버전으로 호출된다.
- 즉, A::Set("_") 이 호출된다.
- Set은 virtual이 아니다.
- 그럼 val의 값은?
- val = "A" + "_" = "A_"
- p->Get();
- Get은 virtual이다.
- → 실제 객체인 B의 Get() 호출.
- B::Get()의 로직은:
-
cpp복사편집return val + "B";
- 현재 val은 "A_"이므로
- 결과 = "A_" + "B" = "A_B"
정답: ②
게임 알고리즘과 설계
문제 1. 추측 항법(Dead reckoning)
문제 해설:
- Dead Reckoning
- 서버가 매 순간 좌표를 보내지 않고, "변화가 생겼을 때만" 좌표를 보냄.
- 클라이언트는 마지막 수신 정보를 바탕으로 예측하여 보간.
- 결과적으로 서버의 전송량이 크게 줄어든다.
- ② 클라이언트도 예측 계산을 해야 해서 전송량 감소보다는 예측 처리량이 늘어남.
- ③④ 메모리 사용량은 큰 변화 없음. 주요 효과는 네트워크 데이터 전송량 감소.
정답: ①
문제 2. 자료구조
문제 해설:
덱(Deque, Double Ended Queue)
- 양쪽(앞, 뒤)에서 삽입/삭제가 가능한 선형 자료구조.
스택 - 한쪽 끝에서 삽입과 삭제가 일어남
트리, 그래프: 비선형 자료구조임
정답: ②
문제 3. 탐색 방법
문제 해설:
- 보간 탐색(Interpolation Search)
- "균등하게 분포된 데이터"일 때, 원하는 값의 예상 위치를 비례 계산으로 추정하여 탐색.
- 이진 탐색은 단순히 중앙값(mid)을 기준으로 나눔.
- ① 이진 탐색은 단순 절반 나누기 (mid = (low+high)/2)
- ② 선형 탐색은 처음부터 끝까지 순차적으로 찾음.
- ④ 피보나치 탐색은 피보나치수열을 이용한 이진 탐색 응용.
정답: ③
문제 4. 그래프 최단 경로
문제 해설:
가중치의 합이 가장 작은 경로를 찾으면 됨.
정답: ①
문제 5. 해시 충돌 해결 방식
문제 해설:
- 이중 해싱(Double Hashing)
- 첫 번째 해시 함수로 기본 주소를 찾고,
- 두 번째 해시 함수를 사용해 충돌 발생 시 오프셋을 조정.
- 매우 강력한 충돌 해결 기법이다.
- 제곱 탐사 - i^2만큼 이동
- 선형 탐사 - +1만큼 이동
- 체이닝 - 연결 리스트로 같은 해시 버킷에 여러 값 저장
정답: ②
문제 6. 정렬 알고리즘
문제 해설:
- 삽입 정렬(Insertion Sort)
- 앞에서부터 하나씩 보면서, 그 자리 앞의 원소들과 비교하여 알맞은 자리에 삽입.
- 정렬 과정이 하나하나 추가되는 형태로 보임.
- 특징:
- 데이터가 거의 정렬된 경우 빠름.
- 매번 정렬된 부분을 유지.
- ① 선택 정렬은 가장 작은 값을 선택해서 앞으로 보냄 (전체 스캔 필요).
- ② 퀵 정렬은 피벗을 중심으로 큰 그룹, 작은 그룹 나눔 (나누는 과정이 보이지 않으면 퀵정렬 아님).
- ④ 버블 정렬은 옆에 있는 요소끼리 계속 비교하면서 swap.
정답: ③
문제 7. 디자인 패턴
문제 해설:
- 스테이트 패턴(State Pattern)
- 객체가 상태에 따라 행동을 바꾸도록 만드는 패턴.
- 복잡한 상태 변화를 코드로 깔끔하게 관리할 수 있음.
- 예: 몬스터 AI의 idle → chase → attack 전이.
- ① 비지터 패턴: 데이터 구조와 연산을 분리하는 패턴.
- ② 싱글톤 패턴: 인스턴스를 하나만 만드는 패턴.
- ③ 옵서버 패턴: 이벤트 발생 시 구독자에게 통지하는 패턴.
정답: ④
문제 8. 인접행렬
문제 해설:
인접 행렬에 1이 있으면 정점을 가리키면 된다.
정답: ①
문제 9. 크루스칼 알고리즘
문제 해설:
크루스칼 알고리즘(Kruskal Algorithm)
- 최소 비용 간선부터 차례로 선택.
- 사이클이 생기지 않도록 이어 붙임.
가장 작은 가중치를 가진 3개의 간선을 더하면 됨. 1+3+4
정답: ②
문제 10. 배열
문제 해설:
- 배열(array)은
- 같은 타입(동일 자료형)의 여러 개 데이터를 연속적으로 저장하는 공간.
- 서로 다른 자료형(int, float, char 등)을 같은 배열로는 만들 수 없다.
- ③ "다양한 자료형"은 구조체(struct)나 클래스(class)에서 가능, 배열은 아님.
정답: ③
문제 11. 단위 벡터
문제 해설:
단위 벡터란 벡터 v가 주어졌을 때 이 벡터와 방향이 같고 길이가 1인 벡터를 구하는 것.
먼저 벡터의 크기를 구하면 (-3)^2 + 4^2 여서 √25가 되고
여기에 대입하면 (-3/√25, 4/√25)
정답: ③
문제 12. 탐색 알고리즘
문제 해설:
- 크루스칼(Kruskal)은 "최소 신장 트리(MST)"를 구하는 알고리즘이다.
- "탐색 대상 반으로 나누기"는 이진 탐색(binary search)의 특징.
정답: ④
문제 13. 병합 정렬 과정
문제 해설:
병합 정렬(Merge Sort):
- 분할(divide) → 정렬(sort) → 병합(merge) 방식.
정답: ④
문제 14. 이진 탐색 트리
문제 해설:
이진탐색트리의 특징은 노드의 왼쪽 자식은 나보다 작고 오른쪽 자식은 나보다 크다.
이를 지키면서 그림처럼 만들어가면
이런 모양이 나오게 된다. 7은 A-B-E를 거치면 됨.
정답: ③
문제 15. 유한 상태 머신
문제 해설:
유한 상태 기계에서 전이가 불가능할 때는 해당 방향의 전이가 이어져있지 않을 때.
정답: ②
문제 16. 문자열 검색 알고리즘
문제 해설:
KMP 알고리즘 (Knuth-Morris-Pratt):
- 문자열 내에서 패턴과 일치하는 접두사/접미사 정보를 이용해
- 필요 없는 부분은 건너뛰면서 빠르게 검색하는 알고리즘.
- 이동 경로 테이블(= 실패 함수, Prefix table)을 미리 만든다.
Brute-Force 알고리즘: 하나하나 비교하는 방법.
Boyer-Moore 알고리즘: 뒤쪽부터 비교, 불일치 시 크게 점프.
Rabin-Karp 알고리즘: 문자열을 해시 값으로 비교하는 방식.
정답: ①
문제 17. 성능 순서
문제 해설:
상수 → 로그 → 선형 → 로그선형 → 제곱 → 지수 → 팩토리얼 순서대로 느려진다.
- 성능(시간 복잡도)이 작은 것 → 큰 것 순서로 정렬한다.
- 성장 속도 비교:
- O(1) < log n < n < n log n < n² < n³ < 2ⁿ < n!
정답: ①
문제 18. 우선순위 탐색
문제 해설:
최소비용 신장트리(MST):
- 모든 노드를 연결하는데 최소 비용만 사용.
- 사이클이 생기면 안 된다.
정답: ③
문제 19. A* 알고리즘
문제 해설:
A* 알고리즘:
- 시작점부터 목표점까지 최적의 경로를 찾는다.
- 휴리스틱(Heuristic) + 실제 거리 = 평가 함수로 탐색.
- 무작위(Random)가 아니라 "가장 좋은 후보"를 선택하면서 진행한다.→ 경로 탐색의 안정성은 오히려 높다.
정답: ④
문제 20. 최단 경로 알고리즘
문제 해설:
플로이드 - 와샬 알고리즘은 모든 정점 쌍의 최단 경로를 구할 때 사용함.
정답: ③
문제 21. 알고리즘 설명
문제 해설:
- 동적 프로그래밍(Dynamic Programming, DP):
- 큰 문제를 작은 하위 문제(subproblem)로 나누고,
- 하위 문제의 결과를 저장해서 중복 계산을 방지한다.
- 메모이제이션을 사용.
- ① 분할 알고리즘은 단순히 쪼개는 것 (Divide and Conquer).
- ② 탐욕 알고리즘은 그 순간 가장 좋아 보이는 선택만 함.
- ④ 휴리스틱 알고리즘은 근사 해법을 찾는 방법.
정답: ③
문제 22. 재귀 함수 필요성
문제 해설:
- 배열 순회는 단순 반복문으로 처리 가능.
- 재귀는 트리 탐색이나 수열 계산처럼 중첩 구조일 때 쓰는 게 맞다
① 트리 전위 순회 - 재귀 사용이 매우 흔함.
② 팩토리얼 - 재귀로 간단히 표현함.
③ 피보나치 - 재귀 가능(성능은 반복이 낫다)
정답: ④
문제 23. AVL 트리
문제 해설:
- AVL 트리는 높이 균형 트리일 뿐
항상 완전 이진트리(Full Binary Tree)는 아니다. - 균형 조건은 "왼쪽과 오른쪽 서브트리 높이 차가 1 이하"만 만족.
정답: ②
문제 24. 그래프 절점
문제 해설:
- 절점(Cut Vertex): 해당 정점을 제거하면
그래프가 연결되지 않거나 컴포넌트 수가 증가하는 정점. - 절점은 보통 중간 허브 역할을 한다.
정답: ④
문제 25. 이진탐색
문제 해설:
이진 탐색은 항상 중간값을 잘 계산해야 하고,
l + (r-l)/2 방식을 쓰면 오버플로우를 방지할 수 있다.
정답: ②
게임 콘텐츠 프로그래밍
문제 1. 충돌 처리
문제 해설:
AABB (Axis Aligned Bounding Box):
- x, y, z 축에 딱 맞게 정렬된 직육면체 형태의 경계 박스.
- 오브젝트가 회전하지 않고 정렬된 상태로 충돌 처리를 간단하게 한다.
- 충돌 검사 속도가 빠르고 계산량이 적다.
Bounding Sphere와 Cylinder는 각각 구형 범위와 원기둥 형태.
정답: ①
문제 2. 변환행렬
문제 해설:
일반적으로 정점 변환은 단순히 M을 곱하지만,
법선 벡터는
M의 역행렬의 전치행렬을 사용해야 변환 결과가 올바르다.
이유: 일반적인 변환행렬(M)은 스케일, 회전등을 포함해서 왜곡이 일어나기 때문에
법 선은 이를 보정하는
로 변환되어야 함.
정답: ④
문제 3. 후처리 기법
문제 해설:
Blur(블러):
- 이미지나 화면을 흐리게 만드는 효과.
- 주로 포스트 프로세싱 단계에서,
- 모션 블러,
- 배경 흐림,
- Depth of Field 효과 등을 구현할 때 사용.
Contrast: 명암 조정
Ray Tracing: 광선 추적 렌더링
Tone Mapping: 고정밀 이미지를 화면 밝기로 변환.
정답: ③
문제 4. 반사광에서 밝기 값 구하는 공식
문제 해설:
반사광은 반사 벡터와 시선 벡터의 내적을 이용하여 계산.
Specular Highlight(반사광) 계산은:
- 광원 벡터 L과 법선 벡터 N을 이용해 반사 벡터 R을 만들고,
- 시선 벡터 V와의 내적을 통해 빛나는 정도를 구한다
정답: ③
문제 5. PBR
문제 해설:
Microfacet(마이크로페이싯):
- 표면을 미세한 평면(facet)들의 집합으로 가정하는 모델.
- 실제 표면은 완전히 매끄럽지 않고, 미세한 면들로 구성되어 있다.
- 거칠기(roughness)에 따라 반사 방향이 달라진다.
plane: 평면.
sphere:구체.
cube:정육면체.
정답: ①
문제 6. 텍스처
문제 해설:
- Light Map:
- 미리 광원 효과를 계산해서 텍스처에 저장하는 방식.
- 런타임에 계산을 줄이고 빠른 조명을 표현할 수 있다.
- 특징:
- 주로 배경(Scene)이나 움직이지 않는 오브젝트에 사용.
- 실시간 조명 비용을 줄이는데 유리.
- normal Map:표면의 요철을 표현.
- Diffuse Map:물체 표면의 기본색상.
- Mask Map: 여러 속성(메탈, 러프니스)등을 저장.
정답: ③
문제 7. 텍스처
문제 해설:
Normal Mapping:
- 정점(Vertex) 정보가 아니라,
- 텍스처에 법선 벡터를 저장해서
- 평평한 폴리곤도 굴곡이 있는 것처럼 보이게 만든다.
Lambert Lighting: 디퓨즈 조명 밝기 모델.
Ambient Occlusion: 음영표현, 빛이 닿기 어려운 부분을 더 어둡게.
Glow Mapping: 빛나는 효과 표현.
정답: ②
문제 8. 광원 종류
문제 해설:
- Directional Light (방향광):
- 빛이 평행하게 쏘인다.
- 거리와 상관없이 광선은 무한히 길다 (태양광처럼).
- Point Light (점광원):
- 하나의 점에서 모든 방향으로 빛이 퍼진다.
정답: ③
문제 9. 컬링 기법
문제 해설:
- Frustum Culling:
- 카메라의 시야(FOV) 영역(Frustum) 안에 있는 것만 렌더링 하고,
- 영역 밖에 있는 오브젝트는 렌더링 하지 않는다.
- 효율적으로 드로우 콜을 줄이고 퍼포먼스를 높인다.
Frustum Culling | 시야 밖 오브젝트 제거 |
Back Face Culling | 카메라 반대편 면 제거 |
Quad Tree Culling | 2D 공간분할을 통한 컬링 |
Render Culling | (정식 용어 아님) |
정답: ①
문제 10. 텍스처
문제 해설:
- Cube Map Texture:
- 6장의 텍스처를 각각 앞, 뒤, 왼쪽, 오른쪽, 위, 아래에 맵핑.
- 주로 반사, 굴절, 환경맵핑(Environment Mapping)에 사용.
Diffuse Texture | 기본 색상 텍스처 |
Occlusion Texture | 음영 효과 텍스처 |
Cube Map Texture | 6면에 텍스처, 반사/굴절 표현 |
Volume Texture | 3D 텍스처, 내부 볼륨 표현 |
정답: ③
문제 11. 벡터
문제 해설:
- 벡터(Vector)는 방향성과 크기를 가진 양을 나타낸다.
- 벡터로 표현하는 것:
- 변위(이동 거리 및 방향)
- 속도(이동 방향과 속도)
- 힘(힘의 크기와 방향)
- 회전(Rotation)은 방향이나 각도 값으로 표현되며, 일반적으로 쿼터니언(Quaternion)이나 행렬(Matrix)로 다루지, 벡터 그 자체로는 표현하지 않는다.
정답: ③
문제 12. 벡터 계산
문제 해설:
- 내적(Dot Product):
- 두 벡터 사이의 각도를 구하는 데 사용.
- 입사광(Light Vector)과 법선 벡터(Normal Vector) 사이의 내적을 계산해서 밝기를 결정한다.
- 내적 결과가 크면 밝고, 작으면 어둡다.
내적 | 각도 계산, 광원 입사각 표현 |
외적 | 수직 벡터(법선 벡터) 구함 |
벡터 차/합 | 위치나 방향 계산 |
정답: ①
문제 13.
- Vertex(정점):
- 3D 공간상의 하나의 점(x, y, z 좌표).
- 텍스처 좌표(UV), 색상, 법선 벡터 등을 포함할 수 있다.
Vertex | 3D 점. x, y, z 좌표 등 저장 |
Line | 두 Vertex를 연결한 선 |
Convex | 볼록한 형태 |
Concave | 오목한 형태 |
정답: ②
문제 14. Rasterizer 래스터라이저
문제 해설:
- Rasterizer의 주 역할:
- 3D 정점을 2D로 변환 (Projection)
- 2D 뷰포트로 매핑
- Z-Buffer로 깊이 정보 계산
- Post Processing(후처리)은 렌더링 이후에 별도로 수행하는 작업이다 (Bloom, Blur 등).
Rasterizer | 3D→2D 변환, 깊이 계산 |
Post Processing | 렌더링 이후 필터나 이펙트 처리 |
정답: ④
문제 15.
문제 해설:
- DLSS (Deep Learning Super Sampling):
- 낮은 해상도로 렌더링 한 이미지를
- 딥러닝을 통해 고해상도처럼 보이게 업스케일링하는 기술.
- NVIDIA RTX 그래픽 카드에서 지원.
- 프레임 수 증가와 그래픽 품질 개선 효과.
Tone Mapping | 밝기 조절 |
DLSS | 딥러닝 기반 업스케일링 |
Ray Casting | 광선 기반 렌더링 |
SSAO | 주변광 차폐 효과 |
정답: ②
문제 16.3D 렌더링 파이프라인
문제 해설:
- 3D 렌더링에서는 반드시 Z-버퍼(깊이 버퍼)를 사용하여 z값을 비교하고,
- 가까운 오브젝트만 화면에 보이게 하고,
- 먼 오브젝트는 가려지게 한다.
- Z버퍼 비교 없이 렌더링 하면 깊이 충돌 문제(z-fighting)가 발생한다.
지역/세계 변환 분리 | 효율 향상 |
FOV 감소 | 확대 효과 |
원근 투영 | 거리 감 표현 |
Z버퍼 | 깊이 비교 필수 |
정답: ④
문제 17. 뷰포트 처리
문제 해설:
- Clipping(절단):
- 뷰포트(Viewport) 밖에 있는 삼각형을 잘라낸다.
- 삼각형이 부분적으로만 보이면 잘려서 렌더링 된다.
Culling | 안 보이는 전체 오브젝트 제거 |
Space Partitioning | 공간을 분할하여 최적화 |
Clipping | 일부 보이는 삼각형 절단 |
Back-face Culling | 뒤를 향한 면 제거 |
정답: ③
문제 18.
문제 해설:
① 지역변환 (Local Transform) | 오브젝트 자신의 로컬 좌표계 기준 변환 | 오브젝트 중심 기준 회전/이동 |
② 세계변환 (World Transform) | 로컬 → 세계 좌표계 변환 | 위치/회전/스케일 적용 |
③ 투영변환 (Projection Transform) | 3D 공간 → 2D 시점으로 바꾸는 단계 | 원근(Perspective), 직교(Orthographic) |
④ 뷰변환 (View Transform) | 세계 좌표 → 카메라 기준 좌표 | 카메라 위치/방향 반영 |
정답: ③
문제 19. 보간 함수
문제 해설:
- Lerp(Linear Interpolation) 공식:
- 알파 혼합에서
- Alpha=0 → 결과는 A
- Alpha=1 → 결과는 B
A * (1-Alpha) + B * Alpha | 선형 보간 공식 (정답) |
나머지 | 의미 틀림 |
정답: ①
문제 20. 물리 기반 렌더링
- PBR(Physically Based Rendering)은
- 재질(Material) 표현을 현실적으로 만드는 기술이다.
- 주요 속성은 Roughness(거칠기), Metallic(금속성), Reflectance(반사율) 등이다.
- 계단현상(Aliasing)과 필터링은 렌더링 품질 개선(안티에일리어싱)과 관련 있고, PBR 자체 속성은 아니다.
정답: ④
문제 21. 렌더링
문제 해설:
- VR Stereo Rendering(입체 렌더링):
- 왼쪽 눈과 오른쪽 눈에 각각 다른 시점의 이미지를 보여줘서 입체감을 느끼게 한다.
- 인간의 양쪽 눈 사이 간격을 고려해 두 이미지를 렌더링 한다.
PBR | 물리 기반 렌더링 |
VR Stereo | 양안 시차로 입체감 부여 |
AR | 현실에 가상 오브젝트 추가 |
Depth Rendering | 깊이 기반 렌더링 (Z-buffer) |
정답: ②
문제 22. 정점 셰이더
문제 해설:
- 정점 셰이더(Vertex Shader)는 주로:
- 정점 변환 (모델→월드→뷰→프로젝션 변환)
- 정점 관련 조명 계산 (디퓨즈, 스페큘러 조명 준비)
- 스키닝(본 애니메이션)
- 여러 이미지 버퍼를 합성하는 작업(ex. 디퓨즈 + 스페큘러)은 픽셀 셰이더(프래그먼트 셰이더)에서 한다.
Vertex Shader | 정점 변환, 조명 준비, 스키닝 |
Pixel Shader | 최종 색상 계산, 합성 작업 |
정답: ③
문제 23. 전면 폴리곤
문제 해설:
- 오른손 좌표계에서는 시계 반대 방향(counter-clockwise)으로 정점을 연결해야 전면(Face)으로 인식된다.
- 순서대로:
- 첫 삼각형: v1 → v2 → v0
- 둘째 삼각형: v0 → v2 → v3
오른손 좌표계 | 반시계 방향이 전면 |
왼손 좌표계 | 시계 방향이 전면 |
정답: ①
문제 24. 단위원 좌표
문제 해설:
반지름 1인 원에서 각도 θ를 기준으로 좌표를 구하는 공식이다.
정답: ①
문제 25. 확대한 이미지
문제 해설:
- Render To Texture:
- 현재 화면(Scene)을 다른 텍스처로 렌더링해서,
- 해당 텍스처를 확대하거나 가공해서 다시 화면에 그리는 기법.
- 망원경이나 CCTV 화면 효과를 구현할 때 매우 많이 사용한다.
Linear Filtering | 부드러운 텍스처 보간 |
Normal Map | 굴곡 효과 |
Mip Map | 거리 기반 저해상도 텍스처 |
Render To Texture | 화면을 텍스처로 렌더링 후 재사용 |
정답: ④