[Cub3D] 레이캐스팅(Ray casting)이란?
·
42Seoul/Cub3D
github.com/365kim/raycasting_tutorial/blob/master/2_basics.md 365kim/raycasting_tutorial (한글ver) 레이캐스팅 튜토리얼 번역. Contribute to 365kim/raycasting_tutorial development by creating an account on GitHub. github.com lodev.org/cgtutor/raycasting.html Raycasting #define mapWidth 24 #define mapHeight 24 #define screenWidth 640 #define screenHeight 480 int worldMap[mapWidth][mapHeight]= { {1,1,1,1,1,1,1,1..
[Cub3D] DDA 알고리즘 vs Bresenham 알고리즘
·
42Seoul/Cub3D
DDA (Digital Differential Analyzer) 알고리즘 DDA는 컴퓨터 그래픽에서 직선, 삼각형 또는 다각형을 형성하기 위해 직선을 그리는 데 사용된다. DDA는 한 좌표의 일정한 간격으로 라인을 따라 샘플을 정수로 분석하고 다른 좌표에 대해서는 라인에 가장 가까운 정수를 반올림한다. 따라서 선이 진행됨에 따라 첫 번째 정수 좌표를 스캔하고 두 번째 정수를 가장 가까운 정수로 반올림한다. 따라서 x 좌표에 DDA를 사용하여 그린 선은 x0 ~ x1이지만 y 좌표의 경우 y = ax + b가되고 함수를 그리려면 Fn (x, y 반올림)이된다. Bresenham 알고리즘 Bresenham Algorithm은 1962 년 J.E. Bresenham에 의해 개발되었으며 DDA보다 훨씬 정확하고..
[C] miniLibx 란?
·
C & C++
더보기 harm-smits.github.io/42docs/libs/minilibx MiniLibX Find code examples, optimization tricks, and much more. harm-smits.github.io hysimok.github.io/posts/til/2020-10-09/ [TIL] 2020-10-09 Ray Tracing 과 MiniLibX 2020-10-09 (금) Today I Learned Ray Tracing 디스코드에 cub3d에 대해 좋은 정보들이 많았다. 우선 Ray casting 의 개념과 원리를 알 수 있는 강의를 보기 시작했다. https://courses.pikuma.com/courses/raycasting [Chapter1] R hysimok.gi..
[C] printf() 구현하기 (2) - format
·
42Seoul/Printf
format 다양한 자료형 변수를 문자열로 변환하는 방식을 지정해주는 형식 문자열(format string)인 문자열 변수를 받아들인다. 형식 지정자 설명 d,i 부호 있는 10진 정수 u 부호 없는 10진 정수 o 부호 없는 8진 정수 x 부호 없는 16진 정수(소문자) X 부호 없는 16진 정수(대문자) f 실수를 소수점으로 표기(소문자) F 실수를 소수점으로 표기(대문자) e 실수 지수 표기법 사용(소문자) E 실수 지수 표기법 사용(대문자) g %f와 %e 중에서 짧은 것을 사용(소문자) G %F와 %E 중에서 짧은 것을 사용(대문자) a 실수를 16진법으로 표기(소문자) A 실수를 16진법으로 표기(대문자) c 문자 s 문자열 p 포인터의 메모리 주소 n %n 부분에 int 포인터를 넣으면 지금..
[C] 나만의 라이브러리 - split 함수 구현
·
42Seoul/Libft
split 함수 형태 char **my_split(char const *s, char c); 매개 변수 분할할 문자열 구분 기호 문자 반환 값 분할한 새 문자열 배열, 할당 실패시 NULL 반환 설명 malloc(3)로 할당하고 문자 'c'를 구분 기호로 사용하여 's'를 분할하여 얻은 문자열 배열을 반환하십시오. 배열을 NULL 포인터로 종료해야 함 소스 코드 #include "libmy.h" static int get_row(char const *s, char c) { size_t i; size_t ret; i = 0; ret = 0; while (s[i]) { if (s[i] != c && (s[i + 1] == c || !s[i + 1])) ret++; i++; } return (ret); } s..
[C] 나만의 라이브러리 - atoi, isalpha, isdigit, isalnum, isascii, isprint, toupper, tolower
·
42Seoul/Libft
1. atoi int my_atoi(const char *str); 주어지는 문자열에 연속되는 숫자가 있을 때, 그 숫자를 int형으로 바꾸는 함수 int my_atoi(const char *str) { long sign; long res; while ((*str >= 9 && *str 2147483648) return (0); if (sign == 1 && res > 2147483647) return (-1); str++; } return (sign * res); } 공백(white space) 제거 + or - 가 있을 때 부호 지정 (연속 된다면 0 반환) 연속되는 문자형 숫자를 int형으로 변환 후 부호와 값을 곱하여 반환 2. isalpha int my_isalpha(int c); 매개변수값이 ..
[C] 나만의 라이브러리 - strlen strlcpy strlcat strchr strrchr strnstr strncmp
·
42Seoul/Libft
1. strlen size_t my_strlen(const char *s); 문자열의 길이를 구하는 함수 size_t my_strlen(const char *s) { size_t i; i = 0; while (s[i]) i++; return (i); } 해당 문자열의 끝을 의미하는 \0 값을 찾을때까지 길이를 구한다. 2. strlcpy size_t my_strlcpy(char *dest, const char *src, size_t size); src 에서 size만큼(\0 포함) 복사하는 함수 size_t my_strlcpy(char *dest, const char *src, size_t size) { const char *s; size_t n; s = src; n = size; // n에 size 복..
[C] 나만의 라이브러리 - memset, bzero, memcpy, memccpy, memmove, memchr, memcmp
·
42Seoul/Libft
1. memset void *my_memset(void *s, int c, size_t n); s위치부터 n바이트 만큼 c값으로 초기화하는 함수 void *my_memset(void *s, int c, size_t n) { unsigned char *ptr; ptr = s; while (n--) *ptr++ = (unsigned char)c; return (s); } 메모리의 1바이트씩 체크와 역참조가 불가능한 void 포인터를 unsigned char포인터로 형변환 s의 시작점을 ptr받고 n개 만큼 반복하며 값을 넣어줌 2. bzero void my_bzero(void *s, size_t n); s위치부터 n바이트 만큼 0으로 초기화하는 함수 void my_bzero(void *s, size_t n)..
WONILLISM
'C언어' 태그의 글 목록