Graphics
-
[21] - My First Triangle - 2Graphics 2021. 7. 22. 21:30
Pixel Shader를 만듭니다. 이전에 다음과 같은 오류를 얻고 슬퍼했기 때문입니다. PixelShader.hlsl를 Property에서 PixelShader로 명시를 해주고 Output 위치를 Project로 잡아주는 것은 Vertex Shader와 거의 같습니다. 이 PixelShader의 Output은 Pixel의 색을 설정해 주기 때문에 어떤 Colour value일 것입니다. RGBA값이니 float4입니다. Rasterizer가 pixel의 위치를 결정하기 때문에 Pixel Shader에서는 Pixel의 위치가 필요하지 않습니다. 거의 완벽하게 Vertex Shader 와 같은 수순입니다. Blob은 따로 만들지 않고 그대로 사용하게 되는데 이걸 ComPtr로 설정했으니 overload된 ..
-
[20] - My First Triangle - 1Graphics 2021. 7. 22. 17:43
마침내, 뭔가 그려볼 준비가 끝난 것 같습니다. Graphics.h에 작은 함수를 만들고 여기에 모든 것을 기입하도록 하겠습니다. 구조에 관해서는 당장에 중요한 문제가 아니기 때문에 고려하지 않도록 하겠습니다. 감이라도 잡으면 좋을 것 같습니다. 뭘 어떻게 접근해야 삼각형을 그려볼 수 있을까요? 이전에 모든 Resources를 분배하는 역할은 Device가 한다고 했습니다. Context는 파이프 라인을 Configure하거나 Rendering Command를 Issue하는 역할을 했습니다. 그렇다면 Context의 Object인 pContext가 뭔가 답을 알고 있을 것 같습니다. 그런데 구태여 MSDN까지 달려가지 않더라도 감은 잡을 수 있습니다. 무작정 값을 집어 넣는다고 그릴 수 있을 것 같지는 ..
-
[19] - ComPtr and Smart PointerGraphics 2021. 7. 21. 19:55
Smart pointer와 COM Pointer에 대해서 공부합니다. 이는 Resource Management 또는 자원 관리는 조금 더 안정적이고 효과적으로 할 수 있도록 도와주는 역할을 합니다. 기존 코드를 보면 어떤 메모리 공간을 할당 받았을 때 반드시 수동으로 해제를 해주는 모습을 확인할 수 있었습니다. 그래서 약간의 변화가 생겼습니다. 그리고 보는 바와 같이 해당 Pointer의 주소가 필요할 땐 Get함수를 호출해서 사용합니다. 그냥 Standard Library의 Unique pointer를 사용하면 될 것 같은데 왜 이런 짓을 하는 걸까요? 일반적으로 위의 함수에서도 그렇지만 Interface를 Require할 땐 pointer를 넘겨주어야 합니다. D3D에선 대체로 Pointer의 Poi..
-
[18] - Debug Layer DiagnosticsGraphics 2021. 7. 21. 16:55
오류가 발생했는데 무슨 오류인지, 어디서 발생한 것인지 모르면 자살하고 싶을 수도 있습니다. 이를 막기 위해 디버그 기능을 구현할 수 있습니다. (8) C++ 3D DirectX Tutorial [Debug Layer Diagnostics] - YouTube 지금껏 구현한 코드는 대체로 잘 동작했으나 치명적인 문제를 안고 있었습니다. 만약, 무언가를 초기화하는 함수가 하나라도 엇나갔을 경우에 알아차릴 수 있는 방법이 없다는 점입니다. 당장에 CreateDeviceSwapChain이나 Window Handle을 초기화하는 과정에 마음대로 적당한 상수를 넣으면 오류는 없지만 동작은 하지 않는 가슴 설레는 현상을 목격할 수 있습니다. 잠깐 다시 D3D11CreateDeviceAndSwapChain 함수를 다시..
-
[17] - Device InitGraphics 2021. 7. 20. 21:05
참고 : (6) C++ 3D DirectX Tutorial [Device Init / Fill Screen / Present] - YouTube. hw3d/hw3d at T13-End · planetchili/hw3d (github.com) 이제 Window를 만드는 기초적인 내용과 그래픽 파이프라인, 화면이 어떻게 구성되는지 등을 배웠으니 파이프 라인을 구축할 차례입니다. 전에도 보았던 그림을 보면 D3D는 대부분 Device가 관할합니다. 따라서 가장 먼저 해야 할 일은 Device를 만드는 일이고 D3D11CreateDeviceAndSwapChain으로 구현됩니다. 보면 이 함수의 Parameter가 쭉 나옵니다. 필요한 오브젝트들을 확인할 수 있고 만들어 줄 필요가 있습니다. ID3D11Devic..
-
[16] - Swap ChainGraphics 2021. 7. 19. 22:00
D3D는 일반적으로 COM 바탕으로 Object Oriented Architecture의 형태를 갖추고 있습니다. 이제 Device라는 개념이 등장합니다. 조금 복잡한 개념이지만 당장은 Rendering을 하기 위해 필요한 자원들을 배분해주는 역할을 수행한다고 알면 될 것 같습니다. 이 Device는 '논리적 그래픽 카드'이며 물리적 그래픽 카드나 Software Emulation Layer의 도움을 받기도 합니다. 앞으로 D3D에서 graphics Pipeline을 구축할 때, 이 Device의 Object를 통해 필요한 자원들을 할당할 것입니다. 그 중에서도 Swap Chain은 다중 프레임 버퍼[Multiple frame buffer]를 갖고 있는데 이 각각의 프레임 버퍼에 접근하기 위해 오브젝트들..
-
[15] - COM objectGraphics 2021. 7. 19. 16:43
여기까지 개념을 비롯한 이론을 알았으면 Graphics Pipeline을 시작해야 합니다. 그러나 배웠던 것은 OpenGL ES이고 하고 싶은 건 DirectX이기 때문에 다시 여기로 돌아올 수밖에 없습니다. ChiliFrameWork를 토대로 D3D를 활용하는 아주 기본적인 내용을 익혔습니다. 이제 본격적으로 Microsoft에서 제공하는 COM object를 비롯한 내용을 익혀나갈 것입니다. 다행히 COM을 완전히 그리고 완벽히 이해할 필요는 없습니다. 대부분의 내용은 몰라도 사용할 수 있다고 합니다. 그래도 기본은 알고 넘어가는 편이 좋습니다. 이를 위해서는 Binary Compatability에 대해서 알고 가는 편이 좋겠습니다. C++는 기본적으로 바이너리 데이터에 대한 마땅한 지시가 없기 때문..
-
[14] - Vertex processing - 2Graphics 2021. 7. 17. 01:25
삼차원 Cartesian coordiantes system에서는 Right-handed[RHS] 또는 Left-Handed[LHS]를 사용합니다. RHS에서는 오른손 엄지가 향하는 방향이 z축의 양의 방향이고 남은 손가락이 y축에서 x로 말려서 들어간다고 합니다. 솔직히 강의 시간에 그림을 봐도 직관적으로 와 닿지도 않고 무슨 말인지도 몰랐습니다. 그래서 시험을 볼 때도 사실 마음대로 바꿔서 생각했습니다. 차라리 RHS를 왼손의 엄지, 검지, 중지를 서로 직각을 이루도록 펼치고 중지-x, 검지-y, 엄지-z라고 두는 편이 직관적이고 좋았습니다. LHS는 이 반대니까 또 그림을 그릴 필요는 없습니다. 우리가 보통 OpenGL을 사용한다면 RHS를 이용하게 되고 Direct3D를 사용하면 LHS를 사용하게 ..