miniRT mlx.h 사용해보기.

hekang·2021년 1월 16일
0

miniRT

목록 보기
2/3
post-thumbnail

mlx.h

miniRT & cub3d에서 사용하게 되는 헤더파일이다.
mlx 라이브러리에 대한 번역본은 psj3205의 github에서 확인 할 수 있다.

mlx 기본 화면 만들기

mlx 라이브러리는 소프트웨어와 화면간의 연결을 해주는 라이브러리이다.

#include "mlx.h"
int main()
{
    void	*mlx_ptr;
    void 	*win_ptr;
    int		width;
    int		heignt;
    
    width = 400;
    height = 400;
    mlx_ptr = mlx_init();	//mlx 할당 실패할 경우 NULL반환
    win_ptr = mlx_new_window(mlx_ptr, width, height, "Title"); 
    				// 할당된 mlx에 너비. 높이를 갖는 윈도우 창 생성.
    mlx_loop(mlx_ptr);
}

escape키 입력

위에 작성된 코드로 만든 윈도우는 터미널에서 코드를 종료시켜야 loop를 탈출할 수 있다.
mandatory 파트에 있는 내용 중 하나인 esc키를 이용해서 창을 종료 시켜보자.

mlx 헤더에 있는 기본 함수 중 mlx_hook을 이용하여 esc 키 입력을 확인하고 윈도우를 종료시키는 함수를 작성해봤다.

int	mlx_hook(void *win_ptr, int x_event, int x_mask,
                 int (*funct)(), void *param);

mlx_hook 함수의 인자는 종료할 윈도우 창의 윈도우 첫 주소값이고 두번째 인자의 경우엔 이벤트의 종류인데 x.h에 정의되어있다. x_mask는 mac에서는 사용하지 않고 funct는 키값이 들어왔을때 실행할 함수이며 첫번째 인자로 입력된 Keycode 값이 들어간다. 마지막 param도 사용하지 않는다.

x_event 

인자에 대한 정보는 여기에서 헤더데이터를 열어볼 수 있고 맥에서는 기본적으로 xcode가 설치되어있다면 불러올 수 있다고 하는데 나는 안된다. 웹상에서 x.h를 확인하고 필요한 인자들만 내 헤더파일에 따로 정의해주었다.

# define X_KEY_PRESS 2
# define X_KEY_RELEASE 3

X_KEY_PRESS는 키가 눌렸을때 바로 실행하는 것이고 X_KEY_RELEASE는 눌렀다가 뗄때 실행된다.

함수는 다음과 같이 사용하였으며

mlx_hook(vars.win, X_KEY_PRESS, 0, mlx_key_handle, 0);

여기서 사용한 mlx_key_handle는 다음과 같이 구성되어있다.

int	exit_program(void)
{
	exit(0);
	return (0);
}

int	mlx_key_handle(int keycode)
{
   	printf("keycode : %d\n", keycode);
	if (keycode == 53)
		return (exit_program());
	return (0);
}

지금 함수에 들어있는 printf문을 사용하면 따로 검색하지않아도 esc키값이 무엇인지 알 수 있으며 esc의 키값인 53이 들어왔을때 exit_program을 실행하여 프로그램을 종료시킨다.

profile
hekang in 42Seoul.

0개의 댓글