분류 전체보기 (429) 썸네일형 리스트형 FoV - 쉐도우 캐스팅(Shadow Casting) 들어가며 로그라이크 게임의 핵심 요소 중에는 FoV라는 것이 있다. FoV란, 'Field of View' 또는 'Field of Vision'의 약자로써, 아래 이미지 처럼 플레이가 던전과 같은 필드의 특정 위치에서 볼 수 있는 오브젝트와 가려지는 오브젝트를 구분하여 디스플레이하는 기능을 말한다. FoV를 구현하기 위해 간단하게 사용되는 방법으로는 '라이트 트레이싱(Light tracing)'이 있다. 라이트 트레이싱이란 시작점 - 일반적으로 플레이어 캐릭터 - 에서 바깥 쪽으로 가상의 빛을 쏘아 장애물에 의해 막히는 맵 셀을 탐지하는 방법이다. 라이트 트레이싱은 간단히 구현할 수 있다는 장점이 있는 반면, 아래 이미지 처럼 같은 셀에 대해 여러번 같은 연산을 수행하게 되어 CPU의 낭비가 발생한다는 .. 파워포인트 자동 고침 끄기 들어가며 이전 포스팅 [Excel] 엑셀 한영 자동 변환 끄기에 이어 파워 포인트도 역시 바보 같은 자동 고침 옵션이 들어가 있다. MS든 애플이든 제발 쓸데 없는 기능 자꾸 추가하지 말고 시키는 작업이나 쉽게 똑바로 하는 툴을 만들어 줬으면 하는 바램이 있다. 자동 고침 옵션 끄기 파워 포인트의 메뉴에서 '파일 > 옵션 > 언어 교정 > 자동 고침 옵션' 순서대로 찾아 간다. 아래의 선택 박스에서 필요 없는 자동 고침 옵션들을 비활성화 하면 된다. 부록 1. 같이 읽으면 좋은 글 [Excel] 엑셀 한영 자동 변환 끄기 [C++] 템플릿 특화(Template specialize) 완벽 가이드 템플릿 특화란? C++은 하나의 코드로 다양한 타입에 대응할 수 있는 템플릿이라는 도구를 제공한다. 이 글을 읽는 여러분은 이미 템플릿에 대해서는 알고 있다고 가정하고, 이번 포스트에서는 템플릿 특화(Template specialization)에 대해 살펴 보도록하낟. 템플릿 특화(Template specialization)는 특정 타입의 템플릿 인자에 대응하는 특별한 템플릿 클래스를 정의할 수 있는 기능이다. 참고로 템플릿 특화는 템플릿 특수화라고도 번역 되며 특화나 특수화나 같은 의미니 다른 곳에서 특수화라고 표현되는 글을 본다고 하더라도 당황하지 말도록 한다. 설명을 위해 우선 아래 일반 템플릿 클래스의 예제 코드를 살펴 보도록 하자. 아래에서는 템플릿 인자로 T와 U를 받을 수 있는 Widget이.. [VBA] 에러 처리 완벽 가이드 이 포스트는 Excel Macro Mastery 사이트의 'VBA Error Handling - A Complete Guide(by Paul Kelly)'의 내용을 다시 정리한 것입니다. 이번 포스트에서는 VBA의 에러 처리 방법에 대해 다룹니다. 들어가며 본 포스트는 'VBA 에러 처리'에 대한 자세한 가이드를 제공합니다. VBA 에러 처리에 대해 이미 익숙하며 기억을 더듬기위한 레퍼런스가 필요하신 분은 아래 Quick Guide 테이블을 참고해 주세요. VBA 에러 처리에 대한 특정 주제를 찾고 있다면 오른쪽의 목차에서 찾아 보시면 됩니다. 만일 여러분이 VBA에 대해 익숙하지 않으신 분이라면 본 포스트는 논리적인 순서로 배치되어 있으므로 처음 부터 끝까지 읽어 보시길 권장합니다. Quick Guid.. [C++] static 키워드 완벽 가이드 들어가며 C++에서 static 키워드는 간단한 사용법을 가지지만 복잡한 의미를 가지고 있는 아이러니한 키워드다. 함수든 변수든 간단하게 static이라는 키워드 여섯글자만 붙여 주면 무엇이든 static 속성을 가지게할 수 있지만 사용되는 각 위치에 따라 적용 되는 의미가 다양하기 때문에 각각의 static에 대한 의미를 잘 숙지하고 사용하여야 한다. 이번 포스트에서는 static 키워드의 기본 속성과 각 사용처에 따라 static 키워드가 가지는 의미, 주의해야 할 점, 프로그램 트릭들을 살펴 보도록 한다. static 변수 이번 섹션에서는 static 변수에 대해 살펴 보자. C++에서 static 변수란 기본 변수 선언 앞에 static 키워드를 추가하여 선언된 변수다. static int var.. [C++] 제네릭 람다 표현식 들어가며 이번 포스트에서는 C++14 부터 포함된 제네릭 람다 표현식에 대해 살펴 보도록 하겠다. 제네릭 람다 표현식은 auto 키워드를 이용해 하나의 람다 표현식 코드로 다양한 타입의 인자들에 대해 대응할 수 있는 람다 표현식을 말한다. 일반 람다 표현식 vs 제네릭 람다 표현식 먼저 일반적인 람다 표현식과 그 사용을 살펴 보자. auto add = [](int a, int b) { return a + b; }; std::cout [C++] 람다와 함수 포인터 들어가며 이전 포스트(람다(lambda) 표현식)에서는 람다 표현식을 auto 변수에 담아 마치 함수 포인터인터인것 처럼 사용했었다. auto f1 = [](int a, int b) { return a + b; }; std::cout 함수 포인터 우리는 앞서 람다 표현식은 '이름 없는 함수 객체'라고 배웠다. 그런데 어떻게 객체가 함수 포인터에 저장 될 수 있는 것일까? 이유는 컴파일러에 의해 생성되는 함수자 클래스 내부에서 함수 포인터로 암시적 형변환을 지원하고 있기 때문이다. 컴파일러가 만드는 클래스에 '함수 포인터로 변환 될 수 있는 변환 연산자 함수 제공' // int (*f)(int, int) = [](int a, int b) { return a + b; }; class __CompilerGen.. [C++] 람다(lambda) 표현식 #3 들어가며 이번 포스트에서는 람다의 다양한 로컬 변수 캡처 방법에 대해 살펴 볼 것이다. C++ 람다에 대한 추가 정보는 이전 포스트 [C++] 람다(lambda) 표현식 #1 [C++] 람다(lambda) 표현식 #2 들을 참고 하도록 하자. 디폴트 캡처 디폴트 캡쳐는 모든 지역 변수에 대해 일괄 캡쳐를 진행할 수 있는 캡쳐 연산자다. 기본적인 람다 인트로듀서(대괄호로 표현된 람다 제일 시작 부분)에 캡쳐 리스트를 적는 대신 '=' 또는 '&'를 적는다. 기호 동작 [=] 모든 지역 변수를 capture by value [&] 모든 지역 변수를 capture by reference int v1 = 10, v2 = 20; auto f1 = [=]() {}; // 모든 로컬 변수를 값으로 캡쳐 auto f2.. [C++] 람다(lambda) 표현식 #2 들어가며 이전 포스트([C++] 람다(lambda) 표현식 #1)에서는 람다 표현식의 기본적인 내용을 살펴 보았다. 이번 포스트는 이전 포스트에 이어 람다 표현식에 대해 좀 더 자세히 다뤄 보도록 하겠다. 람다 = 임시 객체? C++에서 람다의 정의를 보면 다음과 같다. "an unnamed function object" capable of capturing variables in scope. 이전 포스트에서도 이야기 했듯이 람다는 이름 없는 함수 객체의 일종이다. 정확히 번역하자면 '범위 안에 있는 변수를 캡쳐 할 수 있는 이름 없는 객체'를 람다라고 한다. 이게 무슨 이야기인지 설명하기 위에 이전 포스트의 예제를 상기해보자. int main() { std::vector v = { 1, 3, 2, 5,.. [C++] 람다(lambda) 표현식 #1 들어가며 이번 포스트에서는 C++11 부터 추가된 람다 표현식에 대해 살펴 보도록하겠다. 람다 표현식(lambda expression)이란 '익명의 함수를 만드는 문법'으로써 정확하게는 익명의 함수 객체를 만드는 문법이다. 먼저 람다 표현식을 사용하여 vector를 정렬하는 간단한 아래 예제를 살펴 보자. #include #include #include int main() { std::vector v = { 1, 3, 2, 5, 4 }; std::sort(v.begin(), v.end(), [](int a, int b) -> int { return a < b; }); for (int e : v) { std::cout 이전 1 2 3 4 5 ··· 43 다음