[cub3D] ๊ตฌํ ๊ณผ์ ์ ์ ๋ฆฌ
cub3d ๊ตฌํ ๊ณผ์ ์ ์ ๋ฆฌ.
github
GitHub - moaoh/cub3D
Contribute to moaoh/cub3D development by creating an account on GitHub.
github.com
์ ๋ ฅ๊ฐ์ ์ ํจ์ฑ ๊ฒ์ฌ ์งํํ๊ธฐ.
mlx๋ฅผ ์ฌ์ฉํ์ฌ ๋งต์ ํํ ํด๋ณด๊ธฐ.
mlx๋ฅผ ํฌํจํ์ฌ ์ปดํ์ผํ๊ธฐ
[ 2021. 01. 23 ]
1. img ํ์ผ์ ๋ฐ์์ ๋งต์ ํํํ๊ธฐ.
2. ๋์๋จ๋ถ ๊ฐ๊ฐ ๋ค๋ฅธ ๊ฐ๋ค์ ์ค๋ณด๊ธฐ.
[ 1. img ํ์ผ์ ๋ฐ์์ ๋งต์ ํํํ๊ธฐ. ]
void *mlx_png_file_to_image(void *xvar, char *file, int *width, int *height)
void *mlx_xpm_file_to_image(void *xvar,char *file,int *width,int *height)
2๊ฐ ๋ชจ๋ ์ด๋ฏธ์ง๋ฅผ data๋ก ๋ฐ๊ฟ์ฃผ๋ ํจ์์ฌ์ 2๊ฐ ์ค ํธํ ๊ฒ์ ์ฌ์ฉ.
[ 2. ๋์๋จ๋ถ ๊ฐ๊ฐ ๋ค๋ฅธ ๊ฐ๋ค์ ์ค๋ณด๊ธฐ. ]
while (1)
{
if (info->sideDist.Y < info->sideDist.X)
{
info->sideDist.Y += info->deltaDist.Y;
info->map.Y += info->step.Y;
info->side = 0;
}
else
{
info->sideDist.X += info->deltaDist.X;
info->map.X += info->step.X;
info->side = 1;
}
if (ray_info->map[info->map.Y][info->map.X] == '1')
break ;
}
main_loop์์ ์ฌ์ฉํ์๋ side ๊ฐ์ ๋ ์ด ํธ๋ ์ด์ฑ์ด x์ถ์ ๋ถ๋ช์ณค๋์ง y์ถ์ ๋ถ๋ช์ณค๋์ง ํ๋จ์ด ๊ฐ๋ฅํ๋ค.
๊ทธ๋์ side ๊ฐ์ ํตํ์ฌ. ๋์์ ๋จ๋ถ์ผ๋ก ๋๋ ์ ์๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก main_loop์์ ์ฌ์ฉ์ ํ๋ ํ๋ ์ด์ด์ ํ์ฌ ์์น์ ๊ด์ ์ ์์น๋ฅผ ์ด๋ ์ชฝ์ด ๋ ํฐ์ง๋ฅผ ๋น๊ตํ์ฌ
๋, ์, ๋จ, ๋ถ์ผ๋ก ์ชผ๊ฐ์ด ๋ณผ ์ ์๋ค.
[ 2021. 01. 25 ]
1. ๋์ ๋จ๋ถ์ผ๋ก ๋๋ ๊ฒ์ ๊ธฐ์ค์ผ๋ก ๋ฒฝ์ xpm ์ ์ฉ์ํค๊ธฐ.
[ 1. ๋์ ๋จ๋ถ์ผ๋ก ๋๋ ๊ฒ์ ๊ธฐ์ค์ผ๋ก ๋ฒฝ์ xpm ์ ์ฉ์ํค๊ธฐ. ]
void *mlx_xpm_file_to_image(void *xvar,char *file,int *width,int *height)
char *mlx_get_data_addr(void *img_ptr, int *bits_per_pixel, int *size_line, int *endian);
xpm ๊ฐ์ ๋ฒฝ์ ์ ์ฉ์์ผ๋ณด๋ ค๋ฉด ์ผ๋จ mlx_xpm_file_to_image ํจ์์ mlx_get_data_addr ํจ์๋ฅผ ์๋ ๊ฒ์ด ์ค์ํ๋ค.
void *mlx_xpm_file_to_image(void *xvar,char *file,int *width,int *height)
mlx_xpm_file_to_image ๋ฐํ ๊ฐ : img ๊ทธ ์์ฒด(?)
xvar : mlx ๊ฐ.
file : ์ด์ด์ ์ฌ์ฉํ๋ ค๊ณ ํ๋ texture์ ์์น์ ํ์ผ๋ช ( ex../texture/test.xpm)
width : ์ด์ xpm ํ์ผ์ x์ถ ๊ฐ (๋ฐํ ๊ฐ)
height : ์ด์ xpm ํ์ผ์ y์ถ ๊ฐ (๋ฐํ ๊ฐ)
char *mlx_get_data_addr(void *img_ptr, int *bits_per_pixel, int *size_line, int *endian);
mlx_get_data_addr ๋ฐํ ๊ฐ : img์ data๊ฐ. 1์ฐจ์ ๋ฐฐ์ด ๊ฐ์ผ๋ก ๋ฐํ์ด ๋๋ค.
img_ptr : mlx_xpm_file_to_image์์ ๊ตฌํ img ๊ฐ.
bits_per_pixel : ํฝ์ 1๊ฐ (์์)์ ํํํ๋๋ฐ ํ์ํ ๋นํธ์ / ๋นํธ์ ๋ฐ๋ผ ์์์ ๊ตฌ์กฐ ๋ฐ ๋ฐฉ์๋ ๋ค๋ฆ (๋ฐํ ๊ฐ)
size_line : data์ 1์ค์ ๊ธธ์ด. 1์ฐจ์ ๋ฐฐ์ด๋ก ๊ฐ์ด ๋ฐํ๋๊ธฐ ๋๋ฌธ์ ๋ฒฝ์ ๊ฐ์ ์ ์ฉ์ํค๋ ค๋ฉด ์ฌ์ฉํด์ผ ํ๋ ๊ฐ. (๋ฐํ ๊ฐ)
endian : ์ฌ์ฉํ์ง ์์์ (๋ฐํ ๊ฐ)
์ด 2๊ฐ์ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๊ฐ img์ ํด๋นํ๋ ๋ฐ์ดํฐ๋ค์ ์ ์ฅํด์ค๋ค.
p-eye/cub3d_texturing
Description of cub3D texturing. Contribute to p-eye/cub3d_texturing development by creating an account on GitHub.
github.com
ํ์๋ ๋ก๋ฐ๋ธ ์จ์ ์ฝ๋๋ฅผ ์ฐธ์กฐํ๊ณ ๊ณต๋ถํ์ฌ ์์ฑํ์๋ค.
๋ฐ์์จ xpm๊ฐ์ด [64][64]์ธ๋ฐ, ๋ฒฝ์ ์ ์ด์ผ ํ๋ ๊ฐ์ด [300][300]์ด๋ผ๊ณ ํ ๋ ๋ฒฝ์ ๊ทธ๋๋ก ์ ์ฉํ ์๊ฐ ์์ผ๋
์๋์ ์ธ ์ ์ฉ๋ฐฉ๋ฒ์ด ํ์ํ๋ค.
๊ทธ๋์ ์๋์ ์ธ ์ ์ฉ ๊ณต์์ ์์๋ณด๋ ์ค ๋ก๋ฐ๋ธ ์จ์ ์๋์ ํ ์ค์ณ ์ ์ฉ๋ฐฉ๋ฒ์ด๋ผ๋ ๊ธ์ ์ฐธ๊ณ ํ์ฌ ์์ฑํ์๋ค.
[ 2021. 01. 27 ]
1. img๊ฐ ์ ๋๋ก ์ ์ฉ๋๋๋ก ๊ณ ์น๊ธฐ.
2. ํ์ฌ ๋์คํ๋ ์ด ํด์๋์ ๋ฐ๋ผ์ ์ต๋ ํด์๋ ์ ํ ๋๊ธฐ.
[ 1. img๊ฐ ์ ๋๋ก ์ ์ฉ๋๋๋ก ๊ณ ์น๊ธฐ. ]
ํ์ ๊ฐ์ ๊ฒฝ์ฐ์๋ ์ ์ ๊ฐ ๋ฐ๋ผ๋ณด๋ ๊ฐ์ ๋ง์ถฐ์ ์ ๋๋ก ๋ ๋ฒฝ ๋ชจ์์ด ์ ๋์ค๋ ์ค๋ฅ๊ฐ ์์์ด์
๊ทธ๊ฒ์ ๊ณ ์น๊ธฐ ์ํด ๋๋ฒ๊น ๋ ๊ณ์ํ๊ณ ์ฝ์ง์ ๊ณ์ํ์๋๋ฐ.
๊ฐ๋จํ๊ฒ img์ ์ฌ์ฉํ๋ ๋ณ์๋ฅผ ์ด๊ธฐ์ ์ด๊ธฐํํด์ฃผ์ง ์์์ ๊ฐ์ ์ฐ๋ ๊ธฐ ๊ฐ์ด ๋ค์ด๊ฐ ์ค๋ฅ๊ฐ ๋ฐ์ํ์์๋ค.
๊ทธ๋์ ๊ทธ๋ฌํ ๋ถ๋ถ์ ํด๊ฒฐํ๋. ์ ๋๋ก ๋์ค๋ ๊ฒ์ ํ์ธํ ์ ์์๋ค.
[ 2. ํ์ฌ ๋์คํ๋ ์ด ํด์๋์ ๋ฐ๋ผ์ ์ต๋ ํด์๋ ์ ํ ๋๊ธฐ. ]
int mlx_get_screen_size(void *mlx_ptr, int *sizex, int *sizey);
mlx_ptr : ์ถ๋ ฅํ๊ณ ์ ํ๋ mlx์ ๊ฐ.
sizex : ์ต๋ ํด์๋ x์ถ (๋ฐํ ๊ฐ)
sizey : ์ต๋ ํด์๋ y์ถ (๋ฐํ ๊ฐ)
์ด๋ป๊ฒ ์ต๋ ํด์๋์ ๊ฐ์ ๋ฐ์์ฌ ์ ์๋๊ฐ ๊ณ ๋ฏผ์ด ๋ง์ด ์์๋๋ฐ. mlx๊ด๋ จ ํจ์๋ฅผ ์ดํด๋ณด๋ค๊ฐ
screen size๋ฅผ ๋ฐ์์ฌ ์ ์๋ ํจ์๊ฐ ์๋ ๊ฒ์ ๋ฐ๊ฒฌํ์๋ค.
sizex ๊ฐ๊ณผ sizey๊ฐ์ ๊ฐ์ง๊ณ ํ์ฌ ๋ฐ์์จ ํด์๋๊ฐ ์ด ๊ฐ๋ณด๋ค ํฐ์ง ์์ ์ง๋ฅผ ๋น๊ตํ์ฌ ๊ฐ์ด ํฌ๋ค๋ฉด
ํ๋ก๊ทธ๋จ์ ์ข
๋ฃ์์ผ๋ฒ๋ฆฌ๊ฑฐ๋ ๋ฐ์์จ ์คํฌ๋ฆฐ ๊ฐ์ ์ต๋ ํด์๋๋ก ๊ฐ์ ์์ ํ๋ ๋ฐฉ์์ผ๋ก ํํ ์ ์๋ ๊ฑฐ ๊ฐ๋ค.
[ 2021.01.28 ]
1. ๋งต ๋ฒ์ด๋ ๊ฒฝ์ฐ์ ๋ฐ๋ก ์ฒ๋ฆฌํด์ฃผ๊ธฐ.
[ 1. ๋งต ๋ฒ์ด๋ ๊ฒฝ์ฐ์ ๋ฐ๋ก ์ฒ๋ฆฌํด์ฃผ๊ธฐ. ]
ํฌ๊ฒ 2๊ฐ์ง๋ก ๋๋์ด์ง๋ ๋ถ๋ถ์ธ ๊ฑฐ ๊ฐ๋ค.
1. ๋งต์ ๋ฒ์ด๋๋ ์ค๋ฅ๊ฐ ๋์ง ์๊ณ ๊ณ์ ์ ์ง๊ฐ ๋๋ ๊ฒฝ์ฐ.
2. ๋งต์ ๋ชป ๋ฒ์ด๋๊ฒ ์ ํ์ ๋๋ ๊ฒฝ์ฐ.
ํ์์ ๊ฒฝ์ฐ ๋ ๋ฒ์งธ ๋ฐฉ๋ฒ์ด ๋ ์ฌ์ด ๊ฑฐ ๊ฐ์์ 2๋ฒ์งธ ๋ฐฉ๋ฒ์ ์ ํํ์๋ค.
key w, s์ ์ ํ์ ๋์ด 1๋ฒ(๋ฒฝ)์ ๊ฒฝ์ฐ ์์ ํต๊ณผํ์ง ๋ชปํ๋๋ก ์ ํ์ ๋์ด ์ค๊ณ๋ฅผ ํ์๋ค.
[ 2021.01.29 ]
1. sprite ํด๊ฒฐํ๊ธฐ.
[ 1. sprite ํด๊ฒฐํ๊ธฐ. ]
๊ธฐ์กด์ ๋ฒฝ์ ํํํ ๋ ์ฌ์ฉํ๋ ํจ์๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ๋ฉด splite๊ฐ 4๊ฐ์ ๋ฉด์ผ๋ก ํํ์ด ๋๊ณ pngํ์ผ์์ ํํ์ด ์๋์ด์๋
๋ถ๋ถ์ ๊ฒ์์์ผ๋ก ํํ์ด ๋๋ค.
๊ฒ์์์ผ๋ก ํํ๋ ๋ถ๋ถ์ ์๊น ๊ฐ์ 0์ด๊ธฐ์ ๋ฐ๋ก๋ก ์ฒ๋ฆฌ๋ฅผ ํ๋ฉด ์์๋ก ์ฒ๋ฆฌ๋ฅผ ํ ์๊ฐ ์์๋ค.
ํ์ง๋ง ๋ค์ ๋ฐฐ๊ฒฝ์ ์ฐธ๊ณ ๋ก ๋ง๋ค์ด์ง ๊ฐ์ด ์๋๋ฏ๋ก ์ฌ์ฉ์ ํ ์ ์๋ ๋ฐฉ๋ฒ์ธ ๊ฑฐ ๊ฐ๋ค.
[ 2021.01.30 ]
1. --save์ ๋ํด์ ์์๋ณด๊ธฐ.
[ --save์ ๋ํด์ ์์๋ณด๊ธฐ. ]
--save๋ผ๋ ๊ฐ์ด ๋ค์ด์ค๊ฒ ๋๋ฉด ํ๋ฉด์ ์คํ์ํค๊ธฐ ์๊ณ , ํ์ฌ ์ถ๋ ฅํด์ผ ํ ์ด๋ฏธ์ง๋ฅผ. bmpํ์์ผ๋ก ๋ ํ์ผ์ ์ ์ด ๋ฃ์ด์ผ ํ๋ค.
๊ทธ๋์ argv [2] ๊ฐ์ด ์๋์ง, "--save"์ ๊ฐ์์ง ํ์ธํ๋ ์์ ์ ์งํํ๊ณ ,
๊ธฐ์กด์ ํ๋ฉด์ ์ถ๋ ฅํ ๋ ์ฌ์ฉํ๋ screen๊ฐ์ ๊ทธ๋๋ก ๊ฐ์ ธ์์ ๊ทธ ๋ด์ฉ์ ๋ฐํ์ผ๋ก bmp ํ์ผ์ ์์ฑํ๊ธฐ๋ก ํ์๋ค.
[ 2021.01.31 ]
1. --save ์ฌ์ฉํด๋ณด๊ธฐ.
[ 1. --save ์ฌ์ฉํด๋ณด๊ธฐ. ]
C ์ธ์ด ์ฝ๋ฉ ๋์ฅ: 81.1 ๋นํธ๋งต ํ์ผ ํฌ๋งท ์์๋ณด๊ธฐ
๋นํธ๋งต ํ์ผ์ ๋ฐ์ด๋๋ฆฌ ํ์์ด๋ฏ๋ก ๋ฉ๋ชจ์ฅ ๋ฑ ํ ์คํธ ํธ์ง๊ธฐ๋ก ์ด์ด๋ ๋ด์ฉ์ ์์๋ณผ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ๋นํธ๋งต ํ์ผ์์ ํฝ์ ์ ๋ณด๋ฅผ ์ฝ์ผ๋ ค๋ฉด ๋จผ์ ๋นํธ๋งต ํ์ผ์ ๊ตฌ์กฐ๋ฅผ ์์์ผ ํฉ๋๋ค.
dojang.io
bmp ํ์ผ์ ์ด๋ป๊ฒ ์ฌ์ฉํด์ผ ํ ์ง ์์๋ณด๋ ๋์ค bmp ํ์ผ์ ๊ทธ ์ ํด์ง ํ์์ด ์๋ค๊ณ ํ์ฌ ์ฝ๋ฉ ๋์ฅ์ ๋ฐํ์ผ๋ก
๊ทธ ํ์๋๋ก ์ ์์ฑ์ ์งํํ์์ต๋๋ค.
int fd;
fd = open("cub3d_save.bmp", O_RDWR);
์์ ๊ฐ์ ํ์์ผ๋ก ํ์ผ์ ์ด์ด์ฃผ๊ณ ,
//
2 bf type (BM)
4 bf size
2 + 2 bfReserved
4 start dir
4 header byte : (40).
4 screen_X
4 screen_Y
4 color num (1)
4 bpp (biBitCount)
4 * 6
n arr
//
write(fd, buf, byte);
์ด์ ๊ฐ์ ํ์์ผ๋ก bmp ํ์ผ์ ์์ฑ์ ์งํํ์์ต๋๋ค.
์ํ๋ ๋ชฉํ๋ ์์ ๊ฐ์ ์ด๋ฏธ์ง๋ฅผ bmp ํ์ผ์ ์ ์ฅํ๋ ๊ฒ์ ๋ชฉํ๋ก ํ๊ณ ์์๋๋ฐ.
byte๊ฐ์ด ์๋ชป๋ ๊ฒ์ธ์ง ์ํ๋ ๋๋ก bmp ํ์ผ์ ์ ํ์ง ์์ ๊ฒ์ ๋ณผ ์ ์์๋ค.
[ 2021.02.01 ]
1. --save ์ด์ด์ ์งํํด๋ณด๊ธฐ.
[ 1. --save ์ด์ด์ ์งํํด๋ณด๊ธฐ. ]
์ค๋ ์๊ฐ ๋์ ์ฝ์ง์ ์งํํด๋ ๋ชจ๋ฅด๊ฒ ์ด์ ๋ค๋ฅธ ์นด๋๋ถ์๊ฒ ๋์์ ๋ฐ์์ ํด๊ฒฐ์ ํ๊ฒ ๋์์ต๋๋ค.
๋ฌธ์ ๊ฐ ์๊ฒผ์๋ ์ด์ ๋ cub3d๋ผ๋ ํ๋ก์ ํธ๋ฅผ ์งํํ ๋์๋ <mlx.h>๋ผ๋ ํค๋๋ฅผ ์ฌ์ฉํด์ผ ๊ณผ์ ๋ฅผ ์งํํ ์ ์์์ต๋๋ค.
๊ทธ ํค๋๋ 42 subject์์ ๋ฐ์ ์๊ฐ ์๋๋ฐ. ๊ตฌ๋ฒ์ ์ธ opengl๊ณผ mms์ ์ฐจ์ด๋ก ์ค๋ฅ๊ฐ ์์๋ ๊ฒ์ ์ฐพ์ ์ ์์์ต๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก bmp ํ์ผ์ ์์ฑํ๋ ๋ฐฉ์์ bpp (biBitCount)์ ๋ง์ถฐ์ ์๋ง์ ๊ฐ์ ํ ๋นํ๊ณ ,
ํ ๋นํ ๊ฐ์ ๋ง๊ฒ ํฝ์ ์ ์ฐ์ ๊ฒ์ผ๋ก bmp ํ์ผ์ ์ฌ์ฉํ ์๊ฐ ์์ต๋๋ค.
bbp(biBitCount) = 32
950 x 600
(screen_X) * bpp / 8 = 3800
950 x 32 / 8 = 3800
mms : mlx_get_data_addr \ size_line = 3840
opengl : mlx_get_data_addr \ size_line = 3800
bbp(biBitCount)์ด 32bit์ด๊ณ 950 x 600์ด๋ผ๊ณ ํ๋ ํ๋ฉด์ ์ถ๋ ฅํ๋ ค๊ณ ํ ๋ ์ ๋ 3800์ด๋ผ๋ ๊ฐ์ ์ํ๊ณ ์์๋๋ฐ.
mms : mlx_get_data_addr ํจ์์์์ size_line์ 3840์ด๋ผ๋ ๊ฐ์ ๋ฐํํ๋๋ผ๋ผ๊ณ ์.
๊ทธ๋์ ํ ์ค ๋นํธ์์ ๋ง๋ ๊ฐ์ด ํ ๋น์ด ๋์ง ์์ bmp ํ์ผ์ ๊ฐ์ด ์ ๋๋ก ๋์ค์ง ์๋ ๋ชจ์ต์ด ํ์ธํ ์ ์์์ต๋๋ค.
๊ทธ๋์ ์ ๊ฐ ์ํ๋ ๊ฐ๋ก์ ๋นํธ์๋ฅผ ๊ตฌํ๊ธฐ ์ํด์ ๋ณ์๋ฅผ ์๋กญ๊ฒ ๋ง๋ค์ด์ ์ฌ์ฉ์ ํ๋ bmp ํ์ผ์ ์ํ๋ ๋๋ก
๋ชจ์ต์ด ์ฐํ๋ ๊ฒ์ ํ์ธํ ์ ์์์ต๋๋ค.
[ 2021.02.03 ]
1. key a, d ํด๊ฒฐํ๊ธฐ.
[ 1. key a, d ํด๊ฒฐํ๊ธฐ. ]
key_A or key_D ๋ผ๋ ๊ฐ์ด ๋ค์ด์ค๊ฒ ๋๋ฉด ํ๋ ์ด์ด๊ฐ ๋ฐ๋ผ๋ณด๊ณ ์๋ ๋ฐฉํฅ์ ๊ธฐ์ค์ผ๋ก ์์ ์ ๊ณ ์ ํ ์ํ๋ก
์ผ์ชฝ ํน์ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋์ ํด์ผ ํ๋๋ผ๊ณ ์.
์ด๋ป๊ฒ ํด์ผ ํ ๊น ๊ณ ๋ฏผ์ ๋ง์ด ํ์๋๋ฐ, ํด๊ฒฐํ๊ณ ๋ณด๋ ์์ธ๋ก ๋ฐฉ๋ฒ์ ๊ฐ๋จํ๋๋ผ๊ณ ์.
์์ ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ณ ์ ์ด ๋์ด์์ผ๋, ์์ผ์ ๋ฐ๋ฅธ ๋ฐฉํฅ ๊ฐ์ ๊ฑด๋๋ฆด ํ์๊ฐ ์๊ณ ,
ํ๋ ์ด์ด์ ์์น ๊ฐ๋ง ์์ ์ ํด์ฃผ๋ฉด ๋๋๋ฐ.
์ง์ง์ ํ ๋๋ (y) : ํ๋ ์ด์ด ์์น + (y)๋ฐฉํฅ * ์๋, (x) : ํ๋ ์ด์ด ์์น + (x)๋ฐฉํฅ * ์๋๋ก ์ด๋์ํ๊ณ
ํ์ง์ ํ ๋๋ (y) : ํ๋ ์ด์ด ์์น - (y)๋ฐฉํฅ * ์๋,(x) : ํ๋ ์ด์ด ์์น - (x)๋ฐฉํฅ * ์๋๋ก ์ด๋์ ํ๋
A D๋ฅผ ๋๋ฅผ ๋์๋ x๊ฐ๊ณผ y๊ฐ์ ์๋ก ์ฎ์ด์ y๊ฐ + ์ด๋ฉด x๊ฐ - ์ธ ํ์์ผ๋ก ๋ฐ๊พธ๊ณ ,
y๋ฐฉํฅ ๊ฐ์ (x)๋ฐฉํฅ * ์๋ ํ์์ผ๋ก ์์ ๋ฐ๊พธ๋ฉด ์ํ๋ ๋๋ก ์ด๋์ด ๊ฐ๋ฅํ๋๋ผ๊ณ ์.
๊ทธ๋์ ๊ทธ๋ฌํ ํ์์ผ๋ก ๊ฐ์ ๋์ ํ์ฌ
์ผ์ชฝ์ผ๋ก ์ด๋ํ ๋์๋ (y) : ํ๋ ์ด์ด ์์น + (x)๋ฐฉํฅ * ์๋,(x) : ํ๋ ์ด์ด ์์น - (y)๋ฐฉํฅ * ์๋๋ก ๋์ ํ๊ณ
์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋ํ ๋๋ (y) : ํ๋ ์ด์ด ์์น - (x)๋ฐฉํฅ * ์๋,(x) : ํ๋ ์ด์ด ์์น + (y)๋ฐฉํฅ * ์๋๋ก ๋์ ํ๋
์ํ๋ ๋๋ก ๋๋ ๊ฒ์ ํ์ธํ ์ ์์์ต๋๋ค.
[ sprite ํด๊ฒฐํ๊ธฐ. ]
sprite๋ฅผ ์งํํ๊ธฐ ์ ์ ์ด๋ ํ ์กฐ๊ฑด๋ค์ ์๊ฐํด๋ด์ผ ํ๋์ง ์๊ฐ์ ํด๋ดค์์ต๋๋ค.
1. sprite ๋ฌผ์ฒด๋ ํญ์ ํ๋ ์ด์ด๋ฅผ ๋ฐ๋ผ๋ด์ผ ํ๋ค.
2. sprite ๋ฌผ์ฒด๊ฐ 2๊ฐ ์ด์ ๊ฒน์ณ์๋ค๋ฉด ๋ค์ ์๋ ๋ฌผ์ฒด๊ฐ ๊ฐ๋ ค์ ธ์ผ ํ๋ค.
3. ๋ฒฝ์ด ์๋ ๊ฒฝ์ฐ์๋ 2๋ฒ์ ์กฐ๊ฑด์ ์ถฉ์กฑํด์ผ ํ๋ค.
๊ทธ๋์ ์ด๋ป๊ฒ ์คํ๋ผ์ดํธ๋ฅผ ๊ทธ๋ฆด๊น ์๊ฐ์ ํด๋ณด๋ค๊ฐ
1. ๊ทธ๋ฆผ์ ๊ณ์ํด์ ๊ทธ๋ฆฌ๊ณ ์ค๊ฐ์ ์คํ๋ผ์ดํธ๋ฅผ ๊ทธ๋ ค์ผ ํ๋ ํํธ๊ฐ ๋์จ๋ค๋ฉด sprite์ ์๊น ๊ฐ์ ํ ๋๋ก ์ ์ ํ์ ์งํํด์ ๊ทธ๋ฆฐ๋ค.
2. ์ผ๋จ์ ๋ฒฝ์ ๊ทธ๋ฆผ์ ์งํํด์ ๊ทธ๋ฆฌ๊ณ ๋ฎ์ด ์์ฐ๋ ๋ฐฉ์์ผ๋ก ์งํํ์ฌ sprite๋ฅผ ๊ทธ๋ฆฐ๋ค.
์ด๋ ๊ฒ ํฌ๊ฒ 2๊ฐ์ง ๋ฐฉ๋ฒ์ด ๋์์๋๋ฐ.
1๋ฒ ์ ์์ ๊ฒฝ์ฐ์๋ ์ ๋ ๊ทธ๋ ค์ผ ํ๋ ๋ถ๋ถ์ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ๊ตฌ์กฐ์ฒด์ ์ ์ฅํด์ ์ฝ๋์ ๋ง์ง๋ง ๋ถ๋ถ์์ ๊ทธ๋ฆฌ๊ธฐ๋ฅผ ์งํํ์๋๋ฐ.
1๋ฒ์งธ ๋ฐฉ๋ฒ์ผ๋ก ํ๋ ค๋ฉด sprite๊ฐ ๋์ค๋ ์ฝ๋์ ์ค๊ฐ์์ ๊ทธ๋ฆฌ๊ธฐ๋ฅผ ์งํํด์ผ ํด์ ๊ธฐ์กด์ ๋ฐฉ์์ ๊ฐ์์์ด์ผ ํ๋ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ์๊ฐ์ด ๋ค์ด
ํฌ๊ธฐ๋ฅผ ํ๊ฒ ๋์์ต๋๋ค.
2๋ฒ์งธ ๋ฐฉ๋ฒ๋ณด๋ค ์ถ๊ฐ์ ์ผ๋ก ๊ทธ๋ฆฌ๊ธฐ๋ฅผ ์งํํ์ง ์์ผ๋ ํจ์จ์ ์ด๊ธฐ๋ ํ๊ฒ ์ง๋ง ๊ธฐ์กด์ ๋ฐฉ์์ ๊ฐ์์์ด์ผ ํด์ ์ ๊ฒฝ ์ธ ๊ฒ๋ค์ด ๋๋ฌด ๋ง์์ ธ์
์กฐ๊ธ ๋นํจ์จ์ ์ด๊ธฐ๋ ํ์ง๋ง 2๋ฒ์งธ ๋ฐฉ๋ฒ์ ์ ํํ์ฌ ๊ทธ๋ฆฌ๊ฒ ๋์์ต๋๋ค.
๊ทธ๋์ ์ ์ ๋ฐฉ๋ฒ์ ๋ก๋ฐ๋ธ ์จ์ ์ฝ๋๋ฅผ ์ฐธ์กฐํ์ฌ ์งํํ๊ฒ ๋์์ต๋๋ค.
2๋ฒ๊ณผ 3๋ฒ์ ํด๊ฒฐ๋ฐฉ๋ฒ์
๊ธฐ๋ณธ์ ์ผ๋ก sprite์ ์์น ๊ฐ์ ๋ฐฐ์ด์ ์ ์ฅ์ ํ๊ณ , ๊ทธ ๊ฐ๋ค์ ์ ๋ ฌํด์ ํ๋ ์ด์ด์ ์์น๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฉ๋ฆฌ ์๋ sprite๋ค์ด
๋จผ์ ๊ทธ๋ ค์ง๋๋ก ์งํ์ ํ์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด 2๋ฒ ํ๊ณ 3๋ฒ์์ sprite๊ฐ ๊ฒน์น๋ ๊ฒฝ์ฐ๋ ๋ฒฝ์ sprite๊ฐ ์ด๋ ์ ๋ ๊ฐ๋ ค์ง๋ ๊ฒฝ์ฐ๋
๊ฑฐ๋ฆฌ์ ๋ฐ๋ผ์ ๋ฎ์ด ์์์ ธ ๊ทธ๋ ค์ง๋ ํด๊ฒฐํ ์ ์์๊ณ ,
1๋ฒ์ ๊ฒฝ์ฐ์๋
๋ก๋ฐ๋ธ ์จ์ ๋ฐฉ๋ฒ์ ์นด๋ฉ๋ผ ํ๋ ฌ์ด๋ผ๋ ์ํ์ ๊ฐ๋ ์ด ์์ด์ ๊ทธ ๊ฐ๋ ์ ์ฌ์ฉํด์ ํญ์ ์ ๋ฅผ ๋ณด๋๋ก ์ค๊ณํ์์ต๋๋ค.
transform sprite with the inverse camera matrix (sp->inv_det)
[ planeX dirX ] -1 [ dirY -dirX ]
[ ] = 1/(planeX*dirY-dirX*planeY) * [ ]
[ planeY dirY ] [ -planeY planeX ]
1. ํ๋ ์ด์ด์ ์์น๋ฅผ ๊ธฐ์ค์ผ๋ก sprite์ ์์น ๊ฐ์ ์ ์ฅํ๋ค.
2. sprite์ ์์น ๊ฐ์ ๊ฑฐ๋ฆฌ๊ฐ ๋ฉ์๋ก ๋จผ์ ๊ทธ๋ ค์ง๋๋ก ์ค๊ณํ๋ค.
( ์ดํ์ ๊ทธ๋ ค์ง๋ ๊ฐ๋ค์ ๋ฎ์ด์์์ง ์ ์๋๋ก ์ฌ๋ฌ ๋ฒ ๋ฐ๋ณต )
3. ์นด๋ฉ๋ผ ํ๋ ฌ์ ํตํด์ sprite๋ค์ด ํญ์ ํ๋ ์ด์ด๋ฅผ ๋ฐ๋ผ๋ณด๋๋ก ์ค์ ํ๋ค.
์ ์ ์๊ฐ๋๋ก ์ ์ ๊ธ์ด๋ผ ํ๋ฆฐ ๋ถ๋ถ์ด ์์ ์๋ ์์ต๋๋ค.
ํ๋ฆฐ ๋ถ๋ถ์ด ๋ฐ๊ฒฌ๋๋ค๋ฉด ์ฌ์ํ ๋ถ๋ถ๋ค์ด๋ผ๋ ๊ผญ ์๋ ค์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค!