일반적으로 표시되는 화면과 별개로 움직일 수 있는 작은오브젝트를 일컫는다.
data->sprite_buffer[x] = drawing_factors.vertical_distance;
data->args.sprite_information[index].relative_distance =
(pow(data->player_position_x - data->args.sprite_information[index].x, 2) + pow(data->player_position_y - data->args.sprite_information[index].y, 2));
상대거리는 플레이어의 위치에서 sprite의 위치를 뺀 후 피타고라스정리를 이용하여 계산한다
원근법에 따라서 멀리있는 스프라이트들은 가까이있는 스프라이트들에 의해서 가려지기 때문에 거리가 먼 순서대로 정렬시키고 스프라이트들의 그려주게 한다
스프라이트를 카메라 평면에 투영시키는 방법은 카메라 평면의 역행렬을 곱해서 구해준다
[ planeX dirX ] -1 [ dirY -dirX ]
[ ] = 1/(planeX*dirY-dirX*planeY) * [ ]
[ planeY dirY ] [ -planeY planeX ]
카메라 평면의 역행렬 공식
투영된거리X = 1/(planeXdirY-dirXplaneY) (dirY spriteX - dirX * spriteY);
dir = 수직거리
투영된거리Y = 1/(planeXdirY-dirXplaneY) (-planeY spriteX + planeX * spriteY);
plane = 수평거리
drawing_factor->sprite_screen_x = (int)((WIN_WIDTH / 2) * (1 + 투영된거리X / 투영된거리Y));
원근법에 따라 멀리있을수록 작게 그려져야 되기때문에 x를 y로 나눠주어 계산해준다.
1을 더해준 이유는 y가 너무커져서 무한으로 나눠야 되는 경우를 방지해주는것이다
텍스쳐 가로방향 색상 = 현재 반복중인 가로 점 - (-스프라이트가로길이 절반 + 화면에 투영될 스프라이트의 가로 위치) * 텍스쳐의 가로길이 / 화면에 투영될 스프라이트의 가로길이
조건 1. 스프라이트가 그려지게 될 위치(Y)가 카메라 평면에 포함되어야함
조건 2. 스프라이트가 스크린안(X)에 표시되어야함
조건 3. 레이케스팅을 진행하며 저장해둔 수직선의 길이보다 화면에 투영된 거리가 작아야함
※ 조건에 하나라도 만족되지않을 시 화면에 그려지지 않는다
텍스쳐 세로방향 색상 = (현재 반복중인 세로 점 - 윈도우 크기의 절반 + 화면에 투영될 스프라이트의 높이 절반) * 텍스쳐의 세로길이 / 화면에 투영될 스프라이트의 세로길이
color & (0x00FFFFFF) == 0
컬러와 0x00FFFFFF를 and연산한 결과가 0인경우 투명색이다
draw 버퍼 = texture[텍스쳐의 가로길이 * 텍스쳐 세로방향 색상 + 텍스쳐 가로방향 색상]