cub3D

Minjun_·2022년 4월 3일
0

42Seoul

목록 보기
6/11
post-thumbnail

cub3D

Wolfenstein 3D
완성본
Wolfenstein 3D 게임은 RayCasting Engine을 이용했다.
RayCasting Engine을 이용하여 비슷한 게임을 만들어보자라는 과제이다.

Raycasting

Raycasting 이란 무엇일까?

Raycasting은 rendering 기술이다.
2D Map에서 3D Perspective를 만들어 낸다.
옛날에는 컴퓨터 속도가 느려 실시간으로 3D 엔진을 돌리는 것이 불가능했다.
그리고 raycasting이 그 해결 방법이었다.

Raycasting은 왜 가능했을까?

screen의 수직인 선만 계산하면 되기 때문에 속도가 빨랐다. 연산의 횟수가 그렇게 많지 않다.
연산의 횟수가 적은 방법이기는 하지만 한계도 있다.
초기 Raycasting Engine으로 계단, 점프, 높이의 다름은 구현할 수 없다. 그러나 추후의 개선된 엔진에서는 가능하다고 한다.

Raycasting을 활용한 게임

Raycasting != Raytracing

Raycasting과 Raytracing은 다르다.
Raycasting은 실시간으로 작동하는 빠른 semi-3D 기술이고
Raytracing은 반사나 그림자까지 표현해주는 계산이 많이 필요한 렌더링 기술이다.

DDA 알고리즘

Raycasting에서는 선을 그리기 위해 DDA 알고리즘을 사용한다.
DDA Line Drawing Algorithm이란 선을 그리기 위해 매번 어느 방향으로 한칸씩 갈 것인가를 결정하는 알고리즘이다.
다시 말해서, x와 y좌표를 생각했을때 매 단계에서 x, y 둘중 한쪽으로만 한칸씩 움직여 시작점에서 끝점까지 이동하며 픽셀을 채우는 방법으로 선을 그린다.

Line Drawing 알고리즘 참고 자료

참고자료

회고

  • 단순히 Lodev 설명이 영어로 되어있고 벡터, 삼각함수등 수학과 관련된 내용이 나와서 공부하기가 어려웠다.
  • 하기싫어서 외면한 기간이 꽤 되고 실제 마음잡고 공부했을때는 한달도 안걸린 과제였다.
  • 삼각함수, 벡터 등 수학을 다시 공부하는 계기가 되었다.
  • RayCasting Engine보다는 Map에서 처리해주어야 할 예외가 상당히 많다.
  • 영어, 수학에 쫄지말고 천천히 하면 할 수 있다.
  • 이렇게 42Seoul에서 C를 이용한 과제는 끝이났다.
profile
졸음을 이겨내자..!

0개의 댓글