Depth Stencil View

이승덱·2021년 7월 27일
0

Graphics&DirectX

목록 보기
9/37

Depth Stencil View

  • 카메라 좌표계 -> 투영 좌표계

  • 2D화면을 보고 거리를 알 수 없다. 그러나 비율은 유지된다.

  • 따라서 투영좌표계는 직사각형으로 되어있다.(비율만 따지겠다!)

  • 중간에 있건 뒤에 있건 상관없이 비율의 결과물만 최종 결과물이 된다.

  • 비율도 중요하지만 깊이 또한 중요하다

  • 카메라가 가장 멀리 볼 수 있는 거리: 1, 카메라가 볼 수 있는 가장 가까운 거리: 0

  • 각 물체의 깊이 값을 보고 물체를 그릴 지 안그릴 지 선택한다.

  • DX 기준으로 중앙: (0,0) 오른쪽+1, 위쪽+1, 왼쪽-1, 아래쪽-1

  • 깊이 값을 이용하여 누가 더 앞에 나오는 물체인지 알 수 있다.

  • 깊이 좌표는 0~1사이 값인데 그 범위를 벗어나면 계산을 하지 않는다.

  • 깊이 버퍼를 통해 가장 카메라가 볼 수 있는 범위 내에 가장 카메라와 가까운 물체를 픽셀단위로 계산하여 그려준다.

  • depth stencil view: stencil값을 주어 어느 물체가 더 카메라와 가까이 있는지, 어떤 물체를 묘사해야 하는지 구분할 수 있다.

	_dsvFormat = dsvFormat;

	D3D12_HEAP_PROPERTIES heapProperty = CD3DX12_HEAP_PROPERTIES(D3D12_HEAP_TYPE_DEFAULT);

	D3D12_RESOURCE_DESC desc = CD3DX12_RESOURCE_DESC::Tex2D(_dsvFormat, window.width, window.height);
	desc.Flags = D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL;	//depthStencil용도로 쓰겠다.

	D3D12_CLEAR_VALUE optimizedClearValue = CD3DX12_CLEAR_VALUE(_dsvFormat, 1.0f, 0);	// 1.0f으로 밀어줌

	DEVICE->CreateCommittedResource(
		&heapProperty,
		D3D12_HEAP_FLAG_NONE,
		&desc,
		D3D12_RESOURCE_STATE_DEPTH_WRITE,
		&optimizedClearValue,
		IID_PPV_ARGS(&_dsvBuffer));

	D3D12_DESCRIPTOR_HEAP_DESC heapDesc = {};
	heapDesc.NumDescriptors = 1;
	heapDesc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_NONE;
	heapDesc.Type = D3D12_DESCRIPTOR_HEAP_TYPE_DSV;

	DEVICE->CreateDescriptorHeap(&heapDesc, IID_PPV_ARGS(&_dsvHeap));

	_dsvHandle = _dsvHeap->GetCPUDescriptorHandleForHeapStart();
	DEVICE->CreateDepthStencilView(_dsvBuffer.Get(), nullptr, _dsvHandle);



---------------------------------------------------------
_pipelineDesc.DSVFormat = GEngine->GetDepthStencilBuffer()->GetDSVFormat();
  • 위 코드를 보면 사용할 DSV를 만든 후 DescriptoreHeap에 넣어주어 GPU에게 DSV를 사용함을 알려준다.
profile
공부 기록용 블로그입니다

0개의 댓글