깊은 무늬의 사용

2045 단어 DirectX
D3D에서 깊이 텍스쳐를 생성하고 세그먼트 프로그램으로 가져옵니다.주요 단계는 다음과 같습니다.
1. 깊이 텍스처 생성
        
//      
	//1         
	IDirect3DSurface9 * pSurface = nullptr;
	hr = pDevice->GetRenderTarget(0, &pSurface);		//ref count +1
	if (FAILED(hr))
	{
		MessageBox(NULL, _T("  RenderTarget failed"), NULL, MB_OK);
		return false;
	}
	D3DSURFACE_DESC desc;
	pSurface->GetDesc(&desc);
	pSurface->Release();								//ref count -1
	
	int texWidth, texHeight;
	texWidth = desc.Width;
	texHeight = desc.Height;
	//2               
	hr = pDevice->CreateTexture(texWidth,
				    texHeight,
				    1,
				    D3DUSAGE_DEPTHSTENCIL,
				    D3DFMT_D16,
				    D3DPOOL_DEFAULT,
				    &g_pShadowTexture,
				    nullptr);

2. 깊이 무늬를 백그라운드로 설정
                IDirect3DSurface9 * pOldDepthSurface = nullptr;
		IDirect3DSurface9 * pNewDepthSurface = nullptr;
		hr = pDev->GetDepthStencilSurface(&pOldDepthSurface);
		assert(SUCCEEDED(hr));
		hr = g_pShadowTexture->GetSurfaceLevel(0, &pNewDepthSurface);		//     0,         ,   1,    
		assert(SUCCEEDED(hr));
		hr = pDev->SetDepthStencilSurface(pNewDepthSurface);				//        
		assert(SUCCEEDED(hr));
		pDev->Clear(0, NULL, D3DCLEAR_ZBUFFER, 0, 1.f, 0);			//***	//        ,         

3. 깊이 캐시를 설정한 후에 장면의 렌더링을 할 수 있고 깊이 값을 위에서 설정한 깊이 캐시에 쓸 수 있다.
                     Render Objects
장면을 렌더링하기 전에 색상 캐시에 대한 쓰기 작업을 끄고 나중에 켜는 것이 좋습니다
                     
pDev->SetRenderState(D3DRS_COLORWRITEENABLE, 0);	

4. 원래의 깊이 캐시로 돌아가고 색 쓰기 동작을 켜기
pDev->SetDepthStencilSurface(pOldDepthSurface);					//          
pOldDepthSurface->Release();
pNewDepthSurface->Release();
pDev->SetRenderState(D3DRS_COLORWRITEENABLE, 					//     
			D3DCOLORWRITEENABLE_ALPHA | D3DCOLORWRITEENABLE_BLUE | D3DCOLORWRITEENABLE_GREEN | D3DCOLORWRITEENABLE_RED);	

5、뒤에 우리의 정상적인 조작을 진행할 수 있다
        
        
        
        
        

좋은 웹페이지 즐겨찾기