객체지향(OOP: Ojbect-oriented programming) 속성과 동작을 함께 결합하여 재사용 가능한 패키지로 만드는 기능을 제공 - 함수를 작성하는 데 초점을 맞추기보다는 명확하게 정의된 동작 세트가 있는 객체를 정의하는 데 중점을 둔다. 누가 주체이고, 어떤 행동을 할지 분명히 알 수 있다. - 프로그램을 보다 모듈화된 방식으로 작성할 수 있고, 더 쉽게 쓰고 이해할 수 있으며, 더 높은 수준의 코드 재사용성을 제공한다. 클래스 객체 지향 프로그래밍에서, 우리는 종종 우리의 타입이 데이터를 보유할 뿐만 아니라, 데이터와 함께 작동하는 기능을 제공하기를 원한다. C++에서는 이 작업을 class 키워드를 통해 수행한다. 구조체 선언과 마찬가지로 클래스 선언은 정의만 할 뿐 메모리에 할당되지 ..

#include using namespace std; 네임스페이스(namespace) 출처 네임스페이스란 이름이 기억되는 영역을 뜻하며, 이름이 소속된 공간을 의미한다. C++에서는 변수, 함수, 구조체, 클래스 등을 서로 구분하기 위해서 식별자(identifier)로 다양한 이름을 사용한다. 네임스페이스는 C++ 프로그램을 작성할 때 발생하는 이름에 대한 충돌을 방지해 주는 방법을 제공한다. C++ 표준 라이브러리의 모든 기능은 std라는 namespace 안에 있다 cf) [C++] using namespace std를 사용하면 안되는 이유 global로 namespace를 선언한다면 namespace에 선언된 함수나 다른 요소들의 이름이 겹칠 수 있기 때문에 뜻하지 않았던 오류를 발생시킬 수 있다...

libasm 기본 참고 자료 www.notion.so/libasm-179fc489b80a4363996490c65e9f11a7 www.notion.so/Libasm-3c94bbc7df234499b012f6ae82b84dc2 어셈블리어 기초 공부 youtu.be/s6oLWpLj560 특히 C를 어셈블리어로 변환하는 부분이 과제에 도움이 많이 됨. 실제로 ft_함수들을 c로 먼저 만들고, 어셈블리어로 변환해서 학습했음. 레지스터 CPU(Central Proceessing Unit)가 요청을 처리하는 데이터의 임시저장 공간 레지스터의 종류 그 중 범용레지스터를 사용자가 적절하게 사용할 수 있다. 아래 그림은 범용레지스터의 구조 BYTE : 1 byte (char) WORD : 2 byte (short) DWOR..
리링크 코드를 바꾸지 않은 상태에서 다시 make 했을 때, 변경사항이 없어서 타겟을 다시 만들지 않으면 리링크되지 않은 것. 보통 의존성이 있는 경우 리링크가 많이 발생함. A primary feature of make is that dependencies are specified in a makefile (often named makefile but may have other names such as MyRules.mk) in a form like: FileX: FileA FileB FileC Command to make FileX from FileA FileB FileC Given this dependency, if any of FileA, FileB, or FileC has a modificati..
Wall collisions A skybox Floor and/or ceiling texture An HUD. Ability to look up and down. Jump or crouch. A distance related shadow effect. More items in the maze. Object collisions. Earning points and/ or losing life by picking up objects/traps. Doors which can open and close. Secret doors. Animations of a gun shoot or a animated sprite. Rotate the point of view with the mouse.

벽 레이캐스팅, 스프라이트 카메라행렬에서 곧바로 이해 안됐던 부분만 기록용으로 정리 github.com/365kim/raycasting_tutorial github.com/l-yohai/cub3d/blob/master/mlx_example/sprite.md 레이캐스팅 (wall) a, b: 벡터 (a + b)^2 = |a|^2 + |b|^2 + 2 * a · b a · b = |a| * |b| * cosΘ 따라서 직각삼각형일 땐 피타고라스 가능 (a + b)^2 = |a|^2 + |b|^2 ex) |dir|^2 = |dirX|^2 + |dirY|^2 1 double dirX = -1, dirY = 0; double planeX = 0, planeY = 0.66; 방향벡터와 수직이기만 하면 변수선언 시 카..

로데브 中 텍스쳐를 이해하는 페이지. 이해했던 흐름 그대로의 정리라서 로데브 원본과 살짝 차이가 있습니다. 1. 벽 텍스쳐 2. 천장, 바닥 텍스쳐 3. 텍스쳐에 투명도 넣기 3. 텍스쳐에 투명도 넣기 앞에서 mlx에서는 0xAARRGGBB 색상 형식을 사용하고, 실제로 투명도를 지원하는 것도 확인해보았다. (위 움짤) alpha값이 있는 색상을 바로 mlx 함수로 띄웠던 경우다. 하지만 cub3d처럼 buf[y][x]에 색을 저장하는 방식에서는 투명도를 다르게 구현해야 한다. '완전 투명'한 경우를 제외하고는, 아무리 반투명한 색을 넣어도 스크린에 띄워보면 '완전 불투명'한 이미지로 출력된다. 왜냐하면 buf[y][x] = color 과정에서 기존 색상을 남겨두지 않고 그냥 새로운 색상을 덮어 씌워버리..

로데브 中 텍스쳐를 이해하는 페이지. 이해했던 흐름 그대로의 정리라서 로데브 원본과 살짝 차이가 있습니다. 1. 벽 텍스쳐 (affine texture mapping) 2. 천장, 바닥 텍스쳐 3. 텍스쳐에 투명도 넣기 1. 벽 텍스쳐 (affine texture mapping) 광선으로 벽의 높이를 구한 다음부터의 내용 int texNum = worldMap[mapX][mapY] - 1; double obj_x = (ray.side == 0) ? posY + perpWallDist * rayDirY : posX + perpWallDist * rayDistX; int img_x = (int)(img_width * (obj_x - floor(obj_x))); if (wall->type == SOUTH ||..

mlx_get_data_addr 함수를 살펴보는 페이지. 함수를 이해하는 데 필요했던 rgb, endian, bpp, 포인터 형변환 개념을 먼저 정리했습니다. mlx_get_data_addr에서 정리된 내용은 벽과 천장, rgb는 투명도 페이지에서 사용됩니다. 1. rgb 2. endian 3. bpp 4. 포인터 형변환 5. mlx_get_data_addr 1. rgb Red, Green, Blue (빨강, 초록, 파랑) 세 종류의 기본 색을 이용하여 색을 표현한다. 각각의 요소는 0 ~ 255 의 값을 가질 수 있다. 이 값은 해당 색이 얼마나 섞였는지를 나타낸다. ex) 완전 빨강: R = 255, G = 0, B = 0 완전 초록: R = 0, G = 255, B = 0 완전 파랑: R = 0, ..

It will make you aware of the importance of using scripts to automate your tasks. For that, you will discover the "docker" technology and use it to install a complete web server. 과제의 큰 흐름은 다음과 같다. 1. 도커를 사용해서 데비안 OS 가상환경을 만든다. 2. 가상환경 위에서 웹서버를 구축한다. 3. 1, 2 과정을 Dockerfile로 자동화한다. 진행하면서 등장하는 모든 개념을 완벽하게 파악하는 건 무리였다.. 그래서 이 코드를 왜 쓰는지 이해되는 수준까지만 공부했다. 그리고 시작부터 도커가 작동하는 원리를 머리에 집어넣으려니까 진도가 안나가서 ㅋㅋㅋ ..