Cub3d Chapter1 : Minilibx 사용법

CEO님·2021년 3월 14일
0

42seoul cub3D

목록 보기
2/2

이번 mlx 사용법은 제가 코딩에서 사용한 mlx함수들 위주로 정리 할 것입니다.
mlx함수에 대해 더 알고싶으시다면 yeosong님의 git을 참고해주세요.

1. 시작

(1) mlx_init()

void *mlx_init()

  • mlx함수들을 사용하기에 앞서 반드시 필요한 함수.
  • 디스플레이와 내 소프트웨어를 연결시켜준다.
  • 연결 실패 시 NULL을 return한다.
    test_mlx

(2) mlx_new_window(void mlx_ptr, int size_x, int size_y, char title)

void *mlx_new_window(void mlx_ptr, int size_x, int size_y, char *title)

  • 스크린에 새 창을 띄운다.
  • mlx_ptr : 위 이미지에서 사용된 mlx_init()의 값이 들어있는 void *mlx를 사용하면 된다.
  • size_x, size_y : 스크린의 사이즈.
  • char *title : 스크린 이름.
  • 창 생성 실패 시 NULL을 return 한다.
    test_mlx
    위의 코드를 실행시키면 아래와 같은 창이 뜬다.
    test_mlx

2. 이벤트 관리

(1) mlx_loop()

int mlx_loop(void *mlx_ptr)

  • 무한루프를 돌며 키보드나 마우스에서 받는 이벤트를 기다리는 함수이다.
    만약 이 함수가 없다면 위의 코드를 실행시켰을때 검은 화면이 뜨지 않고 바로 꺼지는 것을 알 수 있다.
  • 이 함수는 리턴값이 없다.

(2) mlx_loop_hook()

int mlx_loop_hook(void *mlx_ptr, int (*func)(), void *param)

  • 아무 이벤트도 발생하지 않을 시 전달된 함수를 실행한다.
  • (*func) 원하는 함수 포인터
  • 함수로 넘겨줄 변수

(3) mlx_hook()

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

  • 사용자 정의 핸들러
  • x_event : press_key, release, exit(x버튼 클릭)등 원하는 이벤트 설정 가능
  • x_mask : 0
  • (*funct) : 원하는 기능의 함수 포인터
  • *param : 함수로 넘겨줄 변수
    test_mlx
    mlx_hook을 통해 키보드나 마우스로 입력을 받는다.
    test_mlx
    mlx_loop_hook으로 main_loop 함수를 실행시킨다.

3. 이미지 만들기, 이미지 조작하기

이미지 만들기

(1) mlx_new_image()

void *mlx_new_image(void *mlx, int width, int height)

  • width * height 사이즈의 빈 이미지 생성 및 이미지 포인터를 반환한다.
  • image 정보 수정은 mlx_get_data_addr 함수를 통해 가능하다.
  • 오류 발생 시 NULL포인터를 반환한다.

(2) mlx_get_data_addr()

char *mlx_get_data_addr(void *img, int *bpp, int *size_line, int *endian)

  • img 포인터와 int형 포인터를 넘겨주면 char형 배열의 주소로 변환
  • bpp(bits_per_pixel) : 한 픽셀을 표현하는데 필요한 비트 수
  • size_line : 이미지의 width를 표현하는데 필요한 비트 수
  • endian : 리틀 엔디언이면 0, 빅 엔디언이면 1
  • 해당 배열에 들어가서 이미지 정보 수정 가능
  • bpp, size_line, endian은 함수에 인자로 넘겨주기만 하면 된다.

(3) mlx_put_image_to_window()

int mlx_put_image_to_window(void * mlx, void *win, void *img, int x, int y)

  • win에 해당하는 창에서 좌표(x, y)부터 (x + 이미지의 width, y + 이미지의 height)만큼 이미지를 그린다.

하얀색 이미지를 출력하기 위한 코드

test_mlx

  • 출력 결과
    test_mlx
  • 정리한 부분
    test_mlx

(4) mlx_xpm_file_to_image()

void *mlx_xpm_file_to_image(void *mlx, char *filename, int *width, int *height)

  • filename과 int형 변수의 주솟값을 넘겨주면 xpm파일을 이미지 형태로 변환후 이미지 포인터를 반환한다.
  • 이미지 정보 수정은 mlx_get_data_addr() 함수로 가능하다.
    test_mlx
  • 이 함수를 이용하면
    test_mlx
    기둥 이미지도 출력하고
    test_mlx
    슬라임도 출력이 가능하다.

이상 mlx함수 사용법이였습니다!

참고자료

yeosong님의 git
구름코딩 님의 velog

profile
나는 최고의 IT 회사를 세울 사람이다.

1개의 댓글

comment-user-thumbnail
2021년 4월 1일

너무 멋있어용

답글 달기