전체 글
-
[ Open Data Structures ] - Hash Table ( Chaining )DataStructure 2021. 8. 19. 01:09
* hash 함수는 다음에 배워 구현합니다. 이 챕터로써는 해시 함수를 포함한 코드를 실행시킬 수 없습니다. (Random numbers plucked from the atmosphere (irishtimes.com)) -> Atmospheric noise Add Operation Hash table은 List를 요소로 갖는 배열 t로 구현을 합니다. 격납되어 있는 모든 요소의 수를 n으로 추적합니다. Remove Operation Multiplicative Hashing * C/C++기준입니다. 다른 프로그래밍 언어에서는 Undefined Behaviour일 수 있습니다. 또한, 여기서 등장하는 HashCode(x)와 Hash(x)상당히 혼란스럽습니다. Hash(x)는 x에게 부여된 어떤 수를 갖고 배..
-
[49] - Texture - 1Graphics 2021. 8. 17. 17:47
육면체는 총 8개의 Vertices가 있고 Vertex Shader - Tessellation - Geometry Shader 등을 거쳐서 Fragment/Pixel Shader에 이르면 최종적인 외형을 결정하게 됩니다. 최종적 외형[最終的外形]이라는 것은 Colour, Illumination, Texture 등등을 이릅니다. 오늘은 Image Texturing에 대한 공부를 할 것입니다. Rasterization에서 Fragment를 생성했으니 이들은 다음 Shader로 넘어갑니다. 그 전에 Fragment Shader와 Pixel Shader의 차이점이 있는지 확인해 봅니다. 크게 다른 점은 없고 OpenGL과 D3D의 단어 선택적 차이와 Graphics Pipepline을 구성하는 약간의 구조적인 ..
-
[48] - RasterizationGraphics 2021. 8. 13. 22:30
Rasterization Texture에 대한 공부를 하려면 Rasterization Stage에 대한 공부를 해야 합니다. Rasterization 전 단계까지 예를 들어서 정점[Vertex]이 여덟 개인 육면체를 CPU로부터 넘겨받았다고 가정하겠습니다. IA Stage에서 받은 이 Vertex들은 삼각형의 조각으로 정리가 됩니다. 한첨 전에 배운 것을 떠올려 보면 Vertex의 stride를 정의하고 Description을 정의하던 파트가 분명 존재했습니다. figure 1b의 ByteWidth, StrcutureByteStride와 같은 Description을 통해서 버퍼의 정보를 정해주어 전달을 받은 Vertex를삼각형으로 재구성합니다. 이렇게 처리된 Vertex들을 Rasterization 단계..
-
[47] - Bindable/Drawable System - 3Graphics 2021. 8. 12. 21:44
절차지향적으로 만들었던 코드를 객체지향적으로 재구성하면서 어떻게 코드를 이해하면 좋을지 감을 잡기가 어려워졌습니다. 따라서 변화 이전의 절차 지향적 코드와 비교를 해보면서 이 엔진을 어떤 식으로 응용하면 좋을지 고민해봅니다. Window 나름대로 분석해본 결과, 이 ChiliFramework는 Window 하나를 화면에 띄우면서 시작합니다. 따라서 가장 먼저 모든 절차에서 분리할 수 있는 요소는 Window를 초기화하는 과정이라고 할 수 있습니다. 그렇기 때문에 App class가 만들어지는 순간 Window의 인스턴스를 만드는 과정에 따로 Encapsulate된 상태로 존재하는 것입니다. 동시에 Window class 안에는 키보드, 마우스, Graphics를 비롯한 필수적인 요소들이 존재합니다. 이들..
-
[46] - std::optionalGraphics 2021. 8. 12. 14:09
Visual Studio 같은 IDE에서는 C++11 표준이나 C++17 표준을 쉽게 선택할 수 있지만 G++을 통해서 std::optional을 접근하려면 compile 옵션에서 따로 설정을 해주거나 expeimental에 있는 optional을 include해야 합니다. std::optional의 주된 사용처는 함수의 반환 값입니다. 예를 들면 외부에서 파일을 불러온다고 했을 때 사용할 수 있을 것입니다. 위와 같이 파일을 열고 test.txt 내의 모든 string을 반환하는 함수가 있습니다. 만약 파일이 존재하지 않는다면 std::string의 기본 생성자를 반환하게 될 것입니다. 파일이 존재한다면 string을 iterator를 사용해서 만들게 될 것입니다. 메인 함수 부에 이렇게 간단한 코드를..
-
[45] - Multithreading Execution PolicyGraphics 2021. 8. 11. 23:57
Cppreference를 통해 C++의 다양한 기능들을 살펴보면서 자주 마주쳤던 단어인 Execution policy입니다. 예를 들면 다음과 같은 곳에서 자주 등장했습니다. Template Parameter list를 보면 나옵니다. 사족을 다 떼고 Execution Policy의 핵심만 정리하면 어떤 알고리즘에 대해서 다중코어를 사용하여 병렬처리를 할 수 있도록 만든다는 것입니다. 여태, 이 부분을 무시하고 알고리즘을 작성했기 때문에 Defualt 값으로 모든 알고리즘은 Single Threaded이며 단일 코어에서 동작했습니다. 그러나 Execution Policy를 통해서 다른 알고리즘을 선택한다면 다중 코어로 알고리즘을 처리하게 됩니다. 이 전에 실험적 코드를 작성하며 한 번 사용한 적이 있는 ..
-
[44] - Container Adaptors, Priority QueueGraphics 2021. 8. 11. 16:25
이건 에 있는 건 아닙니다. 각각 필요한 헤더가 다릅니다. 이들은 기본적으로 어떤 컨테이너들을 감싸는 Wrapper에 가깝습니다. 아래가 Container Adaptors의 종류입니다. 이 어댑터들은 다음과 같은 컨테이너들을 감쌀 수 있습니다. Container Adaptors에 대한 설명란에 provide different interface for sequential containers라고 명시되어 있기 때문에 다음과 같은 associative container에는 해당 사항이 없을 것입니다. 이 Container Adaptors는 상당히 엄격하고 제한된 기능만을 제공합니다. 예를 들면 std::stack이 std::vector를 wrap하고 있더라도 결코 std::vector의 random acces..
-
[43] - Heap OperationsGraphics 2021. 8. 11. 15:41
자료구조나 알고리즘에서 등장하는 heap이 맞습니다. Memory의 heap을 가리키는 말이 아닙니다. 당시에 배웠던 heap의 성질에는 다양한 것들이 있는데 그 중에 기억해야 할 것 중 하나는 heap의 최상단에 가장 큰 값이 오는 max heap, 반대의 min heap이 존재한다는 것입니다. heap은 주로 tree의 형태로 개념화/상징화 됩니다. 이것은 Data Structure에서 더 자세히 다루기 때문에 여기서 할 필요는 없을 것 같습니다. Data structure를 공부하면서 배우는게 낫지만 heap이 중요한 이유는 이를 바탕으로 priority queue를 만들 수 있다는 점입니다. 특히 알아두면 좋은 것이 'A-star pathfinding' Algorithm에서도 쓰이며 heap-so..