일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- Python
- 카메라
- stereo image
- 42seoul #printf
- 5월종합소득세
- 3d object recognition
- pseudo LiDAR
- intrinsic
- 라이다
- FLIR
- 의사 라이다
- ouster
- 논문리뷰
- 코멘토 후기
- 머신비전
- miniRT
- AOLP
- ft_server
- point grey
- 코멘토
- 객체인식
- 편광카메라
- superresolution
- LIDAR
- 동시취득
- extrinsic
- 삼쩜삼
- 42seoul
- spinnaker
- 직무부트캠프
- Today
- Total
문무겸비
[miniRT] minilibx-linux 튜토리얼 본문
intra에서 기본적으로 제공해주는 minilibx에는 이 파일이 없다.
minilibx-linux docs를 제공해 준 Harm smitt에게 감사를 표하자
실행하는 방법
(은 gwpaeng.tistory.com/249?category=897814 여기를 참고하자)
Hook
int main(void)
{
t_vars vars;
vars.mlx = mlx_init();
vars.win = mlx_new_window(vars.mlx, 640, 480, "Hello world!");
mlx_key_hook(vars.win, key_hook, &vars);
mlx_mouse_hook(vars.win, mouse_win3, &vars);
mlx_loop(vars.mlx);
}
↓
int key_hook(int keycode, t_vars *vars)
{
printf("Hello from key_hook!\t");
printf("keycode = %d\n", keycode);
}
int mlx_key_hook(t_win_list *win,int (*funct)(),void *param)
{
win->hooks[KeyRelease].hook = funct;
win->hooks[KeyRelease].param = param;
win->hooks[KeyRelease].mask = KeyReleaseMask;
}
typedef struct s_event_list
{
int mask;
int (*hook)();
void *param;
} t_event_list;
typedef struct s_win_list
{
Window window;
GC gc;
struct s_win_list *next;
int (*mouse_hook)();
int (*key_hook)();
int (*expose_hook)();
void *mouse_param;
void *key_param;
void *expose_param;
t_event_list hooks[MLX_MAX_EVENT];
} t_win_list;
mlx_key_hook이 key_hook 함수를 t_win_list win->hooks->hook에 넣어준다
mlx_hook은 여러개를 걸 수 있다.
but, key와 관련된 hook은 mlx_key_hook이든 mlx_hook이든 합쳐서 하나밖에 못한다.
아마 마우스도 비슷하게 될거같다.
같은 하드웨어는 같은 mask를 사용해서 하기 때문에 나중에 설정된것만 적용되는듯 한다
일단 기본적으로 minilibx-linux docs를 처음부터 끝까지 잘 따라하면 시작하는 부분, 튜토리얼 마냥 minilibX의 역할을 깨우치기는 쉽다.
솔직히 hook의 동작원리를 잘 모르겠다... 되니까 쓰긴 하는데...
마우스 커서 구현
x자 모양이 실제 커서이고, 마우스커서처럼 보이는건 이미지 파일을 이용해서 구현한 것이다.
설명에는 mlx_png_file_to_image()가 있다고 하는데... 없다 minilibx-linux에만 없는걸지도 모르겠다.
png to xpm converter는 인터넷에 검색하면 웹서비스로 이용가능하니까 문제없다.
t_vars vars;
t_data img;
int mouse_hook(int x,int y, void *p)
{
mlx_clear_window(vars.mlx,vars.win);
mlx_put_image_to_window(vars.mlx, vars.win, img.img, x, y);
printf("Mouse moving in Win3, at %dx%d.\n",x,y);
}
int main(void)
{
char *relative_path = "./test/mouse.xpm";
int img_width;
int img_height;
// printf("%d\n", open("./test/mouse.xpm",O_RDONLY));
vars.mlx = mlx_init();
vars.win = mlx_new_window(vars.mlx,WIN1_SX,WIN1_SY,"Title1");
img.img = mlx_xpm_file_to_image(vars.mlx, relative_path, &img_width, &img_height);
img.addr = mlx_get_data_addr(img.img, &img.bits_per_pixel, &img.line_length, &img.endian);
// mlx_put_image_to_window(vars.mlx, vars.win, img.img, WIN1_SX / 2, WIN1_SY / 2);
if (!img.img)
printf("\nfail\n");
else
printf("\nfind\n");
mlx_hook(vars.win, MotionNotify, PointerMotionMask, mouse_hook, &vars);
// mlx_key_hook(win, key_hook,0);
mlx_loop(vars.mlx);
}
mouse hook을 이용해서, 마우스 커서가 움직일때마다 hook을 발동, 커서 이미지를 커서 위치에다가 그려넣는다 (그전에 그렸던건 삭제!)
'42seoul' 카테고리의 다른 글
[miniRT] 시작하기전 개념정리-추가예정 (0) | 2021.02.24 |
---|---|
[miniRT] Makefile, .configure, 쉡 스크립트 문법 (0) | 2021.02.09 |
[ft_server] Dockerfile, default file 뜯어보기 (0) | 2021.02.03 |
[ft_printf] 만들기 (0) | 2020.12.31 |