애니메이션도 Mesh의 Vertex가 움직이는 것이기 때문에,
VertexShader에서 작업한다.
애니메이션이 있는 것과 없는 것의 VertexShader 구조가 다르기 때문에,
언리얼에서는 Static(스태틱), Skeletal(스켈레탈)로 구분.
유니티에서는 MeshRenderer, SkinnedMeshRenderer로 구분.
버퍼 사용 코드
Buffer를 사용할 때는 요런 구조이다. (예시는 VertexBuffer를 사용할 때.)
D3D11_BUFFER_DESC처럼 설정해야하는게 구조체로 되어있어서, 자료형을 알아야한다는 게 친절하지는 않은 것 같다.
// 버퍼 변수 선언.
ID3D11Buffer* buffer;
// 버퍼 설정 값 지정.
D3D11_BUFFER_DESC vertexBufferDesc;
ZeroMemory(&vertexBufferDesc, sizeof(vertexBufferDesc));
vertexBufferDesc.ByteWidth = this->elementByteWidth * this->count; // 얼마만큼 읽을까.
vertexBufferDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER; // 정점 데이터 버퍼로 쓸 것이다.
vertexBufferDesc.CPUAccessFlags = 0; // 성능을 올리기 위해 CPU가 GPU 접근할 수 있게 할까? 우리가 구분 잘해서 코딩할 수 있으면 접근하게 만들어도 됨. 0은 못 접근하게.
vertexBufferDesc.MiscFlags = 0;
vertexBufferDesc.Usage = D3D11_USAGE_DEFAULT;
// 버퍼에 들어갈 데이터 담기.
D3D11_SUBRESOURCE_DATA vertexBufferData;
ZeroMemory(&vertexBufferData, sizeof(vertexBufferData));
vertexBufferData.pSysMem = data;
// 버퍼 생성.
HRESULT result = device->CreateBuffer(
&vertexBufferDesc, // 설정 값 지정했던 것과
&vertexBufferData, // 데이터 담았던 것을 기반으로
buffer.GetAddressOf() // 버퍼 변수에 버퍼 생성.
);
// 버퍼가 잘 생성되었는지 오류 검사.
if (FAILED(result))
{
MessageBox(nullptr, L"정점 버퍼 생성 실패", L"오류", 0);
return false;
}
이거를 클래스로 만들어서, 사용할 때 편리하도록 바꾸었다.
// 버텍스 버퍼 생성.
if (vertexBuffer.Initialize(device, vertices.data(), vertices.size(), sizeof(VertexUV)) == false)
{
return false;
}
작성한 코드
- IndexBuffer 만들어서 적용.
- 클래스 캡슐화 작업함. (VertexBuffer, IndexBuffer, InputLayout)
github.com/mingyu243/STL_GraphicsEngine2/tree/8bdfba0090551287bed6d96fb39f18f72ad93f97
IndexBuffer를 추가하고 코드를 정리했을 뿐이기에, 달라진 것은 없다.
이전에 만들었던 삼각형, 사각형 Mesh들을 왼쪽으로 위치 바꿔서 깔끔하게 정리했음.
'기타 > DirectX' 카테고리의 다른 글
[DirectX11] 12일차 (Depth 버퍼 만들기 / 디퓨즈 만들기) (0) | 2021.03.03 |
---|---|
[DirectX11] 11일차 (View, Projection 행렬 / 키 입력받아 카메라 이동, 회전) (0) | 2021.03.02 |
[DirectX11] 9일차 (DirectXTK, assimp 라이브러리 추가 / Mesh 불러오기) (0) | 2021.02.25 |
[DirectX11] 8일차 (DirectXTex 라이브러리 추가 / 텍스쳐 매핑하기) (0) | 2021.02.24 |
[DirectX11] 7일차 (Transform 클래스 구현하기 / Quad Triangle 그리기) (0) | 2021.02.23 |