728x90
1. 코드
Excute.cpp 파일
// vertexbuffer만드는곳
{...}
//indexdata
{
indices = new uint[6]{0 , 1 ,2 ,2 ,1 ,3};
}
//indexbuffer
{
D3D11_BUFFER_DESC desc;
ZeroMemory(&desc, sizeof(D3D11_BUFFER_DESC));
desc.Usage = D3D11_USAGE_IMMUTABLE;
desc.BindFlags = D3D11_BIND_INDEX_BUFFER;
desc.ByteWidth = sizeof(uint) * 6;
D3D11_SUBRESOURCE_DATA sub_data;
ZeroMemory(&sub_data, sizeof(D3D11_SUBRESOURCE_DATA));
sub_data.pSysMem = indices;
auto hr = graphics->GetDevice()->CreateBuffer(&desc, &sub_data, &index_buffer);
assert(SUCCEEDED(hr));
}
}
void Execute::Render()
{
UINT stride = sizeof(VertexColor); // 정점의 하나의 크기
UINT offset = 0;
//그려질 시간
graphics->Begin();
{
//IA
graphics->GetDeviceContext()->IASetVertexBuffers(0, 1, &vertexbuffer, &stride, &offset); // Vertexbuffer 용
graphics->GetDeviceContext()->IASetIndexBuffer(index_buffer, DXGI_FORMAT_R32_UINT, 0); // indexbuffer 용
graphics->GetDeviceContext()->IASetInputLayout(input_layout);
graphics->GetDeviceContext()->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); //그렬질 용도
//VS 정점의 갯수 만큼만 돌아감 (정점이 많이 있으면 오래 걸리지만 GPU는 병렬 형식)
graphics->GetDeviceContext()->VSSetShader(vertex_shader, nullptr, 0);
//PS
graphics->GetDeviceContext()->PSSetShader(pixel_shader, nullptr, 0);
//Pipe line 끝나면 Draw 함수로 그려줘야함 (Vs 변경하면 여기도 갯수 수정)
//graphics->GetDeviceContext()->Draw(6, 0);
graphics->GetDeviceContext()->DrawIndexed(6, 0, 0); //인덱스용 , (인덱스 갯수, 몇번 부터 시작, 기본 시작)
}
//삭제
graphics->End();
}
Excute.h 파일
uint* indices = nullptr;
ID3D11Buffer* index_buffer = nullptr;
stdafx.h 파일
//디버깅 모드에서 처리 함 (콘솔창 1개더 만듬)
#ifdef _DEBUG
#pragma comment(linker, "/entry:WinMainCRTStartup /subsystem:console")
#endif
2. 실행
3. 추가 및 요약
indexbuffer로 사용하면 삼각형 2개가 아닌 정점으로 한번에 그려줌
-> 중복되는 정점을 제거
공간이란?
공간은 행렬로 표현
Local -> World -> View -> Projection 순으로 흘러감
용어 및 담당구역
VS 담당
Local : 지역 좌표계 (설계상 좌표)
World : 세계 좌표 (설계된 좌표)
View : 시야 공간 (눈)
Projection : 투영 공간 (3D공간을 2D로 변환)
Projection , Clip 공간은 결합되어 있음
*Clip, NDC는 같은 공간 이지만 차이점
Clip : 동차 공간 (정규화가 되지 않는 공간)
RS 담당
NDC : 표준 공간 (정규화가 되서 정리한 공간)
Viewport : 그려질 공간
(0, 0 ,0 ,0 ) X, Y, Z , W(방향)
W : 0 이면 방향
W : 1 이상 이면 위치 (Vector)
'DirectX > DirectX 2D_(구)' 카테고리의 다른 글
DX 공간 결합 (0) | 2020.11.05 |
---|---|
DX 공간 변환 (0) | 2020.11.05 |
DX Render (0) | 2020.11.05 |
DX Window 창에 연동 (0) | 2020.11.04 |
DX 초기화, 설정, 삭제 (0) | 2020.11.04 |