Graphics
-
[13] - Vertex processing - 1Graphics 2021. 7. 15. 17:43
world transform 등 vertex에 대해 여러 계산을 하여 처리를 했습니다. 이러한 Vertex Processing이 GPU 내부에서 어떤 방식으로 동작하는지 Rendering pipeline과 함께 알아보기로 합니다. GPU내부에서는 Rendering이 파이프라인 구조를 통해서 완성됩니다. 각 단계[stage]의 출력[output]은 다음 단계의 입력[input]으로 사용됩니다. GPU Rendering Pipeline은 다음과 같은 과정을 포함합니다. 그래픽 카드의 종류, 소프트웨어의 종류에 따라서 다음 단계는 때때로 생략이 되기도 하지만 보편적으로 혹은 비교적 최신의 그래픽 파이프 라인은 다음과 같은 절차를 밟습니다. Vertex Specification > Vertex Shader > ..
-
[12] - Space and transforms - 2Graphics 2021. 7. 14. 21:37
이번에는 이차원 공간이 아닌 삼차원 공간에서 물체들을 다루어 보도록 합니다. Scaling Scaling은 이차원 공간과 극적으로 대비되는 부분은 없습니다. 단순히 요소가 하나 더 증가했을 뿐입니다. 여기서 scaling factor가 서로 같다면 이 scaling은 "uniform scaling"이라고 부릅니다. 그것이 아니라면 "non-uniform"이라고 합니다. 이 factor가 1보다 크다면 물체는 확대가 될 것이고 0보다 크고 1보다 작다면 물체는 줄어들 것입니다. Rotation 이차원 공간에서 회전을 하기 위해서는 점을 기준으로 회전했습니다. 하지만 삼차원 공간에서는 점이 아니라 축을 두고 회전을 합니다. 따라서, 삼차원 공간 상의 회전은 회전하는 축을 기준으로 각기 다른 회전의 양상을 보..
-
[11] - Space and transforms - 1Graphics 2021. 7. 13. 21:58
D3D를 향해 무작정 달리는 것도 나쁘지 않다고 생각합니다. 지금까지는 D3D의 아주 기본적인 구성에 대해 이해하려는 시도가 있었습니다. Graphics Pipeline을 비롯한 각종 D3D의 본편으로 들어가기 전에 몇 가지 Game Graphics와 관련한 정보를 검토해보는 편이 좋을 것 같습니다. 수업을 들었을 때, OpenGL ES를 바탕으로 공부했기 때문에 D3D와 약간의 차이가 있을 수 있습니다. 하지만 보편적인 수학엔 차이가 없습니다. 화면의 좌상단을 기준으로 수평선을 x axis, 수직선을 y axis로 설정합니다. x는 화면의 우측이, y는 화면의 하단이 양의 방향입니다. 좌표를 표현함에 있어서 행렬과 벡터를 사용하게 될 것입니다. 가령, 보편적으로 이차원 공간 상의 한 점(Vertex)을..
-
[10] - App classGraphics 2021. 7. 13. 15:05
(2) C++ 3D DirectX Tutorial [App class / PeekMessage] - YouTube / hw3d/hw3d at T10-End · planetchili/hw3d (github.com)/ 여태껏 간단한 테스트 코드를 직접 WinMain함수의 Message Pump에 끼워 넣는 방식으로 수행했습니다. 그러나 현재보다 규모가 커지고 복잡해지면 모든 코드를 이 Message Pump에 끼워 넣기는 까다롭고 정신이 없을 것입니다. 그래서 게임이나 다른 논리들을 따로 분리해서 Window Interface와 통신을 하는 방향으로 구조를 짜는 편이 훨씬 낫습니다. 추후엔 그래픽 렌더링까지 고려해야 한다는 점을 염두에 두고 구조를 정리해 나갑니다. App class Constructor와 ..
-
[9] - MouseGraphics 2021. 7. 12. 22:57
Keyboard와 닮은 부분이 많습니다. Inner Class로 Event를 가지고 있다는 점, Copy assignment, Copy constructor가 배제되어 있다는 점까지 같습니다. 역시. Event를 받는 FIFO Queue를 가지고 있습니다. Mouse를 위한 상태 변수( State Variable )를 몇 개 갖고 있습니다. 마우스 커서의 X, Y위치, 왼쪽/오른쪽 버튼의 상태입니다. Event를 위한 Queue는 키보드와는 다르게 단 하나만을 갖고 있습니다. 이유는 당연히 마우스에는 Character-Event의 구분이 없기 때문입니다. 여러가지 마우스가 갖고 있을 수 있는 상태의 타입을 확인할 수 있습니다. 마우스의 위치를 각각 X, Y를 따로 받을 수도 있으나 pair로 받을 수도 ..
-
[8] - KeyboardGraphics 2021. 7. 12. 21:00
Window가 하나 있으면 다양한 기능들을 Encapsulate한 상태로 갖고 있는데, Mouse와 Keyboard의 Input을 관리하는 역할을 수행하는 기능도 포함되어 있습니다. 키보드가 Window Side와 Client(Game Logic 또는 사용자이지만 사실 Game logic이라고 하는 편이 더 명확할 것 같습니다.) 사이에서 다양한 통신을 한다면, Client가 관심을 가지는 것은 어떤 버튼이 눌렸을 지에 관한 Message일 것입니다. 전에도 보았던 것처럼 Window는 대부분의 경우 Event 기반으로 동작을 합니다. Client 측에서 어떤 버튼을 누르면 키보드에 있던 Queue에서 Message를 꺼내오거나 한다는 뜻입니다. 키보드라고 썼지만 이는 어떤 구조를 의미하는 것이지 물리적..
-
[7] - ICONGraphics 2021. 7. 10. 16:53
(How to create an icon file?) Solution Explorer에 Resource Files(리소스 파일)을 우클릭하고 Add->Resource합니다. 여러가지가 있는데 그 중에 ICON을 누르고 이미 만들어 둔 Icon file이 있으면 Import 이후 적당한 크기로 자릅니다. Resouce.h이 생성되고 Solution Explorer에 *.ico가 보이면 성공입니다. 그런데 좀 화가 많이 나는 부분입니다. Resource.h에 보면 icon에 대한 고유한 값이 define되어 있는 것을 확인할 수 있습니다. 이것은 없애거나 임의로 조정하면 오류가 생기니까 가급적 그대로 둡니다. 그리고 편집기가 열려있는 상태면 어디선가 반드시 오류가 납니다. 이유는 모르겠습니다. 그냥 새로운 ..
-
[6] - Error HandlingGraphics 2021. 7. 10. 16:18
Error Handling 이것은 언제나 열을 받게 하는 주제가 아닐 수 없습니다. 그럼에도 불구하고 무슨 일이 일어나고 있는지 판단하려면 싫어도 할 수밖에 없습니다. C++ 3D DirectX Tutorial [Custom Icons / Error Handling] - YouTube 그리고 hw3d/hw3d at T7-End · planetchili/hw3d (github.com) planetchili/hw3d C++ 3D graphics engine under Direct3D 11. Developed in a Planet Chili video tutorial series that can be found on YouTube. https://youtu.be/_4FArgOX1I4 - planetchili/..