Wrapping Class - Vertex
세상에 처음 들어보는 개념이 나왔다………
- 기본 자료형 같은 데이터를 객체에 넣기 위해 제공하는 함수들
이라는 개념을 갖고있다. 쉽게 풀어쓰면
필요한 데이터를 받거나 쓰기 위해 데이터 형태를 세팅해 제공하는 서비스
라고 한다.
자세한 개념은
1.기본 자료형은 객체 지향 프로그래밍의 객체와는 다른 개념이다.
2.기본 자료형은 속성만 포함하기 때문에 처리에 한계가 있다.
3.단순 연산만 수행한다.
4.대소문자 변환 자료형의 변환 등과 같은 부가적인 처리를 위해서 사용하는 클래스다.
지금까지 썼던 Vertex에 관한 것들을 Wrapping 하겠다.
Vertex.h
#pragma once
struct VertexColor final
{
VertexColor()
: position(0, 0, 0)
, color(0, 0, 0, 0)
{}
VertexColor(const D3DXVECTOR3& position, const D3DXCOLOR& color)
: position(position)
, color(color)
{}
D3DXVECTOR3 position;
D3DXCOLOR color;
static D3D11_INPUT_ELEMENT_DESC descs[];
static const uint count = 2;
};
struct VertexTexture final
{
VertexTexture()
: position(0, 0, 0)
, uv(0, 0)
{}
VertexTexture(const D3DXVECTOR3& position, const D3DXVECTOR2& uv)
: position(position)
, uv(uv)
{}
D3DXVECTOR3 position;
D3DXVECTOR2 uv; // texcood 항상 정규화 되어있음 (0~1)
static D3D11_INPUT_ELEMENT_DESC descs[];
static const uint count = 2;
};
Vertex의 헤더파일을 먼저 만들었다.
전에 썼던 VeertexColor와 VertexTexture의 생성자를 만들고, 필요한 정점 위치와 색이나 UV을 선언한다.
그리고 static으로 descs와 count를 선언했다.
이유는 저 구조체들을 선언할때 마다 넣어주면 메모리 낭비가 매우 심해지기 때문이고, desc는 재사용 해서 사용하고, count인 경우에는 const로 선언해서 수정 될 일이 없다.
Vertex.cpp
#include "stdafx.h"
#include "Vertex.h"
D3D11_INPUT_ELEMENT_DESC VertexColor::descs[]
{
{ "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 },
{ "COLOR", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }
};
D3D11_INPUT_ELEMENT_DESC VertexTexture::descs[]
{
{ "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 },
{ "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }
};
그리고 input_layer를 구조체에 맞게 descs를 초기화 해준다.
짜피 안에 내용은 구조체의 변수 타입에 관한거라 바뀔 일이 없다.
- D3D11_APPEND_ALIGNED_ELEMENT : 사용하는 바이트를 반환해주는 매크로
Vertex를 사용하는 곳에 이 Wrapping Class를 사용해서 바꿔주면 된다.
후기
와 이번 래핑쪽은 그냥 있던걸 정리하는 거라 초큼 매우 많이 엄청 편하다 ㅋㅋ