목록Game Dev/DirectX (21)
KoreanFoodie's Study
DirectX 11 2D 게임 프로그래밍 - 12. 행렬 결합 : 이동과 회전 행렬 결합하기 - 스케일 행렬에는 0이 들어가면 절대 안 된다 - 행렬은 교환 법칙이 성립하지 않는다 - 행렬 결합 순서는 스! 자! 이! 공! 부! (스케일, 자전, 이동, 공전, 부모) Execute.cpp D3DXMATRIX를 이용해서 행렬 연산을 통해 공간의 크기와 위치를 바꾸고, 회전을 시켜보자! // World : Scaling은 공간의 크기를 바꿀 수 있다. D3DXMATRIX S; D3DXMatrixScaling(&S, 100, 100, 1); std::cout
DirectX 11 2D 게임 프로그래밍 - 11. Constant Buffer 개념과 응용 Constant Buffer - HLSL에서 cbuffer타입으로 받을 수 있다. - 상수 버퍼는 반드시 16byte 단위로 정렬되어야 한다. - D3D11_USAGE_DYNAMIC은 GPU가 읽고, CPU가 쓰는 방식이다. World, View, Projection 행렬 적용하기 - Vertex Shader에서 mul() 함수를 통해 위치 벡터를 행렬과 곱하여 공간 변환시킬 수 있다. - DirectX는 행 우선, HLSL은 열 우선 방식으로 행렬을 생성한다. - HLSL에서는 row_maor 키워드로, DirectX에서는 Transpose로 행렬 생성 방식을 맞춰 줄 수 있다. Execute.cpp 먼저 Co..
DirectX 11 2D 게임 프로그래밍 - 10. 행렬을 이용한 공간 생성(view, projection) D3DXMATRIX를 활용한 공간 생성 - D3DXMATRIX는 총 16개의 float형 데이터로 구성되어 있다. (정의 확인) - 행렬은 항상 단위행렬로 초기화해야 한다. (D3DXIdentityMatrix 함수) - 공간이 커지거나 이동하면 내부의 데이터도 동일하게 변형된다. (위치나 벡터 데이터 크기) Projection 알아보기 - 원근투영은 절두체 모양의 시야 공간을 가진다 - 직교투영은 직육면체 모양의 시야 공간을 가진다 단축키 - 영역 지정 후 Ctrl + H 단축키를 누르면 해당 범위의 특정 단어들을 바꿀 수 있다. (Alt + A 누르면 모두 바뀜) 좌표계 - OpenGL : RH..
DirectX 11 2D 게임 프로그래밍 - 9. Index Buffer & 공간 변환 Index Buffer 만들고 세팅하기 : 중복되는 정점을 제거하기 위해 사용한다. 공간이란 무엇인가? : 공간은 행렬로 표현됨. Local - World - View - Projection 순으로 흘러감. 이때 Projection은 3D 데이터를 2D 데이터로 변환시키는 작업임. (더 자세한 내용은 주석으로) 참고 : Index Buffer를 활용해 원 그려보기 index buffer : 요즘은 4바이트, index는 unsinged int 형. 중복 정점을 줄이기 위해 사용. D3D11_USAGE_IMMUTABLE : GPU - Read, CPU - 접근 불가 Execute.cpp 지난 글에서 삼각형 2개를 이용해..
DirectX 11 2D 게임 프로그래밍 - 8. Pixel Shader Stage & 도형 그리기 Rasterizer : 3D 데이터를 2D 데이터로 바꿔주는 것. VS 단계에서 정규화한 공간을 다시 보여줄 영역만큼 다시 늘려준다. 또한 Pixel Shader 단계로 넘어갈 픽셀들을 지정해준다. PixelShader 생성과 연결 : SV_Target 시멘틱을 사용하여 현재 세팅된 메인렌더 타깃을 사용하라고 알려주어야 한다. 화면에 픽셀 단위로 생상을 출력하는데, Pixel Shader는 Rasterizer가 지정한 픽셀 개수만큼 호출된다. 사각형 만들기 : 사각형을 만들기 위해서는 정점 6개가 필요하다. 왜냐하면 삼각형 2개를 붙여 만드는 형태이기 때문! 여러 줄 동시에 편집하기 : Shift + Al..
DirectX 11 2D 게임 프로그래밍 - 7. Vertex Shader Stage 이번 글에서는 hlsl을 이용해 간단한 Vertex Shaer를 만드는 실습을 해 보도록 하겠다. HLSL은 High Level Shader Language로, 예전에 어셈블리어로 만들던 것을 더 사람이 보기 쉽게 표현한 언어라고 보면 된다. 프로젝트에 HLSl탭으로 생성한 후, 프로젝트에서 제외시켜서 사용한다. (컴파일에 용이) 알아두어야 할 개념 : 1. Semantic : Semantic은 데이터의 출처와 역할에 대한 분명한 의미를 부여하기 위한 키워드이다. Color.hlsl struct VertexInput { // float4는 vector4와 같음 // Semantic : 데이터의 출처와 역할에 대한 분명한..
DirectX 11 2D 게임 프로그래밍 - 6. Input Assembler Stage 세팅하기 Rendering Pipeline에는 다음과 같은 스테이지가 있다. IA - VS - RS - PS - OM : 이 중, 오늘은 IA 스테이지인 Input Assembler Stage를 세팅하도록 하겠다. 먼저, DirectX의 기본 데이터인 정점(Vertex)를 만들고, 그 정점들을 파이프라인에 연결할 Buffer형 자원들 만든다. 그 후, Device Context를 활용하여 파이프라인에 Buffer형 자원을 세팅한다. 마지막으로 Primitive Topology 정보로 어떻게 정점을 연결할지 세팅할 수 있다. 알아두어야 할 개념 : 1. vector 란 무엇인가? 2. D3D11_USAGE에 대해 조사..
DirectX 11 2D 게임 프로그래밍 - 5. Window 창에 DirectX 연결(연동)하기 이번 시간에는 이전에 띄웠던 Window 창에 DirectX요소를 넣어 연동해본다. 알아두어야 할 개념 : 1. Design Pattern 조사 2. 정적 변수 복습 -> static member는 class 내부에 하나 밖에 없으며, 클래스에서 공유하는 자원이다. 3. 16진수로 표현되는 색상 정보 조사해보기 -> D3DXCOLOR 변수는 실제로 float[4]로 표현 가능 4. const int* vs int* const 차이? -> 왼쪽은 포인터가 상수인 것. 따라서 가리키는 것을 바꿀 수 있고, 참조하는 변수의 값을 바꿀 수는 있지만, *ptr = new_value식으로는 바꿀 수 없다. 오른쪽은 상..
DirectX 11 2D 게임 프로그래밍 - 3. ID3D11Device, SwapChain, Resource View 개념 및 간단한 초기화 Grahpics.h, Graphics.cpp 파일을 이용하여 백버퍼를 만들고 ID3D11Device(Context)등의 파일들을 초기화해 보자. 알아두어야 할 개념 : 1. Device와 DeviceContext, SwapChain 초기화하면서 사용한 옵션 정리 : 주석으로 정리 2. bpc(bit per color), Anti Aliasing 3. UUID, GUID 4. dangling pointer Graphics.h #pragma once // final : 더는 상속될 수 없다 class Graphics final { public: Graphics(); ..
DirectX 11 2D 게임 프로그래밍 - 2. Direct SDK 연결, Double Buffering 이번 시간에는 기본적인 개념과 Graphics를 다루는 기초 개념에 대해 학습한다. Direct SDK연결은 라이브러리 연결과 Graphics.h의 코드 주석을 통해 익힐 수 있다. 알아두어야 할 개념으로는 Double Buffering이 있다. stdafx.h stdafx.h에 Graphics.h에서 사용할 라이브러리들을 연결해 준다. #pragma once //Window #include #include //DirectX #include #include #include // 라이브러리를 연결하는 전처리기 코드의 표현 #pragma comment(lib, "dxgi.lib") #pragma com..