본문 바로가기
자격증

게임 프로그래밍 전문가 필기 개념 정리 2022년 1차 B형

by hungry- 2025. 4. 27.

게임 프로그래밍 자격증을 따려고 찾아봤는데 자료가 없어 그냥 기출문제로만 공부해야 한다고 해서

기출문제들을 풀어보며 개념을 정리해보려고 한다. 

게임 프로그래밍 방법론

문제 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차 선형 보간

문제 해설:

두 점 AB 사이에서, 보간 인자 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는 물체 자체가 빛을 내는 것처럼 보이게 하는 머티리얼 속성

• 빛을 실제로 방출하지는 않지만, 빛나는 느낌을 줌 (예: 전구, 불빛 등)

정답: ③