게임 프로그래밍 자격증을 따려고 찾아봤는데 자료가 없어 그냥 기출문제로만 공부해야 한다고 해서
기출문제들을 풀어보며 개념을 정리해보려고 한다.
게임 프로그래밍 방법론
문제 1. 연산자 우선순위와 전위/후위 연산자
해설: 전위 연산자와 후위 연산자와 대입 연산자에 관한 문제이다.
순서대로 진행하면 처음 x,y,z에 각각 1,2,3으로 초기화,
• ++y 는 전위 증가 연산자로서, 연산이 이루어진 후 값이 사용됨 → y는 2에서 3이 되고, 값 3이 사용됨.
• z++ 는 후위 증가 연산자로서, 값이 먼저 사용되고 그 후 증가 → z는 3이 사용되고, 그 후 z = 4
x += 3*3 = 9
x = 1+9 = 10
최종적으로 x = 10, y = 3, z = 4 . 10+3+4 = 17
정답: ④ 17
문제 2. 메모리 단편화 개념
문제 해설:
• 외부 단편화(External Fragmentation): 메모리 전체는 충분하지만, 연속된 큰 공간이 부족한 현상
• 내부 단편화(Internal Fragmentation): 메모리를 할당했는데, 실제 필요한 것보다 큰 공간이 주어져서 낭비되는 현상
설명은 외부 단편화의 대표적인 설명이다.
• 메모리 손상: 잘못된 포인터 연산 등으로 메모리 내용이 오염
• 메모리 누수: 해제를 하지 않아 메모리를 계속 차지하는 현상
• 메모리 덤프: 디버깅을 위해 메모리 내용을 파일로 저장
정답: ② 메모리 단편화(Memory Fragmentation)
문제 3. 객체 기반 스크립트 언어
문제 해설:
변수의 타입이 실행 도중 바뀔 수 있는 동적 타입
함수를 변수처럼 전달할 수 있는 일급 객체
브라우저뿐만 아니라 Node.js로 백엔드 개발 가능
이 모든 조건을 만족하는 언어는 JavaScript
정답: ③ JavaScript
문제 4. 가변인자 함수
문제 해설:
함수에서 가변 인자 va_arg 를 통해 숫자를 더하고 있음
C 언어에서 stdarg.h 를 이용해 가변 인자 함수를 만들 수 있다.
핵심은 va_start , va_arg , va_end를 사용하는 것이다.
여기서 func(2, 2, 2, 2) 에서 주목할 점은 첫 번째 인자인 2가 count 로 사용된다는 것 이다.
for문을 count(2)만큼 순회 => func의 2번째 인자부터 sum에 들어감.
따라서 2번을 순회하면 sum에 2,3번 인자가 더해졌고 2+2 = 4를 반환.
정답: ② 4
문제 5. C++ 문법 오류
문제 해설:
이 문제의 핵심은 C++의 참조자(Reference)와 임시 객체(RValue) 간의 관계다.
MyClass(100) 은 임시 객체 → RValue
MyClass& r는 LValue 참조자로, 일반적으로 임시 객체를 받을 수 없음
임시 객체를 참조하려면 const MyClass& 또는 MyClass&& 로 받아야 함.
→ MyClass& r = MyClass(100); 는 문법적으로 오류
정답: ② 20행
문제 6. TCP 클라이언트 소켓 함수
문제 해설:
• listen() 은 클라이언트 접속 대기
• bind()는 서버에서 포트를 고정할 때
• accept()는 클라이언트 접속을 받아들일 때
→ connect()는 클라이언트가 서버에 접속 시도할 때 사용하는 함수
정답: ④ connect
문제 7. 난수 값 조건식 구성
문제해설:
rand()는 기본적으로 0 ~ RAND_MAX 사이의 난수를 생성한다.
우리가 원하는 값은 1 ~ 99 사이의 정수다. (즉, 0보다 크고 100보다 작다는 건 1 ≤ value ≤ 99)
① int value = r % 99; → 0~98 범위 → 0 포함 → 조건 미충족 ❌
② int value = (r % 99) + 1; → 1~99 범위 → 완벽히 조건 만족 ✅
③ int value = r % 100; → 0~99 범위 → 0 포함 → 조건 미충족 ❌
④ int value = (r % 100) - 1; → -1~98 범위 → 음수 발생 가능 → 조건 미충족 ❌
정답: ② int value = (r % 99) + 1;
문제 8. 반복자와 erase, 조건문 흐름
문제해설:
•erase()는 해당 원소를 제거하고 다음 반복자를 리턴한다.
• it++ 은 값을 쓰고 나서 증가.
• 벡터 초기값: 1~10 push_back()을 통해 벡터에 삽입 → [1,2,3,4,5,6,7,8,9,10]
3의 배수일 때만 sum에 더해짐, 나머지는 erase로 삭제된다.
sum = 3 + 6 + 9로 18이 되고 나머지는 전부 삭제되었으므로 size는 3이 됨
sum+ size = 18 + 3 = 21
정답: ② 21
문제 9. 부서와 툴 연결
문제해설:
• QA (Quality Assurance): 품질보증부서. 테스트를 진행.
• Bug Tracking System: 버그 등록 및 관리 시스템 (예: JIRA, Redmine)
• CS (Customer Service)는 사용자 피드백을 담당하므로 해당 없음.
• Version Control System 파일변화를 시간에 따라 기록했다가 특정시점의 버전 다시 불러올 수 있는 시스템(형상관리)
문제 10. C++ 클래스와 구조체 기본 속성
문제 해설:
① 가상 함수 유무에 따라 인스턴스 크기는 달라짐 (vtable 포인터 존재 여부)
② 클래스는 기본적으로 private, 구조체는 public
③ 부모의 소멸자가 가상이 아니면 컴파일 에러는 발생하지 않지만 자식 소멸자 가 호출되지 않아 메모리 릭 유발 가능
④ const 멤버는 생성자 본문에서는 초기화 못하고, 반드시 초기화 리스트에서 초기화해야 한다
정답: ④
문제 11. 전처리기 매크로 오류 찾기
문제해설:
① #ifndef... 구조는 헤더 가드로 사용되며 문제없음.
② 문자열 매크로 정의 "KOCCA" 도 문제없음.
③ #define FUNC { printf("FUNC Name is KOCCA"); }
• 함수처럼 중괄호를 포함한 매크로는 반드시 함수처럼 정의되어야 함
• FUNC라는 이름만 사용하면 매크로 호출 시 오류 발생 가능.
• 특히 C는 함수처럼 매크로를 쓰려면 #define FUNC() {...} 형태여야 오류가 안 난 다
④ 삼항 연산을 이용한 MAX 정의는 괄호 처리도 잘 되어 있어 문제없음.
정답: ③ #define FUNC {...}
문제 12. Call by Reference 함수 인자
문제해설:
① int value → 값 복사 → 원본 안 바뀜
② int* value → 포인터 → 역참조 필요
③ int ** value → 이중 포인터 → 역참조 2번 필요
④ int& value → 참조자 → 바로 원본 변수에 접근하여 변경
정답: ④ int& value
문제 13. 문자열과 NULL 문자 개념
문제해설:
ㄱ. '\0'은 문자열의 끝을 나타내는 널 종료 문자, ASCII값 0이다 ✅
ㄴ. 널 문자는 문자열의 길이에 포함되지 않는다 ❌
ㄷ. char MyStr [10] = "abcde"; → 문자열 길이 5, 배열 크기 10 ✅
ㄹ. Mystr = "abc"는 배열에 대한 직접 대입이므로 ❌ 포인터가 아닌 이상 불가
정답: ②
문제 14. 메모리 영역 구분
① 코드 영역: 프로그램 명령어(기계어)가 저장되는 영역
② 데이터 영역 (Data): 전역변수, static 변수 저장
③ 스택 (Stack): 함수 호출 시 지역 변수와 매개 변수가 저장되는 영역
④ 힙 (Heap): 동적 할당 영역 ( malloc / new )
정답: ③ Stack 영역
문제 15. C 미리 정의된 매크로에 대한 설명
문제 해설:
①__DATE__ : 컴파일된 날짜
②__TIME__ : 컴파일된 시간
③__FILE__ : 현재 소스 코드 파일의 경로 (상대 or 절대)
④__LINE__ : 해당 코드의 라인 번호
정답: ①__DATE__ : 실행된 날짜가 아닌 컴파일된 날짜가 맞음
문제 16. 매크로 연산자 우선순위
문제 해설:
괄호를 주의해야 하는 문제이다.
매크로 MINUS_1은 괄호처리가 되어있기 때문에 10-4 = 6이지만
MINUS_2와 DIVIDE는 괄호처리가 안되어 있어서 그대로 계산해 보면
6 * 1 / 2 * 3 - 4가 되는데 연산 우선순위에 따라 처리하면
6 / 2 * 3 - 4 → 3 * 3 - 4 → 9 - 4 = 5
정답: ④
문제 17. 와이드 문자열 출력
문제 해설:
- strlen: 문자열의 바이트 수를 셈 (널 문자 제외)
- wcslen: 문자 수를 셈 (wchar_t 기준)
따라서 첫 출력문에서 한글 1글자 크기인 2바이트 x 5글자 = 안녕하세요 10 출력
두 번째 출력문에서는 문자 수를 세기 때문에 안녕하세요 5 출력
정답: ③
문제 18. 참조값
문제 해설:
UpdateValue() 매개변수가 핵심
첫 번째 매개변수는 &로 참조자가 있어 nVal1이 값인 1이 되고
두 번째 매개변수는 값 참조만 일어나기에 다시 nNum2 값 10이 되고
세 번째 매개변수는 포인터로 직접 접근 가능하기에 3이 됨.
따라서 1 + 10 + 3 = 14
정답: ① 14
문제 19. C++ 함수 선언 오류
문제해설:
① 기본 인자를 사용하는 정상적인 함수
② 기본 인자 + 다양한 타입 사용
③ char union(...) → union 은 C/C++의 예약어이므로 식별자로 사용할 수 없음
④ 인자 타입만 선언한 정규 선언
정답: ③ char union(...)
① char : 1 byte
② int : 4 byte
③ float : 4 byte
④ double : 8 byte
정답: ②
문제 21. C++11 범위 기반 for문 사용
문제해설:
• 이때, auto는 복사본
• auto& 는 참조 → vec의 원본 값에 접근 가능
• auto i를 사용할 경우, 복사본이기 때문에 제곱해도 원본이 변하지 않음
• for_each는 범위기반 for문이 아니어서 틀린 문법이고 사용하려면 함수 객체나 람다가 필요함
정답: ② for (auto &i : vec)
문제 22. 프로세스 vs 스레드
문제 해설:
• 프로세스: 독립된 메모리 공간을 가진 실행 단위
• 스레드: 프로세스 내에서 실행되는 가벼운 실행 단위 (메모리 공유)
• 콘텍스트 스위칭: 실행 중인 스레드 or 프로세스를 바꿀 때 발생하는 비용
① 스레드 수 제한은 OS/메모리 환경에 따라 다르며, "512개 고정"은 잘못된 정보
② 다중 프로세스는 메모리 비용이 크고, 일반적으로 스레드가 더 효율적
③ PIPE는 양방향 통신이 가능하긴 하지만 반드시 메모리 공유 방식은 아님
④ 스레드를 많이 만들면 전환 시 오버헤드가 발생 → 성능 저하 유발 가능
정답: ④
문제 23. 재귀 호출
문제 해설:
실행 순서는
test(5) = 5 - test(4)
test(4) = 4 + test(3)
test(3) = 3 - test(2)
test(2) = 2 + test(1)
test(1) = 1 - test(0)
test(0) = 0
거꾸로 올라가면
test(0) = 0
test(1) = 1 - 0 = 1
test(2) = 2 + 1 = 3
test(3) = 3 - 3 = 0
test(4) = 4 + 0 = 4
test(5) = 5 - 4 = 1
정답: ②
문제 24. 사용자 정의 대입 연산자 오버로딩
• a = 3; 은 int 형 값을 A 객체에 대입하는 연산이다.
• 이 경우, operator=(int)를 정의하지 않으면 컴파일 에러
→ void operator=(int n) { val = n; }가 필요
만약 operator=(int& n)를 정의한다면 상수나 임시 값(리터럴 3)을 대입할 수 없다.
참조로 받을 수 없기 때문(임시 값이기 때문이다, 변수라면 가능하지만 int n이 범용성이 더 높다.)
문제 25. 비트 연산자 활용 (시프트 연산)
문제 해설:
• x << 4 → 1 × 2⁴ = 16
• >> 2 → 16 / 2² = 4
→ y = (1 * 16) / 4 = 4
정답: ② y = (x * 16) / 4
게임 알고리즘과 설계
문제 1. 자료구조 설명
문제해설:
① 배열은 고정 크기이고 중간 삽입/삭제 시 이동 필요.
② 큐는 줄 서기 구조, 순차적 입출력 구조.
③ 스택은 선형 자료구조이며, 그래프와는 무관하다.
④ 연결 리스트는 순차 접근 특성이 있어 탐색 시 시간복잡도는 O(n)이다. → 정확함
정답: ③
문제 2. 시간 복잡도와 공간 복잡도
문제 해설:
• 시간복잡도: 알고리즘이 데이터를 처리하는 데 걸리는 시간 측정
• 공간복잡도: 알고리즘이 사용하는 메모리양 측정
• 빅오(Big-O): 최악의 경우 시간/공간을 점근적으로 표현
• 빅오메가(Ω): 최선의 경우 성능 하한선
정답: ②
문제 3. 자료구조 힙
문제 해설:
• Heap은 완전 이진트리 기반 자료구조
• Min-Heap: 부모가 자식보다 작음 / Max-Heap: 부모가 자식보다 큼
• 힙은 우선순위 큐에 적합하고, O(log n)의 삽입/삭제 성능을 가짐
• 배열로도 구현 가능하며 인덱스 규칙은 중요
① 일반 배열에서 최솟값 찾기: O(n), 힙에서는 O(log n)
② 힙은 우선순위 큐 구현에 적합하며 배열/연결리스트 가능, 배열이 효율적
③ 최대힙/최소힙은 완전이진트리 기반
④ 배열 기반 최대힙에서 루트 인덱스가 1일 때, 왼쪽 자식 = 부모 × 2, 오른쪽 자식 = 부 모 × 2 + 1 → 반대로 되어 있음.
정답: ④
문제 4. 이진 탐색 트리 구성 순서
삽입 순서
50 → 루트 A
15 → 왼쪽 자식 C
62 → 오른쪽 자식 B
80 → 62의 오른쪽 자식 G
7 → 15의 왼쪽 자식 D
54 → 62의 왼쪽 자식 F
11 → 7의 오른쪽 자식 E
정답: ④
문제 5. 해시테이블
문제 해설:
해시 테이블의 평균 시간복잡도는 O(1) 충돌 시에도 O(n²)까지 커지는 건 일반적이지 않음.
체이닝 방식의 경우 최악에만 O(n), 개방 주소법도 보통 O(1) ~ O(log n) 수준
정답: ④
문제 6. 재귀호출을 이용한 팩토리얼
문제 해결:
팩토리얼
• n! = n × (n-1)!
• 0! = 1
즉, fac(n) = n * fac(n-1)
정답: ④
문제 7. 데이터 배열 정렬처리 과정
문제 해설:
• 인접한 두 값을 비교하며 큰 값을 오른쪽으로 보내는 방식
• 가장 큰 값이 거품처럼 떠오르듯 배열 끝으로 이동
해당 방식을 사용하는 정렬은 버블 정렬.
정답: ② 버블 정렬(Bubble Sort)
문제 8. 정렬 알고리즘
문제 해설:
• 현재 인덱스에서 가장 작은 값을 찾아서 교환
• 한 번에 하나씩 정렬이 확정됨
• O(n²)
• 교환 횟수가 적음 (1회 정렬당 1회 교환)
정답: ① 선택 정렬(Selection Sort)
문제 9. 디자인 패턴
문제 해설:
① 옵서버 패턴: 상태 변화 시 등록된 객체(옵서버)들에게 알림을 보내는 구조.
② 싱글턴 패턴: 프로그램 내에서 하나의 인스턴스만 존재하도록 보장하는 패턴.
③ 비지터 패턴: 객체 구조는 그대로 두고, 새로운 기능을 외부에서 추가할 수 있도록 하는 패턴.
④ 컴포지트 패턴: 트리 구조의 객체들을 단일 객체와 동일하게 처리할 수 있게 하는 패턴.
정답: ①
문제 10. 알고리즘 수행 속도
문제 해설:
• 버블 정렬(Bubble Sort)의 시간복잡도는 O(n²)
• O(nlog n) 은 퀵정렬, 병합정렬 등의 복잡한 정렬에서 나타나는 시간복잡도
정답: ③
문제 11. 백트래킹
문제 해설:
백트래킹 개념
• 해를 찾는 과정에서 가능성이 없다고 판단되면 즉시 가지치기(Purning) 하는 방식
• 일반적으로 DFS(깊이우선탐색)를 기반으로 사용됨
• 상태 공간 트리로 나타낼 수 있는 경우에 효과적
• 조합, 수열, 퍼즐, 체스판 문제 등에 많이 활용됨
정답: ④
문제 12. 최단경로 알고리즘
문제 해설:
Dijkstra 가중치가 양수일 때만 사용 가능. Greedy 방식
Bellman-Ford 음수 가중치 가능, 느리지만 정확함
Floyd-Warshall 모든 노드 간 최단경로. 동적계획법 사용
A* Heuristic 함수 사용. 빠르지만 최적이 아닐 수도 있음
다익스트라는 Greedy + Priority Queue 방식으로 정해진 방식의 탐색을 함.
정답: ①
문제 13. 연결 리스트와 배열
문제 해설:
배열은 대표적인 선형 자료구조, 비선형 구조는 트리, 그래프 등이다.
정답: ④
문제 14. 배열을 이용한 자료구조 구현
문제 해설:
배열 기반 자료구조 구현
• 배열은 정적 크기, 연속된 메모리
• 순차적 접근에는 유리하지만 트리/그래프 등 계층 구조에는 부적합
• 특히 트리(Tree)는 자식 노드가 가변적이고, 연결관계 중심이므로 연결리스트나 포인터 기반이 일반적
① Dequeue: 배열 or 연결리스트 둘 다 구현 가능
② Circular Queue: 배열 구현에 자주 사용
③ Stack: 배열로 쉽게 구현 가능
④ Tree: 배열로 구현하면 메모리 낭비 + 구조적 비 효율 발생
정답: ④
문제 15. 피보나치 탐색과 이진 탐색
문제 해설:
• 이진 탐색은 나눗셈, 피보나치 탐색은 덧셈 뺄셈으로 탐색.
• 피보나치 탐색은 하드웨어에서 나눗셈 연산이 느릴 때 유리
• 시간복잡도는 동일하지만, 구현 난이도는 이진 탐색이 더 단순
• 성능은 둘 다 O(log n)
정답 : ②
문제 16. 크루스칼 알고리즘
문제 해설:
최소비용 신장트리는 사이클이 없는 최소 간선 집합.
- 모든 간선을 가중치 기준으로 오름차순 정렬.
- 가장 작은 가중치의 간선부터 하나씩 선택.
- 사이클(순환)이 생기지 않으면 간선을 최소 신장 트리에 포함.
- 사이클이 생기면 그 간선은 버림.
- 모든 노드가 연결될 때까지 반복.
정답: ②
문제 17. 트리
문제 해설:
트리의 특성
• 트리는 사이클이 없는 연결 그래프
• 각 노드는 하나의 부모만 가질 수 있음
• 자식 노드는 여러 개 가능 (꼭 2개일 필요 없음)
• 트리는 게임에서 씬 그래프, 공간 분할 등에 활용됨
• 균형 잡힌 트리는 탐색 시간 최소화를 도와줌
정답: ①
문제 18. 맥스 힙
문제 해설:
최대 힙 (Max Heap)
• 완전 이진트리 기반
• 부모 노드 ≥ 자식 노드
• 배열 구현 시 루트가 가장 큰 값
정답: ①
문제 19.
문제 해설:
A-star 알고리즘
• Heuristic (예상 거리) + 실제 경로 비용을 합산하여 가장 유망한 경로를 선택(정교한 기준)
• 빠른 경로 탐색이 가능하지만, 항상 최적 해를 보장하진 않음 (휴리스틱에 따라 달라 짐)
• 주로 게임 맵 탐색 등에 활용
정답: ④
문제 20. 경계 박
문제 해설:
경계 박스(Bounding Box)란?
- 게임 오브젝트를 사각형 또는 3D 상자(Box)로 단순화하여, 충돌을 판정하는 도구입니다.
- 오브젝트의 모양을 정확하게 계산하지 않고, 대략적인 형태만으로 충돌을 빠르게 계산할 수 있습니다.
- 주로 2D 게임에서는 직사각형, 3D 게임에서는 직육면체를 사용합니다.
종류:
① AABB (Axis-Aligned Bounding Box):
- 축 기준 경계 박스.
- 경계 박스가 x, y, z 축에 항상 평행합니다.
- 계산이 빠르고 간단하지만, 회전된 객체에는 정확도가 떨어질 수 있음.
② OBB (Oriented Bounding Box):
- 회전 가능한 경계 박스.
- 객체의 방향에 맞춰서 박스도 회전합니다.
- 정확도는 높지만 계산이 복잡합니다.
정답: ④
문제 21. 문자열 탐색 알고리즘
문제 해설:
• Rabin-Karp: 해시 기반
• KMP (Knuth-Morris-Pratt): 접두사 테이블을 이용한 빠른 탐색
• Boyer-Moore: 뒤에서부터 비교, 스킵 기법 적용
• Dijkstra: 그래프의 최단경로 알고리즘, 문자열과 무관
정답: ③
문제 22. 1차 선형 보간
문제 해설:
두 점 A와 B 사이에서, 보간 인자 t에 따라 중간 값을 계산:
Lerp(A, B, t)=(1−t) ×A+t×B
정답: ③
문제 23. 지형 분할 시 적절한 알고리즘
문제 해설:
• Quad Tree (4진 트리): 2D 공간을 재귀적으로 4 구역으로 나누는 구조
◦ 대규모 지형이나 맵을 효율적으로 분할
◦ 뷰 프러스텀 컬링, 충돌 감지 등에 사용됨
스택, 링크드 리스트, 그래프는 공간 분할용이 아님
정답: ③
문제 24. 탐색 순서에 따른 알고리즘
문제 해설:
A - B - C- D - E - F - G와 같은 순서는
시작 노드에서 가까운 노드부터 넓게 탐색하는 너비 우선 탐색이다.
레벨 순서로 탐색이 일어나는 게 특징이다.
정답: ①
문제 25. 균형 잡힌 이진트리
문제 해설:
• 트리의 높이 차이를 1 이하로 유지 → 탐색 성능 유지
• 삽입, 삭제 시 균형을 다시 맞춤 → O(log n) 보장
• 일반 이진 탐색 트리는 한쪽으로 치우치면 O(n)까지 성능이 저하됨
정답: ②
게임 콘텐츠 프로그래밍
문제 1. 2차 방정식의 일반해
문제 해설:
일반 해 공식:
정답: ①
문제 2. 경사 계산
문제 해설:
삼각함수 관계
여기서 sin( θ ) = 30도
빗변 = 이동 거리 = 100
높이 = h
이때 sin ( θ ) = 30인데 sin 30은 1/2와 같다고 하니
h/100 = 1/2 따라서 h = 50
정답: ②
문제 3. 16진수 변환
문제 해설:
0x1 A3 F
= 1 ×16 ³ + A×16² + 3 ×16 ¹ + F×16⁰
= 1 ×4096 + 10 ×256 + 3 ×16 + 15 ×1
= 4096 + 2560 + 48 + 15
= 6719
정답: ③
문제 4. 벡터 계산
문제 해설:
코사인 그래프 찾기 문제.
코사인 함수의 특징:
- 주기: 2π2\pi
- 최댓값: 1, 최솟값: -1
- cos(0)=1\cos(0) = 1 cos(0)=1
- 대칭: y축 대칭 (짝수 함수)
①번:
- 위 그래프는 절댓값 코사인 함수처럼 보임 (cos 그래프 아님).
- 하단 그래프는 sin(x) → 오답.
②번:
- 그래프는 sin(x) 그래프임.
- sin(0)=0\sin(0) = 0 sin(0)=0,, 시작점도 다름 → 오답.
③번:
- 그래프는 cot(x) (코탄젠트).
- 급격한 변화와 수직 점근선 있음 → 코사인 아님 → 오답.
④번:
- 그래프는 전형적인 cos(x) 형태.
- cos(0)=1\cos(0) = 1 cos(0)=1
- cos(π)=−1\cos(\pi) = -1 cos(π)=−1
- 주기적, 부드러운 곡선.
정답: ④
문제 5. 텍스처
문제 해설:
3D 공간에서 텍스처를 적용하려면 깊이 축(w)이 추가되어야 한다.
Volume Texture(부피 텍스처)는 3차원 데이터를 시각화할 때 사용되며,
일반적인 예는 다음과 같다
• 연기 효과
• 내부 밀도 표현
• 의료 영상 (CT, MRI)
정답: ③
문제 6. 전치 행렬
문제 해설:
전치 행렬(Transpose Matrix)이란 행과 열을 바꾸는 연산이다.
정답: ④
문제 7. 렌더링
문제 해설:
셀 셰이딩(Cel Shading, Cartoon Shading)은 만화처럼 색의 경계를 뚜렷하게 표현하는 셰이딩 기법이다.
• 특징:
◦ 그림자와 밝기를 단계적으로 표현
◦ 부드러운 그라디언트 대신 뚜렷한 명암 구분
• 일반 셰이딩(Lambert, Phong)과 달리 예술적 스타일링을 목적으로 사용됨
문제 8. 충돌하지 않은 조건의 수식
문제 해설:
• 두 구의 중심 거리: ddd
• 반지름: r1, r2r_1, r_2r1, r2
• 충돌이 없는 조건: r1+r2 < dr_ 1 + r_2 < dr1 +r2 <d
두 구의 중심 간 거리가 반지름의 합보다 크면 닿지 않음
정답: ③
문제 9. 회전행렬의 역행렬
문제 해설:
• 정규직교 행렬(Orthogonal Matrix)인 경우, 역행렬 = 전치 행렬
• 전치 시, sin 항의 부호만 반대가 된다.
정답: ①
문제 10. 일정한 방향성 광원
문제 해설:
• Point Light: 위치에서 모든 방향으로 빛을 뿜음 (거리 감쇠 존재)
• Directional Light: 태양처럼 방향만 있고 거리 감쇠 없음
• Spot Light: 원뿔 형태로 범위를 갖는 빛
• Ambient Light: 장면 전체에 퍼지는 간접 조명
정답: ②
문제 11. 객체 간의 충돌
문제 해설:
- 트리에서 A와 B의 충돌 검사는 C와 D까지 포함해서 검사하지 않는다.
- 트리 구조의 핵심은 필요한 범위만 검사하여 최적화하는 것
정답: ③
문제 12. 메시 셰이더를 이용한 LOD 구현
문제 해설:
• Mesh Shader: GPU에서 메시를 직접 생성하거나 최적화하여 LOD를 효율적으로 처 리하는 셰이더 기술
• LOD (Level Of Detail): 거리나 화면상 면적에 따라 저해상도 메쉬로 교체해 렌더링 성능 향상
① 여러 메시를 미리 로딩해 거리 따라 교체 → 가능하지만 정적 방식
② 실시간으로 메시를 분할/간략화하여 LOD 단계 자연스럽게 전환 → 정답
③ 거리 기반 방식의 단점 설명 → 맞지만 조건에 안 맞음
④ 화면 투영 면적 기준으로 LOD 결정 → 가능하지만 질문 핵심 아님
정답: ②
문제 13. 렌더링 최적화 기법
문제 해설:
• Occlusion Culling (오 클루 전 컬링): 가려진 오브젝트는 렌더링 하지 않도록 제거하는 기법
◦ 카메라에서 시야에 보이지만, 앞의 오브젝트에 가려져 보이지 않는 경우 제거
◦ CPU나 GPU에서 전처리되어 처리 성능 향상
• Back Face Culling: 뒤쪽 면 제거
• View Frustum Culling: 카메라 시야 밖 제거
• Billboard Culling: Billboard는 3D 공간에서 항상 카메라를 향하는 2D 평면 객체입니다.
보이지 않는 Billboard 객체를 제거하여 렌더링 성능을 향상하는 최적화 기법입니다.
정답: ②
문제 14. 카메라 회전을 위한 벡터 연산
문제 해설:
Yaw: 수평 회전 (Y축 기준)
벡터의 내적(Dot Product)은 두 벡터 사이의 각도를 계산할 때 사용됨
정답: ③
문제 15. 렌더링 파이프 라인
문제 해설:
Output-Merger Stage는 GPU 렌더링 파이프라인의 마지막 단계
◦ 여러 렌더 타깃의 출력을 최종 프레임 버퍼에 병합
◦ Blend, Depth, Stencil 처리 등 포함
정답: ②
문제 16. 픽셀 셰이더
문제 해설:
픽셀 셰이더는 화면에 출력되는 픽셀의 색상, 조명, 텍스처 계산을 수행하는 셰이더 다.
• 깊이 값은 일반적으로 픽셀 셰이더 또는 하드웨어의 깊이 버퍼에 의해 처리된다.
• 지오메트리 셰이더는 정점이나 프리미티브를 생성할 수 있지만, 깊이값 저장은 해당되지 않는다.
정답: ③
문제 17. 블룸 효과
문제 해설:
블룸은 빛나는 오브젝트 주변에 광륜(Halo) 효과를 주는 후처리 기법이다.
• 특정 밝기 이상의 픽셀을 추출하고, 가우시안 블러를 적용한 후 원본 이미지와 합성한다.
• 렌더링 파이프라인의 후처리 단계(Post-processing)에서 처리된다.
정답: ②
문제 18. 3D 게임의 렌더링 및 애니메이션
문제 해설:
• 깊이 버퍼는 자동으로 GPU가 처리하며, 정점 셰이더는 단순히 정점 변환만 수행한다.
• 물체 정렬은 CPU 또는 쉐이더 외 로직에서 처리됨.
• 정점 셰이더가 물체를 거리 순으로 정렬하지는 않는다.
정답: ④
문제 19. GPU와 비디오 메모리 사용
문제 해설:
• GPU는 그래픽 연산, CPU는 네트워크, 게임 로직, 위치 업데이트 등을 수행.
• 네트워크 처리는 GPU가 아닌 CPU에서 이뤄지며, 메모리도 일반 RAM 사용.
정답: ④
문제 20. 그림자 영역을 동적으로 생성하는 셰이더
문제 해설:
• 스텐실 그림자 볼륨 기법에서 실시간으로 새로운 정점을 생성하려면 Geometry Shader가 필요하다.
• Vertex Shader는 입력된 정점만 다루고, Pixel Shader는 픽셀만 다룸.
정답: ④
문제 21. 조명 처리 기법
문제 해설:
• Ray Tracing은 카메라(눈)에서 광선을 쏘아 충돌체와 교차점 계산
• 실제 빛의 궤적을 추적하며 그림자, 반사, 굴절을 사실적으로 표현함
정답: ①
문제 22. 백터 내적 계산 함수
문제 해설:
두 단위 벡터 F와 R 사이의 각도 θ는
- 즉, 회전각(rad)을 구하려면 acos(내적값)을 사용해야 합니다.
- acos는 역코사인 함수, 즉 cos의 반대 함수.
정답: ③
문제 23. DOF 구현에 필요한 버퍼
문제 해설:
• DOF는 깊이에 따라 흐림 정도를 조절하는 후처리 효과
• 각 픽셀의 Z값 정보, 즉 Depth Buffer가 반드시 필요함
정답: ②
문제 24. 부모 자식 계층의 행렬 곱 순서
문제 해설:
- 자식의 로컬 위치에 먼저 자식 자신의 변환 행렬 Mc를 적용.
- 그다음, 자식이 속한 부모의 위치와 회전, 스케일을 적용해야 함 → 부모 행렬 Mp 적용.
- 즉, 자식 기준 변환 → 부모 기준 변환 순서.
정답: ①
문제 25. 구에서 방출되는 빛을 묘사하는 요소
문제 해설:
• Emissive는 물체 자체가 빛을 내는 것처럼 보이게 하는 머티리얼 속성
• 빛을 실제로 방출하지는 않지만, 빛나는 느낌을 줌 (예: 전구, 불빛 등)
정답: ③
'자격증' 카테고리의 다른 글
게임 프로그래밍 전문가 필기 2021년 1회 - A형 (0) | 2025.05.12 |
---|---|
게임프로그래밍 전문가 자격증 필기 2022년 2회 A형 개념정리 (0) | 2025.05.01 |
게임프로그래밍 전문가 필기 2023년 1회 A형 개념정리 (0) | 2025.04.30 |
게임 프로그래밍 전문가 필기 2023년 2회 A형 개념 정리 (0) | 2025.04.29 |
게임프로그래밍 필기 개념정리 2024년 1차 A형 (1) | 2025.04.28 |