# mlx

34개의 포스트

42: so_long 메모장

flow 메인 인자 파싱 arc가 2가 아니라면 에러뜨게(3이상이면 다음 맵 넘어가게 할까?) -> bonus arc가 6이상이라면 맵이 너무 많으니 에러뜨게 -> bonus perror, strerror 공부. -> 에러 메세지(매크로) 문자열을 받고, void 리턴 하는 error함수를 만들어서 각 에러 메세지 매크로 체크해보고 exit(1) 호출해서 프로세스 끝내기. 필요하다면 free 해주는 flag 넣어주자. error()와 free_error()로 나누자. 맵 파일 gnl로 char ** 형으로 데이터 가져오기 (후에 편하게 다루기위해 2차원으로 가져오기) gnl에서 맵 전체 불러오고 체크 or 라인마다 갖고와서 체크 (직사각형인지 값 가져오면서 체크 가능.) 라인마다 갖고오니 코드가 복잡해짐 ..어차피 체크 나중에 하면되니 한번에 불러들이고 개행 기준으로 spli

2023년 7월 27일
·
0개의 댓글
·

[42 SEOUL] So Long - MiniLibX

0. ??? 그냥 시작하기 앞서 부리는 아주 작고 하찮은 투정. > ❓ 이건 또 무엇일까 ❓ > 🕹️ 역시 게임은 뚝딱 만들어지는 것이 아니었다 🕹️ > 🥔 그치만 나는 말하는 감자인 걸 🥔 1. X-Window 📍 Network-Oriented Graphic System for Unix [ X11 ] X Window / X Window System을 일컫는다. 주로 Unix 계열 OS에서 쓰이는 Window Systmem & Window GUI 환경이다. X Window System은 display에 창을 표시하며 입력 장치의 상호 작용 등을 관리하여 GUI 환경 구현을 위한 Basic Framework를 제공한다. 2. MiniLibX ? Mini Graphic Library cocoa / x-window 지식 없이도 사용 가능하다. window, creation, d

2023년 6월 14일
·
0개의 댓글
·
post-thumbnail

42seoul:: So_long

perror 오류 메세지를 출력해주는 함수로 전역 변수 errno의 값을 해석하여 이에 해당하는 시스템 오류 메세지를 표준 오류 출력 스트림 (stderr)에 출력한다. 또한 추가적으로 전달하고자 하는 사용자 정의 메세지를 str 인자에 담아 출력할 수 도 있다. strerror 오류 메세지 문자열을 가리키는 포인터를 얻어온다. errnum의 값을 통해 발생하였던 오류에 알맞은 오류 메세지를 가리키는 포인터를 리턴해준다. parse한 map의 조건 벽으로 둘러싸여야 함 최소 출구(E) 1, 수집품(c)1, 시작지점(P) 1 // E,P는 무조건 한개 탈출가능해야함 직사각형 파싱하는 맵이 .ber파일인지도 확인하자! floos fill 방식으로 구현(dfs) 수집품을 찾으면서 탈출하는 최소 경로를 탐색해야한다. 구현

2023년 2월 4일
·
0개의 댓글
·

[so_long] 6. 게임 종료

🖥 so_long 1. 이벤트 체크 게임은 두 가지 경우에 종료되도록 하였습니다. 적과 충돌 수집품을 모두 모와 탈출 플레이어와 적의 위치가 같다면 충돌한 것으로 판단합니다. 충돌 시 게임은 종료됩니다. 수집품(코인)도 같은 방법으로 충돌했다면 수집하였다고 카운트해줍니다. 코인을 모두 모은 상태로 탈출구에 도달하면 게임이 종료됩니다.

2023년 1월 27일
·
0개의 댓글
·

[so_long] 5. 렌더링

🖥 so_long 1. 맵 그리기 를 이용해 계속해서 에 렌더링 해줄 함수를 호출합니다. 제 경우엔 함수가 그 역할을 합니다. 안에서 , 를 각각 렌더링해줍니다. 우선 을 먼저 그리고 그 위에 움직이는 를 덧씌워 그려주는 방식입니다. 을 그리는 함수입니다. 반복문으로 각 좌표를 돌며 그 위치에 맞는 타일이미지를 위치시킵니다. 2. 스프라이트 그리기 1) 부드러운 이동 플레이어나 적이 움직일때 애니메이션이 없다면 맵의 각 타일처럼 알맞은 위치에 그려주기만 하면 됩니다. 이렇게 하면 좌표(x0)에서 좌표(x)로 움직일때 64픽셀만큼 순간이동하는 것처럼 표현될 것입니다. 그래서 좌표를 옮길 때, 즉 스프라이트가 움직일 때 부드럽게 좌표를 옮기도록 각 픽셀단위로 스프라이트를 그려주었습니다. ![Screen-Recording-2023-01-27-at-4 36 14-PM](https://user-images.githubusercontent.c

2023년 1월 27일
·
0개의 댓글
·

[so_long] 4. 이벤트 처리

🖥 so_long 1. mlx_hook 은 가 유지되는 동안 가 발생하면 함수를 실행하는 함수입니다. 의 두번째와 세번째 인자는 각각 와 값입니다. X11/X.h을 참조하여 와 에 대한 값을 알 수 있습니다. 에서는 값은 사용하지 않기 때문에 인자로 0을 넣어줍니다. 문서를 참고하여 값을 알아냅니다. keyPress = 2 -> 키입력 DestroyNotify = 17 -> 종료 키를 입력 받았을때 실행할 함수와 종료상황일때 실행할 함수를 인자로 넣어줍니다. 2. 키입력 이벤트 에 등록된 함수는 아래와 같습니다. 키가 입력되었다면 해당 keycode([macOS 키코드](https://eastmanreference.com/complete-list-

2023년 1월 27일
·
0개의 댓글
·

[so_long] 3. 게임 초기화

🖥 so_long 1. 초기화 맵파일의 정보를 이용해 게임에 필요한 구조체들을 초기화 해줍니다. (자세한 내용은 다른 포스팅에서 설명하겠습니다.) 2. 이미지파일 플레이어, 코인, 적 등의 스프라이트들은 배경을 구성하는 이미지들위에 덧씌워 그려주었습니다. 배경을 각 요소마다 64x64 크기를 가지는 타일을 각 좌표마다 그려주는 방식을 사용했습니다. 이 타일들의 이미지를 초기화해주는 작업이 필요합니다. 파일을 이용해 이미지를 생성할 수도 있지만 의 자체적인 누수 문제 때문에 파일을 이용해 이미지를 생성하였습니다. 은 에서 사용하는 로 로 단색 이미지를 나타냅니다. 다음 코드들의 함수는 의 을 간소화한 함수입니다. 구조체에 생성된 의 이미지들을 저장합니다. 스프라이트는 애니메이션을 위해 프레임마다 다른 이미지들을 렌더링하도록 합니다. 그러므로 아래와 같이 하나의 스프라이트는 여러가지 이미지를 가집니다. ![Screen Shot 2023-01

2023년 1월 26일
·
0개의 댓글
·

[so_long] 2. 맵 파싱하기

🖥 so_long 1. 확장자 검사 은 두번째인자()이 첫번째인자에 있다면 그 를 반환해줍니다. 을 찾았더라도 의 끝이 로 끝나지 않는다면 유효하지 않습니다. 2. 동적할당 우선 맵파일의 첫번째 줄의 너비를 기준으로 2차원 배열의 형태로 동적할당을 받습니다. 3. 사각형 검사 그 다음 맵파일의 모든 줄을 다시 읽어들여 맵이 사각형인지 확인합니다. 4. 맵을 로딩 할당 받은 메모리에 맵의 모든 요소들을 넣어줍니다. 5. 벽으로 둘러쌓임 맵이 벽으로 둘러쌓여 있으려면 모든 줄은 양 끝이 벽이어야 합니다. 첫줄과 끝줄은 모든 요소가 벽이어야 합니다.

2023년 1월 26일
·
0개의 댓글
·

[so_long] 1. mlx 라이브러리

🖥 so_long 1. mlx 라이브러리 라이브러리는 나 에 대한 지식 없이도 스크린에 기본적인 렌더링할 수 있도록 도와주는 입니다. 교육용으로 자체 제작된 라이브러리라 기능이 매우 제한적입니다. 과제에서는 과 두 버전이 제공됩니다. 을 하면 라는 가 생성되며 를 하면 라는 가 생성됩니다. >📌 정적라이브러리 정적라이브러리는 다른 목적파일이나 라이브러리와 링킹되어 실행파일로 만들어집니다. 때문에 별도의 작업없이 실행파일만으로 라이브러리 내부의 코드를 이용할 수 있게 됩니다. 하지만 프로그램이 실행될때마다 매번 라이브러리도 메모리에 올라가야 하기 때문에 메모리 효율이 떨어질 수 있습니다. >📌 동적라이브러리 동적라이브러리는 런타임에 라이브러리를 참조해 원하는 내용만 가져와 사용하는 방식입니다. 여러 프로세스들이 동적라이브러리의 가상페이지를 참조할 수 있어 메모리를 효율적으로 쓸 수 있지만 오버헤드가 존재해 속도는 정적라이브러리에 비해 느린 편입니다. 에

2023년 1월 26일
·
0개의 댓글
·
post-thumbnail

[so_long] 0. 간단한 2D게임을 만들어 보자

🖥 so_long 1. 프로젝트 소개 플레이어를 조작하여 코인을 모두 수집하여 탈출하는 2D게임을 만들어 보는 것이 이 과제의 목적입니다. 이에 랜덤하게 움직이는 적과 스프라이트에 애니메이션을 추가하여 게임적인 요소를 더하였습니다. 2. 맵의 규칙 의 확장자를 가지는 맵파일을 받습니다. 맵은 다음으로 구성됩니다. 1 - 벽 0 - 빈 공간 P - 플레이어 R - 적 C - 코인 E - 탈출구 이런식의 을 받아 게임의 맵을 커스터마이징할 수 있습니다. 맵은 반드시 벽(1)로 막혀있어야 하며 사각형이어야 합니다. 오류가 있다면 적절히 에러메세지를 출력해야 합니다.

2023년 1월 26일
·
0개의 댓글
·
post-thumbnail

[cub3d] cub3d

cub3d > raycast와 mlx를 활용하여 1인칭 게임을 구현 ray cast > 광선을 직선으로 투사해 가장 먼저 닿은 물체와의 거리를 파악하는 기법 여기서는 플레이어의 시야에 보이는 벽과의 거리를 파악하여 화면 높이와 벽의 높이를 거리에 따른 비율로 계산해 2D맵을 3D원근법으로 렌더링하기위해 사용 구현사항 > 0, 1, N, S, E, W로 이루어진 map을 읽어올 수 있어야함 map 파일의 상단에는 불러올 텍스쳐 정보등의 identifier를 가지고 있어야 함 map이 벽으로 둘러쌓여있지 않다면 error 동, 서, 남, 북 벽들은 각각 다른 텍스쳐를 가지고 있어야 함 W, A, S, D를 사용해 캐릭터를 움직일 수 있어야함 mlx와 raycast를

2023년 1월 14일
·
0개의 댓글
·
post-thumbnail

fractal - 그래픽 라이브러리 사용해보기

들어가기에 앞서 그래픽 라이브러리인 mlx에 대해 충분히 공부 : 팔만코딩경 mlx 내가 그리려는 fractal에 대해 수식 파악 mlx를 실행시키는 Makefile과 gcc컴파일 방식 파악 🖥️ Mandatory fractal이미지인 Mandelbrot과 Julia를 구현하는게 목표입니다. 우선 Makefile이나 컴파일 방식에 대해 파악하셔야 합니다. 컴파일 gcc -I ./minilibxmms20210621 -c test.c 동적 라이브러리는 mms 디렉토리에 위치해 있고, mms 디렉토리에는 mlx.h라는 파일w이 존재하는 것을 볼 수 있습니다. 따라서 gcc -c로 컴파일 할 때, mms 디렉토리를 -I 옵션으로 명시하여 Hea

2022년 12월 30일
·
0개의 댓글
·

so_long의 기록들

Minilibx란? minilibx는 화면에서 무언가를 그리기 위한 기본적인 그래픽 라이브러리이다. 간단한 창 생성, 그리기 도구, 이미지 기능 및 이벤트 관리 시스템을 제공한다. C언어 환경에서 사용하기 위해 헤더를 추가해야 한다. 컴파일을 하기 위해서 일련의 처리가 필요하다. 설정되어 있는 헤더 디렉토리에서 자동으로 찾는 방법. gcc -Lmlx -lmlx -framework OpenGL -framework Appkit -Imlx 라이브러리 경로를 직접 지정하는 방법. cc -L/(라이브러리 경로) -Lmlx -lmlx -framework OpenGL -framework Appkit -Imlx 만약 해당 경로에 라이브러리가 존재하지 않는다면 내장 라이브러리에서 찾는다. 예제 mlx_init -> 초기화 mlx.h 파일에 선언되어 있는 mlxinit함수를 활용해서 포인터를 초기화 할 수 있는데, mlxptr은 ml

2022년 12월 25일
·
0개의 댓글
·
post-thumbnail

[cub3d]레이 캐스팅

본 과제는 lodev.org의 그래픽 튜토리얼을 기초로 수행했다. 이 글을 보기에 앞서 해당 튜토리얼을 대략적으로 살펴보면 도움이 될 것이다. 레이캐스팅 vs 레이트레이싱 레이캐스팅은 3D모델을 점근선 등의 요소를 활용해 2D 화면으로 구현하는 것이다. 한 점에서 광선을 여러개 쏜 뒤 맞는 지점까지의 거리 등을 계산해 화면에 그려주는 그래픽 방법론이다. 반면 레이트레이싱은 빛 반사와 관련한 질감을 구현하는 것이다. 두개가 합쳐져서 물리엔진을 이룬다고 보면 된다. cub3d는 이 중 레이캐스팅과 관련돼 있다. 해당과제는 42에서 제공하는 그래픽 엔진인 mlx를 이용해 구현했다. >### mlx 함수 정리 참고-> 정확한 내용은 solong 정리 참고 💡 mlx_init() = mlx가 적용된 프

2022년 12월 10일
·
0개의 댓글
·
post-thumbnail

[42Seoul] - MiniRT

1.무엇을 하는 과제인가? : 3차원 물체들을 시각적으로 나타내보는 그래픽 과제이다. mlx라는 라이브러리를 이용하고, 레이 트레이싱이라는 기술을 이용하여 3차원의 물체들을 사실감 있게 만든다. + 수학 공식을 어떻게 코드화를 시킬지에 대해서도 고민을 하게 되고, 적용을 해보게 된다. 2.과제를 하면서 참고 했던 곳들 1)miniRT Tutorial : miniRT의 Tutorial이다. 이것을 통하여 과제를 정말 수월하게 해볼 수가 있다. Tutorial이 끝나면 이것을 바탕으로 다른 물체들을 표현하면 된다. 링크 : https://github.com/GaepoMorningEagles/miniraytracingin_c

2022년 12월 4일
·
0개의 댓글
·

[42서울] so_long : mlx

🖼 mlx란? mlx는 X-Window에 관한 지식 없이도 쉽게 그래픽 관련 소프트웨어를 만들 수 있도록 하는 라이브러리이다. 간단하게 window를 생성하고, image를 띄우고, 입력장치등을 관리할 수 있다. mlx 내부에서 제공하는 기능들은 OpenGL과 AppKit을 이용한다. 따라서 프로그램을 생성할 때, OpenGL과 AppKit을 프레임 워크로 이용하겠다고 알려주어야 한다. > #### X-Window X-Window는 디스플레이 장치에 창을 표시하며 마우스와 키보드 등의 입력 장치의 상호작용 등을 관리해 GUI 환경의 구현을 위한 기본적인 프레임워크를 제공한다. > > #### AppKit AppKit은 GUI를 위한 프레임워크이다. 📦 mlx 함수 ✅ mlx_init mlx를 사용하기 위해 가장 먼저 사용하는 함수이다. 소프트웨어와 디스플레이 장치 연결을 생성해 준다. void *mlx_init(); 리턴값

2022년 7월 24일
·
0개의 댓글
·
post-thumbnail

[solong] 간단한 게임 만들기

MiniLibX란 MiniLibX는 42에서 만든 그래픽 라이브러리다. #include 또는 "mlx.h" 로 사용 가능하다. mlx.h에 있는 함수들은 Appkit과 OpenGL을 기반으로 만들어졌다고 한다. 그래서 mlx.h를 사용하려면 Appkit과 OpenGL을 링크해줘야 한다. mlx는 minilibxopengl(정적 라이브러리), minilibxmms(mojave, metal, swift) (동적 라이브러리) 두 가지 버전이 있다. 둘 중 하나만 사용하면 된다. 참고로 mms버전에서는 검은줄 이슈가 있는 듯 하다. 컴파일 방법 라이브러리용인 opengl버전으로 다운받고, make를 해서 정적이든 동적이든 라이브러리를 생성한다. 만약 개인 컴퓨터에서 진행한다면

2022년 7월 2일
·
0개의 댓글
·
post-thumbnail

[so_long, cub3D] Minilibx(mlx) 톺아보기

해당 글은 minilibx의 man page를 기반으로 작성하였습니다 Minilibx 란? 42에서 Unix/Linux 기반의 X-Window/X11이나 MacOS 기반의 AppKit 관련 지식 없이도 쉽게 graphical software를 만들 수 있도록 제공하는 라이브러리 다음과 같은 기능들을 제공한다 간단한 윈도우 생성 draw tool image event 관리 키보드, 마우스 입력 등에 대한 management 코드에 include하여 실행하는 경우에는 mlx directory를 프로그램의 directory안에 넣어두고 ![](https://velog.velcdn.com/images/kyj93790/post/95838501-6abe-408e-adea-

2022년 6월 20일
·
0개의 댓글
·
post-thumbnail

[mlx] miniLibX활용 이미지 움직이기

mlx 라이브러리 > 렌더링을 위한 가장 기본적인 작업을 수행할 수 있는 작은 그래픽 라이브러리 간단한 윈도우를 생성하고, 그리기, 이벤트관리 등을 제공함 mlx.h 파일을 include 하여 사용가능 컴파일시 gcc -L(mlx폴더) -lmlx -framework OpenGL -framework - AppKit *.c miniLibX활용 이미지 움직이기 결과

2022년 5월 31일
·
0개의 댓글
·
post-thumbnail

[mlx] miniLibX 활용 이미지 출력하기

mlx 라이브러리 렌더링을 위한 가장 기본적인 작업을 수행할 수 있는 작은 그래픽 라이브러리 간단한 윈도우를 생성하고, 그리기, 이벤트관리 등을 제공함 mlx.h 파일을 include 하여 사용가능 컴파일시 gcc -L(mlx폴더) -lmlx -framework OpenGL -framework - AppKit *.c miniLibX 활용 이미지 출력 결과

2022년 5월 26일
·
0개의 댓글
·