English Ver. (Korean Ver. is down below, ํ๊ตญ์ด ๋ฒ์ ์ ๋ฐ์ ์์ต๋๋ค.)
0. Intro
On the 42 intra subject page, there are two files minilibx_opengl.tgz and minilibx_mms_20200219_beta.tgz. Let's call them mlx and mlx_beta respectively.
1. Explaning my mlx example.
โ There is Makefile on evey example, and you can compile and run the program by typing make
.
โ (gcc -Lmlx -lmlx -framework OpenGL -framework AppKit
<- Compile option)
-
01first_example: Create a simple window.
-
02key_handling: Receive events on the keyboard.
W: Add 1 to x. S: Subtract 1 from x. ESC: Quit program. Other keys: Show current x value.
-
03img_loading: Draw the loaded xpm file on the window.
-
04img_making: Draw pixels on the window without loading image file.
-
05img_loading_and_modifying: Modify pixels on the window after loading image file.
Example 1 to 5 show basic mlx features while example 6 handles advanced features
-
06map_2d: Make simple two-dimensional map. (Only Esc key and the close key on the top menu close the window. There's no other key interaction.)
2. Explaining major functions and their prototypes.
manual page: go to mlx_beta/man/man3 and type man ./[manual file].3
โ e.g. man ./mlx.3
man ./mlx.3 (Manual command)
void *mlx_init ();
man ./mlx_new_window.3
void *mlx_new_window ( void *mlx_ptr, int size_x, int size_y, char *title );
man ./mlx_loop.3
-
int mlx_loop ( void *mlx_ptr );
- Keeps the program running when included in the last part of the program.
-
int mlx_key_hook ( void *win_ptr, int (*funct_ptr)(), void *param );
-
Handles key inputs.
-
Not used anymore because mlx_hook() function below is better in every circumstance.
-
-
int mlx_loop_hook ( void *mlx_ptr, int (*funct_ptr)(), void *param );
- Keeps the program running even when there are no inputs (keyboard, mouse etc).
- Continuously draws the screen based on the player's current location.
-
int mlx_hook(void *win_ptr, int x_event, int x_mask, int (*funct)(), void *param);
-
Major and powerful function that handles all inputs, but has no manual
-
Can receive key_press, key_release, mouse click, close button click, etc based on the
x_event
value
-
man ./mlx_new_image.3
โ I recommend that you see my image example
void *mlx_new_image ( void *mlx_ptr, int width, int height );
char *mlx_get_data_addr ( void *img_ptr, int *bits_per_pixel, int *size_line, int *endian );
int mlx_put_image_to_window ( void *mlx_ptr, void *win_ptr, void *img_ptr, int x, int y );
void* mlx_xpm_file_to_image ( void *mlx_ptr, char *filename, int *width, int *height );
3. Reference Sites
Course
-
Hard
- Learn basic mlx features through my examples or
referece #1
andreference #2
. - Understand raycasting through
reference #3
andreference #4
- Code yourself with the help of the code in
reference #5
- Learn basic mlx features through my examples or
-
Normal
- Understand raycasting through
reference #3
- Learn mlx features through my examples
- Code yourself with the help of the code in
reference #5
(copy paste is one of the coding methods)
- Understand raycasting through
-
Easy
- Learn mlx features through my examples
- Code yourself with the help of the code in
reference #5
(copy paste is one of the coding methods)
Reference
-
Collection of mlx information && ft_libgfx tutorial
-
Contains most of the mlx information, but no easy to understand
-
Recommended to learn little by little
-
-
- Basic mlx features for beginners
- Add up to only 20~30 lines of codes in total
- My examples and
reference #1
already contain this information
-
Raycasting Basics with JavaScript
- Explains raycasting in a less mathematical way
- Basic mathematical concepts such as
sin
andcos
are explained - However, uses non-mlx graphic libraries to draw figures (no mlx explanations)
- Need to refer to
reference #4
because does not explain how to handle textures
-
Raycasting explained(Lode's Computer Graphics Tutorial)
-
Need to understand most of this reference to understand cub3d
-
A challenging tutorial that made me want to give up, but I had to come back to this because the code I referred to was based on this tutorial
-
-
The code I referred to (42-cub3d-glagan)
- Cub3d repository with the most stars
- Concise and well structured
- Based on
reference #4
- But need to modify some parts (macro function usage, --save option, unable to receive nonsquare maps, etc)
-
mlx image tutorials(images_example-keuhdall)
- Recommended before handling images
- Easy to understand
- But does not provide information on how to load images
Other references
-
key , mouse handling, etc (Both contain the same information)
-
stack overflow 42 community - several inputs (keyboard, mouse, etc) : Need 42 intra id
-
key handle related github - Source of this reference seems to be the one above
-
-
Keyboard code numbers
4. Some tips
-
Two compressed files
mlx
andmlx_beta
are given with the subject andmlx_beta
seems to be more recent. However, I only usedmlx
-
However,
mlx
does not have a manual page so I referred tomlx_beta
's manual page -
mlx
's image files usexpm
extensions butmlx_beta
seem to handlepng
files as well -
mlx_pixel_put
andmlx_put_image_to_window
have almost the same features-
mlx_put_image_to_window
collect image information before drawing them at once -
mlx_pixel_put
seems slower because it draws dots right away -
Better to collect pixel information and draw them at once with
mlx_put_iamge_to_window
- Experienced delay when used it twice
-
-
Need to know DDA Algorithm when drawing pixels to form a line
reference #1
introduces other algorithms as well andreference #3
does not use DDA Algorithm- However, essential to understand raycasting explained in
reference #4
andreference #5
-
Can convert image files to
xpm
in the following site https://convertio.co/kr/png-xpm/ -
Need to solve norm erros derived from
reference #5
's macro functions (Forbidden to use macro functions that use parameters)
Korean Ver.
์์ ์ฌํญ
- Lodev raycasting ๋ฒ์ญ ๋ธ๋ก๊ทธ ์ถ๊ฐ - 20.05.30
- 06map_2d ์์ ์ถ๊ฐ - 20.05.30
- ์คํ ์์ (ykoh๋ ์ ๋ณด) - 20.10.18
- Iwoo๋ ๋งต ํ ์คํฐ ์ถ๊ฐ - 20.10.18
0. ๋ค์ด๊ฐ๊ธฐ์ ์์
-
cub3D ์๋ธ์ ํธ ํ์ด์ง์ ์ฒจ๋ถ๋ ์์ถํ์ผ minilibx_opengl.tgz๊ณผ minilibx_mms_20200219_beta.tgz 2๊ฐ๊ฐ ์๋๋ฐ ์ ์๋ฅผ mlx, ํ์๋ฅผ mlx_beta๋ก ์ง์นญํ๊ฒ ์ต๋๋ค.
-
์ ๊ฐ ๋ณด๋ ค๊ณ ์จ๋์ ์๋ธ์ ํธ ๋ฒ์ญ๋ณธ์ธ๋ฐ ๋ถ์กฑํ์ง๋ง ํ์ํ์๋ฉด ์ฌ์ฉํ์๊ธฐ ๋ฐ๋๋๋ค.
์ ๋ง ๋ณด๋ ค๊ณ ๋์ถฉ ์จ๋์์ ํ์ ํ ์ ์์ต๋๋ค. ์๋ธ์ ํธ ๋ฒ์ญ๋ณธ
1. ์์ ์ค๋ช
โ ๋ชจ๋ ์ฝ๋๋ง๋ค Makefile์ด ์๊ณ make
๋ฅผ ์น์๋ฉด ์ปดํ์ผ ๋ฐ ์คํ์ด ๋ฉ๋๋ค.
โ (gcc -Lmlx -lmlx -framework OpenGL -framework AppKit
<- ์ปดํ์ผ ์ต์
)
-
01first_example: mlx๋ก ์ฐฝ๋์ฐ๋ ๊ฐ๋จ์์
-
02key_handling: ํค๋ฅผ ์ ๋ ฅ๋ฐ๊ณ ๋์์ ์ํํฉ๋๋ค.
W: x ๋ณ์์ 1์ ๋ํจ S: x ๋ณ์์์ 1์ ๋บ ESC: ํ๋ก๊ทธ๋จ ์ข ๋ฃ ๋ค๋ฅธํค: ํ์ฌ x๊ฐ ์ถ๋ ฅ
-
03img_loading: xpmํ์ผ์ ๋ถ๋ฌ์์ ํ๋ฉด์ ๊ทธ๋ ค ์ฐฝ์ ๋์๋๋ค.
-
04img_making: ํ์ผ์ด ์๋ ์ง์ ํฝ์ ์ ์ ์ ์ฐ์ด์ ๊ทธ๋ฆผ์ ๊ทธ๋ ค ์ฐฝ์ ๋์๋๋ค.
-
05img_loading_and_modifying: ํ์ผ์ ๋ถ๋ฌ์จ ๋ค ๊ทธ ์์ ํฝ์ ์ ์ฐ์ด์ ์ฐฝ์ ๋์๋๋ค.
05๋ฒ๊น์ง๋ mlx์ ๊ธฐ๋ณธ ๊ธฐ๋ฅ์ ๋๋ถ๋ถ ์ดํด๋ณด์๊ณ ์ดํ๋ ์์ฉ์์ ์ ๋๋ค.
-
06map_2d: ๊ฐ๋จํ 2d๋งต์ ๋ง๋ญ๋๋ค. (escํค, ์ฐฝ๋ซ๊ธฐ๋ฒํผ์ผ๋ก ์ข ๋ฃ๊ฐ๋ฅ, ๊ทธ ์ด์ธ์ interaction ์์)
2. ์ฃผ์ ํจ์ prototype ๋ฐ ์ค๋ช
mlx_beta/man/man3ํด๋ ๋ค์ด๊ฐ์ ์ ๊ฐ์กฐ๋ ์ ๋ชฉ์ผ๋ก ๋ช ๋ น์ด ์น์๋ฉด ๋ฉ๋ด์ผ ํ์ด์ง ๋ณผ ์ ์์ต๋๋ค.
man ./mlx.3
void *mlx_init ();
man ./mlx_new_window.3
void *mlx_new_window ( void *mlx_ptr, int size_x, int size_y, char *title );
man ./mlx_loop.3
-
int mlx_loop ( void *mlx_ptr );
๋ง์ง๋ง์ ์ด๊ฑธ ์ณ์ค์ผ ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃํ์ง ์๊ณ ๊ณ์ ๋์๊ฐ๋๋ค.
-
int mlx_key_hook ( void *win_ptr, int (*funct_ptr)(), void *param );
ํค๋ณด๋์ ํค๋ค์ ์ ๋ ฅ๋ฐ๋ ํจ์์ด์ง๋ง ์์๋๋ค.
์ด์ ๋ ๋ฐ์ mlx_hook()๊ฐ ๋ ์ข๊ธฐ ๋๋ฌธ์
-
int mlx_loop_hook ( void *mlx_ptr, int (*funct_ptr)(), void *param );
์๋ฌด ์ ๋ ฅ์ด ์์๋ ๊ณ์ loop๋ฅผ ๋๋ฆฌ๋ ํจ์. ์ด ํจ์๋ฅผ ์ด์ฉํด ํ์ฌ ์์น ์ ๋ณด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉด์ ๋งค๋ฒ ์๋ก ๊ทธ๋ฆฌ๋ฉด ๋ฉ๋๋ค.
-
int mlx_hook(void *win_ptr, int x_event, int x_mask, int (*funct)(), void *param);
๊ผญ ํ์ํ ํจ์๊ณ ๊ฐ๋ ฅํ ํจ์์ธ๋ฐ ํน์ดํ๊ฒ man์ ์์ต๋๋ค. ๋ชจ๋ ์ ๋ ฅ์ ์ฒ๋ฆฌํ๋ ํจ์ x_event๊ฐ์ ๋ฐ๋ผ key_press, key_release, mouseํด๋ฆญ, ์ฐฝ๋ซ๊ธฐ๋ฒํผ ๋ฑ ์ ๋ ฅ์ ๋ฐ์ ์ ์์
man ./mlx_new_image.3
โ ์ฌ๊ธฐ๋ ์ ์ด๋ฏธ์ง ์์ ๋ฅผ ํ๋ฒ ๋ณด์๋ ๊ฒ์ ์ถ์ฒ๋๋ฆฝ๋๋ค.
void *mlx_new_image ( void *mlx_ptr, int width, int height );
char *mlx_get_data_addr ( void *img_ptr, int *bits_per_pixel, int *size_line, int *endian );
int mlx_put_image_to_window ( void *mlx_ptr, void *win_ptr, void *img_ptr, int x, int y );
void* mlx_xpm_file_to_image ( void *mlx_ptr, char *filename, int *width, int *height );
3. ์ฐธ๊ณ ์ฌ์ดํธ
- ์ฝ์ค
- Hard: ์ ๊ฐ ๋ง๋ ์์ ๋ 1,2๋ฒ์ผ๋ก mlx ๊ฐ์ ์ก๊ณ 3,4๋ฒ์ ํตํด raycasting์ ์ดํดํ๋ฉด์ 5๋ฒ ์ฝ๋๋ฅผ ์ฐธ๊ณ ํด์ ์์ฑํ๊ธฐ
- Normal: 3๋ฒ ์ฌ์ดํธ๋ก raycasting ๊ฐ๋ ์ ์ดํด ํ๋ค ์ ๊ฐ ๋ง๋ ์์ ๋ก mlx๋ฅผ ํ์ ํ๊ณ 5๋ฒ ๊นํ์ ์ฐธ๊ณ ํด์ ์ ์ถํ๊ธฐ. (์ฐธ๊ณ ๋ผ๊ณ ์ฐ๊ณ ํ์ฌ๋ผ๊ณ ์ฝ๋๋ค.)
- Easy: ์ ๊ฐ ๋ง๋ ์์ ๋ก mlxํ์ ํ 5๋ฒ ์ฝ๋ ์ฐธ๊ณ ํด์ ์ ์ถํ๊ธฐ. (์ฐธ๊ณ ๋ผ๊ณ ์ฐ๊ณ ํ์ฌ๋ผ๊ณ ์ฝ๋๋ค.)
-
mlx๊ด๋ จ ์๋ฃ ๋ชจ์์ง, ํํ ๋ฆฌ์ผft_libgfx
mlx์ ๋ํ ์ ๋ณด๊ฐ ์ ์ฒด์ ์ผ๋ก ๋ด๊ฒจ์์ง๋ง ์ฒ์ ๋ณด๊ธฐ ์ฝ์ง์์ต๋๋ค.
ํ๋ฒ์ ๋ค ํ์ ํ์ง ๋ง๊ณ ํ์ํ ๋งํผ์ฉ ํ์ ํ์๋ ๊ฑธ ์ถ์ฒ๋๋ฆฝ๋๋ค.
-
์ฒ์์ mlx๋ฅผ ์ด๋ป๊ฒ ๋ค๋ค์ผ ํ๋์ง ์์๋ง ์๋ ค์ค๋๋ค.(์์ฃผ ๊ธฐ๋ณธ)
์ฌ์ค ์์ฝํ๋ฉด ์ฝ๋ 20~30์ค ์ ๋๋ฐ์ ์๋๊ณ ๊ทธ ์ฝ๋๊ฐ 1๋ฒ์ฌ์ดํธ๋ ์ ์์ ์ ์ ํ์์ด์ ์๋ด๋ ๋ฌด๋ฐฉํฉ๋๋ค.
-
Raycasting Basics with JavaScript
์ํ์ ์ธ ๊ฐ๋ ์ ๋ชจ๋ฅด๊ณ raycasting์ ์ดํดํ ์ ์๊ฒ ์ค๋ช ํด์ค๋๋ค.
sin, cos์ด ์ฐ์ด๋๋ฐ ๊ฐ๋ ๋ถํฐ ์ฐจ๊ทผ์ฐจ๊ทผํ ์ค๋ช ํด์ค๋๋ค.
๋ค๋ง ์๋ฐ์คํฌ๋ฆฝํธ์์ ์ฐ๋ ๊ทธ๋ํฝ ํจ์๊ฐ mlx์ ๋ฌ๋ผ์ ์ง์ ๊ตฌํํด์ผํฉ๋๋ค.(์ง์ , ์ฌ๊ฐํ, ์ ๊ทธ๋ฆฌ๊ธฐ ๋ฑ)
๊ทธ๋ฆฌ๊ณ texture๋ฅผ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ์ ์์ฐ์ฌ์๊ณ ๋ฐ์ 4,5๋ฒ ์ฌ์ดํธ์ ๋ฐฉ์์ด ๋ฌ๋ผ์ ์ด์ฉ์ ์์ด 4๋ฒ ์ฌ์ดํธ์ ์ค๋ช ์ ๋ด์ผํฉ๋๋ค.
-
Raycasting explained(Lode's Computer Graphics Tutorial)
- ์ ์ฌ์ดํธ์ ๋ฒ์ญ ๊นํ (365kim)
- ๊ธฐ์กด์๋ ์๊ธ์ ๋ฒ์ญํ ๋ธ๋ก๊ทธ๊ฐ ์์๋๋ฐ ๊ทธ ๋ฒ์ญ๋ณด๋ค ํจ์ฌ ์์ฐ์ค๋ฝ๊ณ ์ฝ๊ธฐ ์ฝ๊ฒ ๋ฒ์ญ๋์ด ์์ต๋๋ค.
- ๋ํ mdํ์ผ๋ก ์๋ฌธ๋ณด๋ค ํจ์ฌ ์ฝ๊ธฐ ๊น๋ํ๊ฒ ์ ๋ฆฌ๋์ด ์์ด์ ์ถ์ฒ๋๋ฆฝ๋๋ค!!
cub3d๋ฅผ ์ดํดํ๋ ค๋ฉด 4๋ฒ์ ๊ฑฐ์ ์ ๋ถ ์ดํดํด์ผํฉ๋๋ค.
์ธ๋ฉดํ๊ณ ์ถ์ ์๊ฐ์ด ํ๋๋ฒ์ด ์๋์์ง๋ง ์ ๊ฐ ์ฐธ๊ณ ํ ์ฝ๋๊ฐ ์ด ๊ฐ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๊ณ ์์ด์
๋งํ๋๋ง๋ค ์ด ์ฌ์ดํธ๋ฅผ ๋ถ์ก๊ณ ์์์ต๋๋ค.
- ์ ์ฌ์ดํธ์ ๋ฒ์ญ ๊นํ (365kim)
-
์ ๊ฐ ์ฐธ๊ณ ํ cub3d github(42-cub3d-glagan)
์ ๊ฐ ์ฐธ๊ณ ํ ๊นํ ์ฝ๋์ ๋๋ค. (github์์ cub3d๋ก ๊ฒ์ํ์ ๋ star์ ์ผ ๋ง์)
์ฝ๋๊ฐ ์๋นํ ๊น๋ํ๊ฒ ์ง์ฌ์ ธ์๊ณ 4๋ฒ์ ์ค๋ช ์ ๊ธฐ๋ฐ์ผ๋ก ํ๊ณ ์์ด์ 4๋ฒ์ ์ดํดํ๋ฉด์ ๋ณด๊ธฐ ์ข์ต๋๋ค.
๋ค๋ง ์์ ํด์ผํ ๋ถ๋ถ๋ค์ด ๋ช๊ตฐ๋ฐ ์กด์ฌํฉ๋๋ค.(macro ํจ์ ์ฌ์ฉ๋ถ๋ถ, --save์ต์ , ์ ์ฌ๊ฐํ์ด ์๋ ๋งต ๋ฑ)
-
mlx ์ด๋ฏธ์ง ๊ด๋ จ ํํ ๋ฆฌ์ผ(images_example-keuhdall)
์ด๋ฏธ์ง๋ฅผ ๋ค๋ฃจ๊ธฐ์ ์ ํ๋ฒ ํด๋ณด๋ฉด ์ข์ ๊นํ์ ๋๋ค.
์ค๋ช ์ด ์ ๋์ด ์์ต๋๋ค.
๋ค๋ง ์ด๋ฏธ์ง๋ฅผ ๋ง๋๋๋ฒ์ ์์ง๋ง ๋ก๋ฉํ๋ ๋ฒ์ด ์์๋ ๊ฒ์ผ๋ก ๊ธฐ์ตํฉ๋๋ค.
-
Cub3D Map Tester(42 Cadet Iwoo๋๊ป์ ์ ์)
์ ํจํ ๋งต์ธ์ง ๊ฒ์ฌํด์ฃผ๋ ํ๋ก๊ทธ๋จ์ด๋ผ๊ณ ํฉ๋๋ค!
๊ธฐํ ์ฐธ๊ณ ์ฌ์ดํธ
-
key , mouse handling๊ด๋ จ(๋์ด ๊ฐ์ ๋ด์ฉ)
-
stack overflow 42 ์ปค๋ฎค๋ํฐ-์ฌ๋ฌ ์ธํ(ํค๋ณด๋, ๋ง์ฐ์ค ๋ฑ) ๊ด๋ จ : 42์์ด๋๋ก ๊ณ์ ์ฐ๋ ํ์
-
key handle ๊ด๋ จ ๊นํ - ์๊ธ์ ์ถ์ฒ๊ฐ ์ฌ๊ธฐ์ธ๋ฏ?
-
-
ํค๋ณด๋์ ์ฝ๋๋ฒํธ๋ฅผ ์ ๋ฆฌํด๋์ ์๋ฃ
4. ์ฝ๊ฐ์ ํ
-
์๋ธ์ ํธ ๋ฐ์ ๋ mlx์ mlx_beta ๋ ์์ถํ์ผ์ ์ฃผ๋๋ฐ beta๊ฐ ๊ฐ์ ๋ฒ์ ์ธ๋ฏ ํ๋ฐ ์ ๋ mlx๋ก๋ง ์ฌ์ฉํ์ต๋๋ค.
๋ค๋ง mlx์๋ manํ์ด์ง๊ฐ ์์ด์ mlx_beta์ manํ์ด์ง๋ฅผ ์ฐธ๊ณ ํ์ต๋๋ค.
mlx๋ ์ด๋ฏธ์งํ์ผ์ด xpmํ์ฅ์๋ฅผ ์ฌ์ฉํด์ผํ๋๋ฐ mlx_beta๋ png๋ ๊ฐ๋ฅํ๋ฏํฉ๋๋ค.
-
mlx_pixel_put๊ณผ mlx_put_image_to_window๋ ๊ฑฐ์ ๊ฐ์ ๊ธฐ๋ฅ์ ํฉ๋๋ค๋ง mlx_put_image_to_window๋ ์ด๋ฏธ์ง ์ ๋ณด๋ฅผ ๋ชจ์๋ค๊ฐ ํ๋ฒ์ ๊ทธ๋ฆฌ๊ณ , mlx_pixel_put์ ๋งค๋ฒ ์ ์ ๊ทธ๋ ค์ ์๋๊ฐ ๋๋ฆฐ๊ฒ ๊ฐ์ต๋๋ค.
๋ฐ๋ผ์ mlx_put_image_to_window๋ ํ๋ฉด์ ๋ชจ๋ pixel์ ๋ณด๋ฅผ ๋ชจ์๋ค๊ฐ ํ๋ฒ์ ๊ทธ๋ฆฌ๋๊ฒ ์ข์ต๋๋ค. (์ด ์ด์ ๋๋ฌธ์ธ์ง ํ์ค์น ์์ง๋ง, ๋๋ฒ๋ง ์จ๋ ์๋๊ฐ ๋๋ ค์ง๋๊ฒ์ ๋๊ผ์ต๋๋ค)
-
๋ํธ์ ์ ์ ๊ทธ๋ฆด ๋ DDA Algorithm์ ์์์ผ ํฉ๋๋ค. ์์ 1๋ฒ์ฌ์ดํธ์์ ๋ค๋ฅธ ์๊ณ ๋ฆฌ์ฆ๋ ์๊ฐ๋๊ธด ํ๋๋ฐ ์์ 4,5๋ฒ ์ฌ์ดํธ์์ raycasting์ ์ดํดํ ๋ ๊ผญ ํ์ํฉ๋๋ค. 3๋ฒ ์ฌ์ดํธ์์๋ ํ์ํ์ง ์์๋ ๊ฒ ๊ฐ์ต๋๋ค.
-
์๋ ์ฌ์ดํธ์์ ๊ฐ์ข ์ด๋ฏธ์ง ํ์ผ์ xpm์ผ๋ก ๋ณํ ํ ์ ์์ต๋๋ค. https://convertio.co/kr/png-xpm/
-
์์ glagan github์ ์ฝ๋์ค macroํจ์๋ ํ์ฌ norm ์๋ฌ๊ฐ ๋ ์ ํด๊ฒฐํด ์ฃผ์ด์ผํฉ๋๋ค. (ํ๋ผ๋ฏธํฐ๋ฅผ ์ฌ์ฉํ๋ ๋งคํฌ๋ก ํจ์ ๊ธ์ง)
-
sprite๊ฐ ๋ฒฝ๊ณผ ํฉ์ณ์ง๋ ์ค๋ฅ๋ฐ์์ ํ์ ๋๋ค.(42 Iwoo๋ ์ ๋ณด)
์ถฉ๋ถํ ๊ณ ๋ฏผํ์ จ์ผ๋ฉด ์ฐธ๊ณ ํด๋ณด์ธ์.
[Raycasting explained(Lode's Computer Graphics Tutorial)](https://lodev.org/cgtutor/raycasting.html)๋ฅผ ์ฐธ๊ณ ํ์ฌ ์ฑ์คํ ์ฝ๋๋ฅผ ์์ฑํ์
จ๋์? :)
์ด ๊ฒฝ์ฐ! ๋งต ๊ฒฉ์๊ฐ ์๋์ ๊ฐ์ ๋
11111
11211
10N01
10001
11111
์๋ ์ด๋ฏธ์ง์ฒ๋ผ ๋ณด์ด๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
![sprite_pos_error](https://user-images.githubusercontent.com/54612343/83328284-e5224080-a2bc-11ea-8756-8f5d4b23c105.JPG)
**์ด๋ sprite์ ์์น์ขํ๊ฐ ๋งต๊ฒฉ์์ ๋ชจ์๋ฆฌ์ ํด๋นํ๋ ์ ์๊ฐ์ผ๋ก ์ค์ ๋์ด์ ์๊ธฐ๋ ๋ฌธ์ ์
๋๋ค.**
sprite[i].x์ sprite[i].y์ ๊ฐ์ 0.5์ฉ ์ถ๊ฐํ์ฌ sprite์ ์์น๊ฐ ๋งต๊ฒฉ์์ ์ค์์ ์ค๋๋ก ์ค์ ํด๋ณด์ธ์ :)
๋ง์ฐฌ๊ฐ์ง๋ก player์ ์ด๊ธฐ position๋ ๊ฐ์ ํด๋ณด์๋๊ฑธ ์ถ์ฒ๋๋ฆฝ๋๋ค.