전체 글
-
[53] - Lighting(Illumination) - 2Graphics 2021. 9. 15. 18:18
이전에 이론적으로 Phong 모델이 무엇인지 공부했습니다. 이번에는 D3D을 바탕으로 구현한 Engine을 뜯어보면서 어떤 식으로 구성하면 좋을지 배워봅니다. (hw3d/hw3d at T24.1-End · planetchili/hw3d (github.com)) Chili에게 많은 Insight을 얻을 수 있습니다. 비록 영어이긴 하지만 양질의 정보를 제공해줍니다. ((28) C++ 3D DirectX Tutorial [Dynamic Lighting / Graphics Debugger] Part 1 - YouTube) 3D fundamental 시리즈는 솔직히 Fundamental이라고 볼 수 없는 난이도였습니다. 설명도 부족하고 알아듣기도 어려워서 3D graphics의 기초는 대학 강의시간에 배웠던 것..
-
[52] - Lighting(Illumination)Graphics 2021. 9. 13. 21:43
일반적으로 빛을 받는 부분은 밝고 빛을 덜 받는 부분은 상대적으로 어둡습니다. 물체의 뒷면은 빛이 잘 들지 않아 그림자가 생기기도 합니다. 그림자는 따로 배우고 빛이 받는 부분에 대한 Shading을 배워봅니다. Illumination은 기본적으로 광[光]의 변화 및 조건에 따른 색깔[Colour]의 변화에 주된 목적이 있습니다. Phong model 가장 널리 알려지고 자주 사용되는 대표적인 Lighting 모델입니다. 물론 Phong model보다 나은 모델들이 여러 존재하긴 하지만 배우는 입장에선 기본부터 하는 것이 좋다고 생각합니다. Physically Based Rendering(PBR)이라는 스키마도 존재하긴 합니다. 이 Phong model은 크게 네 가지 요소들로 이루어져 있습니다. 1. ..
-
[정리] 퍼즐 조각 채우기정리 2021. 9. 10. 13:30
table에 있는 조각들을 game_board의 빈 칸에 채워 넣으면 되는 문제입니다. 제한 조건들이 있습니다. 정리해보면 1. 연속된 빈 칸에는 딱 맞는 조각만 채워 넣을 수 있으며 2. 좌우 대칭으로 조각을 바꾸는 것은 금지입니다. 3. table의 조각을 회전하여 game_board의 빈 칸에 맞출 수 있으면 인정입니다. 반환 값은 가장 많이 채워 넣은 빈 칸의 개수입니다. 더 얻어볼 수 있는 정보는 테이블은 모두 정방형 격자 모양이라는 사실과 0이 있으면 빈 칸, 1이 있으면 비어있지 않은 칸이라는 점입니다. C++을 사용하기 때문에 테이블의 상태는 이차원 벡터의 형태로 주어졌습니다. 또 한 가지 문제를 풀 때 늘 유념하는 것이 있는데 문제의 풀이가 복잡해지고 컨테이너 안에 또 다른 컨테이너가 있..
-
[ Anything ] - Iterator - 2C++ 2021. 9. 8. 14:13
Iterator은 크게 Input, Output, Forward, Random Access, Bidirectional iterator로 갈래가 나누어 집니다. 이전엔 input/output에 대해 공부를 했습니다. 나머지도 살펴보도록 합니다. Forward Iterator 대표적으로 사용하는 Algorithm library의 함수 중 하나입니다. 온통 Forward iterator 타입의 오브젝트들로 가득합니다. 이전에 보았던 iterator들의 hierarchy관계도를 보면 알 수 있지만 Forward iterator는 input/output iterator의 조합과 같습니다. input iterator의 access와 output iterator의 assign을 모두 지원한다는 뜻이기도 합니다. 주목..
-
[ Anything ] - Iterator - 1C++ 2021. 9. 7. 17:13
C++에서 자주 사용하는 Iterator입니다. 이 Iterator는 우리가 사용하거나 만든 알고리즘을 STL[Standard Template Library]와 이어주는 일종의 다리의 역할을 하며 C++STL의 주축을 이루는 요소 중 하나입니다. 이 Iterator는 Container의 특정한 메모리 주소를 가리킬 수 있으며 종류에 따라서 Read/Write을 수행할 수 있습니다. 예를 들어서 다음과 같은 Class을 임의로 만들었다고 가정해봅시다. 물론 불완전하긴 하지만 STL의 Algorithm의 여러 함수가 요구하는 Iterator들이 구현이 되어 있기 때문에 Vertex에 필요한 operator을 구현하기만 하다면 정렬이나 제거, 복사 등 유용한 기능들을 활용할 수 있습니다. 그렇기 때문에 Ite..
-
-
[51] - imguiGraphics 2021. 8. 28. 23:23
(ocornut/imgui: Dear ImGui: Bloat-free Graphical User interface for C++ with minimal dependencies (github.com)) Imgui이라고 하며 GUI[Graphical User Interface]입니다. IM은 Immediate Mode의 약자이며 GUI는 흔히 쓰는 그대로 Graphical User Interface입니다. 대부분 C++로 작성되었으며 Platform independent입니다. 따라서 OpenGL이든 D3D이든 Vulkan이든 적당히 버무려서 사용할 수 있습니다. IMGUI의 Core을 떼어다가 적당히 손을 보면 된다는 뜻입니다. 게다가 이미 만들어져 있는 특정 플랫폼을 위한 Adapter들도 상당히 많이 ..
-
[50] - Texture - 2Graphics 2021. 8. 26. 23:17
Texture에 대한 약간의 공부를 진행했습니다. Texture, texel, pixel 등 이들이 어떻게 관리되고 어떤 식으로 Mapping이 되는지 개략적인 이해는 했습니다. D3D에서는 이 Texture을 어떤 식으로 관리할 수 있을지 배워봅니다. Pixel은 모호하게 표현하면 하나의 이미지와 같습니다. 따라서 우리는 가장 먼저 이미지를 우리의 Engine에 불러올 수 있도록 할 라이브러리가 필요합니다. 여기에는 많은 Tool이 존재합니다. DirectX Toolkit에도 이미지를 불러올 수 있는 기능이 존재하지만 이것을 사용하게 되면 Texture에 대한 많은 부분이 Black Box인 상태로 남기 때문에 공부를 하는 목적에 부합하지 않습니다. 따라서 이는 협상의 여지가 없이 GDI Plus라는 ..