728x90

게임 개발 자료/DirectX 스터디 21

행렬(Matrix) 스터디 - 실습 및 SimpleMath for DirectXMath

DirectX 행렬식 계산 편의를 위해 DirectXTK 의 DirectXMath 랩핑 모듈이 필요. SimpleMath.h/.cpp/.iln 파일들. 아래에서 다운로드 받을 수 있음. https://github.com/microsoft/DirectXTK/blob/3b3fd6cfc962c7ffdd03c311a6f6d6364ce96b0a/Inc/SimpleMath.inl SimpleMath.h 를 보면 아래와 같이랩핑한 DirectX 하위 클래스들을 확인할 수 있음. 여기서 Vector 시리즈와 Matrix 가 앞에서 학습한 행렬 수식과 관련된 클래스들. Matrix 메소드를 보면 앞에서 다뤘던 역행렬, 전치, Translation, Scale, Rotation 행렬 생성 시리즈들을 모두 볼 수 있음. 해..

행렬(Matrix) 스터디 - 좌표계 변환, World 변환, View 변환, Projection 변환 행렬

좌표계 변환 행렬 A좌표계에서 B좌표계로 변환하는 행렬. 좌표계 A에서 좌표계 B로의 변환 행렬은 일반적으로 각 축의 방향 벡터와 원점의 이동을 나타냄. v = [x, y, z, 1] | u_x u_y u_z 0 | | v_x v_y v_z 0 | | w_x w_y w_z 0 | | Qx Qy Qz 1 | 역기서 u, v, w 는 A좌표계의 방향 단위 백터를 B좌표계 기준으로 표현한 것. Q요소는 대상 좌표계 B 의 원점에서 A좌표계 원점의 좌표. 로컬 좌표계의 좌표들을 월드 좌표계로 변환해야할 때, 계층 순서대로 부모의 좌표계 SRT 행렬들을 곱해주는 방식으로 활용 됨. World 변환 행렬 로컬(모델)좌표계의 SRT 를 부모의 SRT 변환 행렬을 World(Root)가 나올 때까지 순서대로 행렬 곱연..

행렬(Matrix) 스터디 - 개요, 기초, SRT(Scale, Rotation, Translation) 변환 행렬

행렬에 대한 스터디 노트 항등행렬 (Identity Matrix) 주어진 행렬과 곱했을 때 아무 변화도 주지 않는 정사각 행렬. 역행렬 Inverse Matrix) 곱했을 때 항등행렬이 되는 역할을 하는 행렬. 우측 상단에 -1 로 표기. 전치행렬 (Transpose Matrix) 원래 행렬의 행과 열을 바꾼 새로운 행렬. 우측 상단에 T 로 표기. (Transpose) 직교행렬 (Orthogonal Matrix) 행렬의 행끼리 또는 열끼리 서로 수직(직교)하고 크기가 1인 행렬. (직교행렬의 역행렬은 전치행렬과 같다) A 1x4 행렬과 B 4x4 행렬의 곱셈 C[1,1] = A[1,1]*B[1,1] + A[1,2]*B[2,1] + A[1,3]*B[3,1] + A[1,4]*B[4,1] C[1,2] = A..

DirectX 11 스터디 - 렌더링 파이프라인 기초 핵심 정리

먼저 렌더링 파이프라인 기본 스테이지 순서 (중간중간 세부 스테이지는 스킵) IA > VS > RS > PS > OM Input-Assembler Stage Vertex Shader Stage Rasterizer Stage Pixel Shader Stage Output-Merger Stage 아래 3가지가 명령을 내리는 핵심. D3D11Device D3D11DeviceContext DXGISwapChain (DXGI (DirectX Graphics Infrastructure) : 기술 발전 속도가 느리거나 고전적인 요소들을 모아둔 기반 인터페이스.) Device 는 객체를 생성할 때 주로 사용. DevieContext 를 생성한 객체를 활용해서 명령을 내릴 때 주로 사용. SwapChain 은 전면/후면..

DirectX 11 스터디 - 래스터라이저 스테이트, 샘플 스테이트, 블렌드 스테이트

1. 래스터라이저 스테이트를 생성/설정하고 Render() 함수에서 전달해준다. ID3D11RasterizerState 를 생성하고, ~_DESC 에 설정값을 담아 생성한다. 그리고 Render() 함수에서 Pixel Shader 에 적용되도록 전달함. ComPtr _rasterizerState; void Game::CreateRasterizerState() { D3D11_RASTERIZER_DESC desc; ZeroMemory(&desc, sizeof(desc)); desc.FillMode = D3D11_FILL_SOLID; desc.CullMode = D3D11_CULL_BACK; desc.FrontCounterClockwise = false; // 시계방향/반시계방향 = Clockwise / Co..

DirectX 11 스터디 - 상수 버퍼 (Constant Buffer)

버텍스 데이터/매쉬 데이터를 건들지 않고, Shader 에 버퍼 데이터를 넘겨서 버텍스셰이더를 통해 변경되도록 처리해본다. 순서는 아래와 같다. 1. 상수버퍼 생성 2. DeviceContext 에 버퍼 매핑 3. 렌더 함수에서 버퍼 전달 아래는 수정한 코드 블럭들 // 멤버 선언 TransformData _transformData; ComPtr _constantBuffer; // 구조체 선언 struct TransformData { Vec3 offset; float dummy; // 16byte 로 정렬해야 하기 때문에 더미 멤버를 추가. }; // 버퍼 생성 void Game::CreateContantBuffer() { D3D11_BUFFER_DESC desc; ZeroMemory(&desc, siz..

DirectX 11 스터디 - 텍스쳐 UV맵핑 (ShaderResourceView)

이전 노트에서 인덱스버퍼까지 다룸. 2023.09.06 - [게임 개발 자료/게임 개발 스터디] - DirectX 11 스터디 노트 - 도형 만들어보기 (Create Geometry) + 인덱스 버퍼 + 버텍스 셰이더, 픽셀 셰이더 이번엔 Shader Resource View 를 생성해서 png 텍스쳐 파일을 로드하고 버텍스컬러 대신 uv 좌표를 입력해서 폴리곤 위에 텍스쳐를 띄워본다. 1. ShaderResourceVIew 생성 / 리소스 로드 2. 셰이더 수정 3. 랜더링 함수 호출 이 순서로 진행. 1. ShaderResourceVIew 생성 / 리소스 로드 ID3D11ShaderResourceView 생성. 이 때 텍스쳐 리소스도 같이 로드. // ComPtrPSSetShader(_pixelSha..

DirectX 11 스터디 노트 - 도형 만들어보기 (Create Geometry) + 인덱스 버퍼 + 버텍스 셰이더, 픽셀 셰이더

Vertex 구조체를 만들어 Vertex Data 를 구성하고, ID3D11Buffer 를 생성해서 ID3D11Device 의 CreateBuffer 함수로 VertexBuffer 를 만들어준다. void Game::CreateGeometry() { // VertexData { _vertices.resize(3); _vertices[0].position = Vec3(-0.5f, -0.5f, 0.f); _vertices[0].color = Color(1.f, 0.f, 0.f, 1.f); _vertices[1].position = Vec3(0.f, 0.5f, 0.f); _vertices[1].color = Color(0.f, 1.f, 0.f, 1.f); _vertices[2].position = Vec3(0..

DirectX 11 스터디 노트 - 장치 초기화 (Create Device)

DeviceAndSwapChain 생성 HRESULT hr = ::D3D11CreateDeviceAndSwapChain( nullptr, D3D_DRIVER_TYPE_HARDWARE, nullptr, 0, nullptr, 0, D3D11_SDK_VERSION, &desc, _swapChain.GetAddressOf(), _device.GetAddressOf(), nullptr, _deviceContext.GetAddressOf() ); D3D11CreateDeviceAndSwapChain 함수 (디스플레이 어댑터와 렌더링에 사용되는 스왑 체인을 나타내는 디바이스를 만듭니다.) https://learn.microsoft.com/ko-kr/windows/win32/api/d3d11/nf-d3d11-d3d11..

DirectX 11 스터디 노트 메모. Device, Context (230812)

Direct3D 11에서 디바이스는 ID3D11Device 인터페이스로 표시 대부분의 애플리케이션은 하나의 디바이스만 만든다. 아래 둘 중 하나를 호출해서 설치된 하드웨어 드라이버 중 하나에 대한 디바이스를 만든다. D3D11CreateDevice D3D11CreateDeviceAndSwapChain D3D_DRIVER_TYPE 플래그를 사용하여 드라이버 유형을 지정 디바이스 컨텍스트는 파이프라인 상태를 설정하고 디바이스가 소유한 리소스를 사용하여 렌더링 명령을 생성하는 데 사용 Direct3D 11은 두 가지 유형의 디바이스 컨텍스트를 구현 하나는 "즉시 렌더링용"이고 다른 하나는 "지연된 렌더링용" 즉각적인 컨텍스트(ImmediateContext)는 드라이버에 직접 렌더링 즉각적인 컨텍스트를 가져오는..

728x90
반응형