DirectX/DirectX 2D_(구)

DX indexbuffer, 공간변환(이론)

컴맹학자 2020. 11. 5. 17:10
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