목록42 (71)
치춘짱베리굿나이스
광선 이동거리 계산 및 보정 어안렌즈 효과 방지하기 화면에 벽을 출력할 땐 카메라 평면 (plane ⇒ 선) 기준으로 출력됨에도 불구하고 플레이어 기준 (pos ⇒ 점) 으로 거리를 계산하기 때문에 카메라 평면으로부터 벽까지의 거리가 제각각이 된다 카메라 평면의 끄트머리에 가까울 수록 벽까지의 거리가 과도하게 길어져 실제 카메라 평면까지의 거리보다 훨씬 멀게 연산되며 이는 화면의 왜곡을 초래한다 어안렌즈 효과를 방지하기 위해 광선이 벽에 도달했다 하더라도 광선의 이동거리를 바로 구하지 않는다 어안렌즈 효과를 방지한다면 플레이어 시점 (점) 이 아니라 카메라 평면 (선) 까지의 거리를 계산하므로 광선이 정확히 어느 지점에 부딪혔는지도 구할 필요가 없다 perpWallDist 광선의 적중 지점과 카메라 평면..
반복문의 동작 주의할 점 Lodev는 y가 아래에서 위로 증가하는 좌표계를 사용하였는데, 레이캐스팅 구현 시에 이 부분을 신경쓰지 않으면 이동 방향이나 회전 방향이 반대가 된다 각 벡터의 용도를 확실히 알고 구현해야 플레이어의 현재 상태에서 어떤 방향 또는 값을 갖는지 명확하게 알고 디버깅할 수 있으므로 코드를 작성하기 전 각 변수의 의미를 확실히 알고 가는 것을 추천함 위의 이미지 또한 어떻게 구현하는가에 따라 틀릴 수 있다 1. stepX, stepY 설정 if (rayDirX < 0) stepX = -1; else stepX = 1; if (rayDirY < 0) stepY = -1; else stepY = 1; 현재 광선의 방향에 따라 stepX와 stepY를 설정한다 광선의 방향은 rayDirX..
변수 설명 posX, posY 플레이어의 좌표를 나타내는 벡터 원점 (0, 0) 을 시작점으로, 플레이어의 좌표를 끝점으로 하는 벡터이다 단도직입적으로 플레이어의 위치 좌표라고 생각하는게 편하다 dirX, dirY 플레이어의 시선을 나타내는 벡터 길이는 1로 고정된다 플레이어가 보고 있는 방향을 나타낸다 플레이어의 눈에서 레이저가 나온다고 가정할 때 해당 레이저의 이동 방향이라 생각하면 쉽다 planeX, planeY 카메라 평면을 나타내는 벡터 카메라 평면이라는 개념이 생소할 수 있는데, 이 벡터와 반대방향 벡터 (-plane) 를 합친 만큼에 비춰지는 게임 오브젝트들이 화면상에 그려진다고 생각하면 된다 쉽게 말해, 실제 플레이어가 컴퓨터로 보는 화면의 가로 길이와 1대1 대응된다 따라서 시야와는 무조..
Raycasting 기초 계산에 필요한 벡터들 현재 플레이어의 위치를 나타내는 위치벡터 pos 플레이어의 시점 방향을 나타내는 방향벡터 dir 카메라 평면을 나타내는 방향벡터 plane 해당 벡터들 계산법 pos는 (0, 0)을 기준으로 현재 플레이어의 위치 좌표를 나타낸다 dir은 방향벡터이며 단위벡터이므로, 길이는 1로 초기화된다 dir의 시작점은 어디이던지 상관없음 ⇒ (0, 0)으로 가정 plane은 dir과 항상 수직이며, 길이는 구현하고자 하는 시야각에 따라 다름 후술하겠지만 시야각은 dir과 plane의 길이 비율에 따라 결정되며, dir의 길이는 1로 고정시키고 plane의 길이를 조절하게 된다 광선의 방향 계산 광선은 pos의 끝점부터 시작하여 plane 벡터 위의 어느 한 점을 끝점으로..
My first RayCaster with miniLibX 와! 수학! 기하와벡터! 팀 ⌜ ⌟ (웃음) 단언컨대 최고의 팀원이었습니다 감사합니다 HE IS GOD. 제 블로그 오시는 분들 제 컵디 팀원분 진짜 레전드고수왕고수킹갓엠페러코드마스터십니다 클러스터에서 마주치시면 싸인 받아놓으세요 주의사항 주의사항단 4시간동안은 빡세게 하기 파트 나누지 않고 둘이 만나서 같이 붙어서 할것 하루에 4시간씩 투자할 것 사전에 공부해야 할 내용 Lodev Raycasting 정리 참고자료 Raycasting #define screenWidth 640 #define screenHeight 480 #define texWidth 64 #define texHeight 64 #define mapWidth 24 #define m..
무지많다 (화이팅 tc로 시작하는 일련의 함수들과 tty가 들어간 함수들은 Termcap 구현 시에 사용하는 함수들로, Mandatory에서는 필요가 없었다 아마도.. 일단 내가 맡은 파트에선 안썼다 unistd.h unlink int unlink(const char *path); path에 해당하는 파일 링크를 삭제한다 (= 파일을 지운다) 정확하게는 hard link가 참조하는 count를 1 감소시키며, 이 count가 0이 되면 실제 파일 내용이 저장되어 있는 disk space를 free하여 다른 파일이 저장될 수 있도록 한다 따라서 hard link가 없는 일반 파일들은 그냥 지워지는 것 성공했을 경우 0을 반환하며, 실패했을 경우 -1을 반환하고 errno에 에러를 설정한다 close int..
특정 케이스에서 어떤 시그널을 입력하면 어떤 반응을 보이는지 체크 기본 쉘 프롬프트 (입력값 없음) ctrl - c bash-3.2$ #ctrl-c 입력 bash-3.2$ 개행이 들어감 $?은 1로 세팅 ctrl - d bash-3.2$ exit #ctr-d 입력된 후에 콘솔창에 exit 출력됨 인자 없는 exit와 동일하게 동작함 ctrl - \ bash-3.2$ #ctrl-\ 입력 아무런 일도 일어나지 않음 (SIGIGN) $?는 이전 값에서 변하지 않음 (아무일도 일어나지 않았으므로) 기본 쉘 프롬프트 (입력값 있음) ctrl - c bash-3.2$ aaaa #ctrl-c 입력 bash-3.2$ 개행이 들어감 직전에 입력한 값은 history에 들어가지 않으며, 작동도 안 함 ctrl - d ba..
bash & echo $> echo -n "'"'"'hello'"'"'" '"hello"' $> "'"'"'hello'"'"'" → "'", '"', hello, '"', "'" 이렇게 5덩이로 짤리기 때문에 쟤네만 남음 $> echo """"'hello'"""" hello $> echo """'hello'""" 'hello' $> echo '''"hello"''' "hello" $> echo ''''"hello"'''' hello $> """"'hello'"""" "", "", 'hello', "", "" 5덩어리로 나뉘어짐 """'hello'""" "", "'hello'", "" 3덩어리로 나뉘어짐 '''"hello"''' '', '"hello"', '' 3덩어리로 나뉘어짐 ''''"hello"'''..