본문 바로가기

map map 컨테이너 : 연관 컨테이너 중 자주 사용하는 컨테이너로 원소를 key와 value의 쌍으로 저장한다. set과 map의 차이 : set은 원소로 key 하나만을 저장하지만, map은 원소로 key와 value의 쌍을 저장한다. key는 중복으로 저장될 수 없으며 중복 key를 저장해야 한다면 multimap을 사용해야 한다. map의 원소는 pair 객체로 저장된다. pair 객체의 first 멤버 변수는 key, second 멤버 변수는 value이다. insert() 멤버 함수는 pair 객체를 인자로 받아 map의 원소인 key와 value의 쌍을 저장한다. #include #include using namespace std; int main() { map m; m.insert(pair(5,..
list list : 시퀀스 컨테이너이므로 원소의 저장 위치(순서)가 정해지며 노드 기반 컨테이너이므로 원소가 각각의 노드에 저장된다. 각 노드는 앞쪽, 뒤쪽 노드와 연결된 형태로 이중 연결 리스트이다. 컨테이너 앞쪽에 추가하는 push_front(), 제거하는 pop_front(), 뒤쪽에 추가하는 push_back(), 제거하는 pop_back()을 가진다. 첫 원소를 참조하는 front()와 마지막 원소를 참조하는 back()을 갖는다. 또 지정한 위치에 원소를 삽입하는 insert()와 제거하는 erase()를 갖는다. 노드 기반 컨테이너이므로 at()과 [] 연산자가 없으며 임의 접근 반복자가 아닌 양방향 반복자를 제공한다. #include #include using namespace std; int m..
vector 1부 vector는 시퀀스 컨테이너 이므로 원소의 저장 위치(순서)가 정해지며 배열 기반 컨테이너이므로 원소가 하나의 메모리 블록에 할당된다. 그림처럼 vector는 앞쪽이 막혀 있는 형태로 앞쪽에는 원소를 추가/제거할 수 없으며 뒤쪽에만 추가/제거할 수 있다. 차례차례 원소를 추가하는 push_back()과 제거하는 pop_back()을 가진다. 또 첫 원소를 참조하는 front()와 마지막 원소를 참조하는 back()을 가진다. #include #include using namespace std; int main() { vector v; v.push_back(10); v.push_back(20); v.push_back(30); v.push_back(40); v.push_back(50); for(size_t..
vector의 간략한 소개 vector : 임의 접근 반복자를 지원하는 배열 기반 컨테이너이다 원소가 하나의 메모리 블록에 연속하게 저장된다 메모리 할당 크기를 알 수 있게 capacity() 멤버 함수를 제공한다 한 번에 메모리를 할당하고 사용할 수 있는 reserve() 멤버 함수를 제공한다 원소가 연속하게 저장되므로 원소에 접근하는 at()이나 v[i] 등의 연산은 속도가 빠르지만 insert(), erase(), push_back() 등이 빈번하게 호출되야 하는 프로그램이면 다른 컨테이너의 선택을 고려해야 한다 시퀀스 기반 컨테이너이다. 원소가 서로 상대적인 순서를 유지하므로 가장 앞 요소와 가장 뒤 요소를 참조하는 front(), back() 멤버 함수를 제공하고, 컨테이너 끝에 추가하고 제거하는 push_back(), ..
Bloom 구현 과정 이론에도 나와 있듯이 Bloom은 밝은 픽셀을 주변으로 흘리는 것이다. 쉽게 말하면 뽀샤시기능. 처음 해야 할 일은 Bright Pass를 통해서 주변으로 흘릴 픽셀들을 찾는 것이다. 평균 휘도 값과 HDR 처리된 이미지를 사용하기 때문에 HDR을 먼저 구현해야한다. // Bloom Compute Shader Texture2D HDRDownScaleTex : register(t0); StructuredBuffer AvgLum : register(t1); RWTexture2D Bloom : register(u1); [numthreads(1024, 1, 1)] void BloomReveal(uint3 dispatchThreadID : SV_DispatchThreadID) { uint2 vCurPixel = ..
STL 소개, 컨테이너, 반복자 STL은 Standard Template Library의 약자이다. 구성 요소 1. 컨테이너 (Container) : 객체를 저장하는 객체로 컬렉션 혹은 자료구조라고도 한다. 2. 반복자 (Iterator) : 포인터와 비슷한 개념으로 컨테이너의 원소를 가리키고, 가리키는 원소에 접근하여 다음 원소를 가리키게 하는 기능을 한다. 3.. 알고리즘 (Algorithm) : 정렬, 삭제, 검색, 연산 등을 해걸하는 일반화된 방법을 제공하는 함수 템플릿이다. 4.. 함수 객체 (Function Object) : 함수처럼 동작하는 객체로 operator() 연산자를 오버로딩한 객체이다. 5.. 어댑터 (Adaptor) : 구성 요소의 인터페이스를 변경해 새로운 인터페이스를 갖는 구성요소로 변경한다. 6.. 할당기..
함수 포인터 함수 포인터 : 함수의 시작 주소를 저장하는 포인터 함수의 이름은 함수가 시작하는 시작 주소이다. ex) void Print(int n) { cout
HDR 구현과정 2부 1부에서는 Compute Shader로 평균 휘도 값을 구하였다. 이제 이것을 ToneMapping 공식에 넣어서 사용하는 일만 남았다. ToneMapping 공식은 MG = Middle Grey, A = AverageLum, LS = LScale, W = White CLS = LDR로 변환하기 위한 HDR 색상 휘도 스케일 다음과 같은데 이를 코드로 표현하게 되면 float3 ToneMapping(float3 vHDRColor) { // 현재 픽셀에 대한 휘도 스케일 계산 float fLScale = dot(vHDRColor, LUM_FACTOR); fLScale *= g_fMiddleGrey / AvgLum[0]; fLScale = (fLScale + fLScale * fLScale / g_fLumW..