42seoul/projects

[cub3D] ๊ตฌํ˜„ ๊ณผ์ •์„ ์ •๋ฆฌ

moaoh 2020. 12. 1. 18:39

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๋“ค์ด ํ•ญ์ƒ ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๋ฐ”๋ผ๋ณด๋„๋ก ์„ค์ •ํ•œ๋‹ค.

 

 

์ €์˜ ์ƒ๊ฐ๋Œ€๋กœ ์ ์€ ๊ธ€์ด๋ผ ํ‹€๋ฆฐ ๋ถ€๋ถ„์ด ์žˆ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ‹€๋ฆฐ ๋ถ€๋ถ„์ด ๋ฐœ๊ฒฌ๋œ๋‹ค๋ฉด ์‚ฌ์†Œํ•œ ๋ถ€๋ถ„๋“ค์ด๋ผ๋„ ๊ผญ ์•Œ๋ ค์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!