전체 글 282

Delegate 사용방법

델리게이트란? C++ 오브젝트 상의 멤버 함수를 가리키고 실행시키는 데이터 유형이다. 델리게이트로 C++ 오브젝트 상의 멤버 함수 호출을 일반적이고 유형적으로 안전한 방식으로 할 수 있다. 델리게이트를 사용하여 임의의 오브젝트의 멤버 함수에 동적으로 바인딩시킬 수 있으며, 그런 다음 그 오브젝트에서 함수를 호출할 수 있다. 호출하는 곳에서 오브젝트의 유형을 몰라도 무관하다. 델리게이트 오브젝트는 복사시에도 안전성이 보장된다. 델리게이트는 값으로의 전달이 가능하나, heap 영역에서 메모리를 할당하기 때문에 보통 추천할 만 하지는 않다. 가급적이면 델리게이트는 항상 참조로 전달하는 것이 좋다. 델리게이트는 싱글 - 캐스트 (형변환)와 멀티-캐스트 모두 지원되며, 디스크에 안전하게 Serialize 시킬 수..

UE5 2023.12.05

그리디 알고리즘 (2) - 분할 가능 배낭 문제

그리디 - 분할 가능 배낭 문제 그리디 방법으로 풀 수 있는 문제로 널리 알려진 배낭 문제에 대해 알아보겠다. 먼저 0-1 배낭 문제(0-1 knapsack problem)이라고도 부르는 일반 배낭 문제는 NP-완전 문제로 알려져 있어 다항 시간 솔루션을 사용할 수 없다. 그러나 0-1 배낭 문제를 조금 변경한 분할 가능 배낭(fractional kanpsack problem)은 그리디 방식으로 해결할 수 있다. 이 두 가지 문제를 살펴보면서, 문제 정의의 작은 차이가 문제 해결 방법에 큰 변화를 가져올 수 있다는 점을 확인하자. 0-1 배낭 문제 물건들의 집합 O = { ... }이 있고, 여기서 i번째 물건 O[i]의 무게는, W[i]이고, 가격은 V[i]이다. 그리고 최대 무게를 T까지 견딜 수 있..

그리디 알고리즘 - 최단 작업 우선 스케줄링

그리디 알고리즘 그리디 알고리즘은 매 단계에서 '가장 좋아 보이는' 해답을 선택하는 알고리즘이다. 즉, 그리디 방법은 지역적인 최적의 해결 방법으로부터 전역적인 최적의 해결 방법을 구성하는 방식이다. 예를 들어, 네비게이션이 인천국제공항에서 강남역까지 차로 이동하는 최단 경로를 보여주는 것 처럼 말이다. 이 경로상에 있는 임의의 두 지점을 선택할 경우, 이 두 지점의 최단 이동 거리는 처음에 구한 전체 최단 경로를 따라 이동함으로써 구할 수 있다. 전체 최단 경로는 사실상 이 경로상에 존재하는 다수의 지점 사이를 최단 거리 경로로 모두 연결시켜 놓은 것이라고 볼 수 있다. 그러므로 어느 두 지점 사이의 최단 경로를 구하기 위하여 다음과 같은 방법을 사용할 수 있다. 즉, 출발 지점에서 아직 방문하지 않은..

Honglap - D3D11 Ray Tracing Vector 핵심 정리

Ray Tracing 이란? 광선 추적 또는 레이 트레이싱(ray tracing)은 가상적인 광선이 물체의 표면에서 반사되어, 카메라를 거쳐 다시 돌아오는 경로를 계산하는 것이다. 적게는 물체 하나가 반사하는 빛만 계산하면 되지만 많게는 물체를 구성하는 입자 하나하나의 빛을 전부 계산해야 되기 때문에 렌더링을 하는 데 있어 시간이 많이 소요되는 기술이다. 영상을 만드는 과정에서는 렌더링한 이미지 자체를 저장하는 것이기에 시간에 영향을 덜 받지만, 실시간으로 이러한 작업을 해야하는 게 비디오 게임 등의 경우엔 이를 위해서 많은 계산이 필요하여 컴퓨터 연산 속도가 중요해진다. 수학과 프로그래밍 프로그래밍에서 수학은 낯설기 때문에 어렵게 느껴지는 측면이 강한 것이지, 이러한 흐름을 어떻게 프로그래밍에 적용을 ..

그래픽스/DX11 2023.11.27

상황에 맞는 키워드 (Context-Sensitive Keywords)

상황에 맞는 키워드(Context-Sensitive Keywords) 상황에 맞는 키워드는 오직 특정 문맥에서만 인식할 수 있는 언어 요소이다. 특정 맥락을 벗어나면, 상황에 맞는 키워드는 유저가 정의하는 기호가 될 수 있다. ( = Context-sensitive keywords are language elements that are recognized only in specific contexts. Outside the specific context, a context-sensitive keyword can be a user-defined symbol.) 키워드 목록 abstract delegate event finally for each, in initonly internal literal over..

C++/ CX 와 C++/ CLI 의 차이

C++/ CX(C++ component extensions, c++ 컴포넌트 확장) C++/ CX(C++ component extensions, c++ 컴포넌트 확장)는 마이크로 소프트가 window phone8 과 window 8과 같은 새로운 윈도 런타임을 지원하기 위해 고안한, C++를 확장한 언어 규격이다. 문법이 C++/CLI과 유사하지만, 컴파일한 결과물은 C++/CLI의 Managed Code가 아닌 Native Code이다. 현재 Visual studio 12이상에서 사용 가능하다. C++/CLI(C++/ 공통 언어 기반) C++/CLI(C++/ 공통 언어 기반)은 Managed Extensions for C++ 대신 사용하기위해 고안된 마이크로 소프트사의 언어 규격이다. 예전의 Manag..

런타임 게임 아키텍처

아키텍처란? 아키텍처란 간단히 말해, 하나의 서비스가 어떻게 구성되며 어떻게 작동된다라는 것을 표현한 것이다. 주로 시스템 구성 및 동작 원리와 구성 요소 간의 관계 및 시스템 외부 환경과의 관계를 묘사한다. 런타임 게임 아키텍처 게임 엔진은 크게 제작 도구와 런타임 구성 요소로 나뉜다. 먼저, 런타임 구성 요소를 살펴보고 제작 도구에 관해 살펴보겠다. 게임 엔진은 그 자체로 거대한 소프트웨어 시스템이라 할 수 있다. 여타 소프트웨어와 마찬가지로 게임 엔진도 계층적으로 구성된다. 상위 계층은 하위 계층에 의존하지만 그 반대는 아니다. 하위 계층이 상위 계층에 의존할 때 '순환 의존(circular dependency)'라고 한다. 선형 의존(순환 의존)은 시스템 간의 불필요한 결합을 생기게 하고, 테스트..

C++ 오류 처리

오류처리 C++에서, 프로그램의 예기치 않은 행동을 처리하는 수단은 크게 두 가지이다. 하나는 단언 (assertion)이고 다른 하나는 예외(exception)이다. 전자는 프로그래밍의 실수를 검출하기 위한 것이고, 후자는 프로그램이 더 이상 정상적으로 실행될 수 없을 정도의 어떤 예외적인 상황을 방지하기 위한 것이다. 사실 이 둘의 구분이 항상 명확하지는 않다. 해더 헤더의 assert 매크로는 C에서 물려받은 것이지만 여전히 유용하다. 이 매크로는 주어진 표현식을 평가해서, 만일 결과가 false이면 즉시 프로그램을 종료한다. 이 매크로는 프로그래밍 실수를 검출하는 데 사용해야 한다. 예를 들어 음이 아닌 실수의 제곱근을 계산하는 어떤 알고리즘을 구현한다고 가정했을 때, 수학에서 음수가 아닌 수의 ..