DirectX 11 3d

230609 LandScape Heightmap

슬뷔 2023. 6. 25. 00:43

원래 높이맵을 로딩해서 가져다 사용했는데, CreateTexture 에서 직접 메모리에 만들어서 사용 

높이맵을 직접 메모리에 실시간으로 로딩했기 때문에 높이가 평평하다.

처음에는 텍스쳐가 검은색 (0으로 초기화가 되어있기 때문에 높이값이 0라는 의미)

 

포맷은 R32 FLOAT 이다.

4byte 포멧인데, 픽셀 1개가 플롯 1개이다. (높이만 저장할거니까)

void CLandScape::CreateTexture()
{
	// 높이맵 텍스쳐	
	//m_pHeightMap = CResMgr::GetInst()->FindRes<CTexture>(L"texture\\landscape\\HeightMap_01.jpg");
	m_pHeightMap = CResMgr::GetInst()->CreateTexture(L"HeightMap"
		, 2048, 2048
		, DXGI_FORMAT_R32_FLOAT
		, D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_UNORDERED_ACCESS
		, D3D11_USAGE_DEFAULT);

	m_pBrushTex = CResMgr::GetInst()->FindRes<CTexture>(L"texture\\brush\\Brush_01.png");

	// 가중치 버퍼
	m_iWeightWidth = 1024;
	m_iWeightHeight = 1024;

	m_pWeightMapBuffer = new CStructuredBuffer;
	m_pWeightMapBuffer->Create(sizeof(tWeight_4), m_iWeightWidth * m_iWeightHeight, SB_TYPE::READ_WRITE, false);
}

 

컴퓨터쉐이더를 만들어서 원하는 위치의 높이값을 수정할 수 있게 했다.

엄밀히 말하면 높이맵을 색칠하는 쉐이더이다. 

높이맵에서 왼쪽버튼을 누르면(LBTN) 컴퓨트 쉐이더를 수행시키게 해놨다.

	if (KEY_PRESSED(KEY::LBTN))
	{
		m_pCSHeightMap->Execute();
	}

 

높이맵에서 컴퓨트쉐이더가 수행되기전에 raycasting이 먼저 수행되어야하는데, 다음수업에.. 

raycasting이 되어야 어느지점을 올릴지 정하고 이 부분을 수정하라고 높이맵을 수행하는게 순서

그래서 입력된 버퍼의 교점정보가 들어가야한다. 

(다음 수업시간에 더 자세히.. )

void CLandScape::CreateComputeShader()
{
	// ======================
	// 높이 수정 컴퓨트 쉐이더
	// ======================
	m_pCSHeightMap = (CHeightMapShader*)CResMgr::GetInst()->FindRes<CComputeShader>(L"HeightMapShader").Get();
	if (nullptr == m_pHeightMap)
	{
		m_pCSHeightMap = new CHeightMapShader(32, 32, 1);
		m_pCSHeightMap->CreateComputeShader(L"shader\\heightmap.fx", "CS_HeightMap");		
		CResMgr::GetInst()->AddRes<CComputeShader>(L"HeightMapShader", m_pCSHeightMap.Get());
	}
}

 

'DirectX 11 3d' 카테고리의 다른 글

230619 Mapmapping  (0) 2023.06.26
230615 LandScape - Splating(색칠)  (0) 2023.06.26
230607 LandScape 포워드 -> 디퍼드 전환  (0) 2023.06.14
230602 지형 만들기, Height Map (다시)  (0) 2023.06.04
230601 절두체 컬링 이어서  (0) 2023.06.04