Depth Stencil ( orbit )

반응형

이 예제는 두가지 부분이 추가되었다.
하나는 간단한 행렬계산으로서 같은 오브젝트를 위치회전값을 조절하여
orbit로 만든 것이다.

// 첫번째 상자가 스핀하도록 월드행렬을 갱신한다.
 static float t = 0.0f;
 t += timeDelta * (float)D3DX_PI * 0.5f;
 if (t > D3DX_PI*2.0f) t = 0.0f;
 D3DXMatrixRotationY( &matWorld1, t );
pkmatWorld->SetMatrix((float*)&matWorld1);

// 두번째 상자가 원점을 중심으로 회전하도록 월드행렬을 갱신한다.
 D3DXMATRIX mScale;
 D3DXMatrixScaling( &mScale, 2.0f, 0.5f, 1.0f );
 D3DXMATRIX mSpin;
 D3DXMatrixRotationZ( &mSpin, t );
 D3DXMATRIX mTranslate;
 D3DXMatrixTranslation( &mTranslate, 4.0f, 0.0f, 0.0f );
 D3DXMATRIX mOrbit;
 D3DXMatrixRotationY( &mOrbit, -t*2.0f );
 matWorld2 = mScale * mSpin * mTranslate * mOrbit;
pkmatWorld->SetMatrix((float*)&matWorld2);

두번째 부분은 가려지는 부분을 처리하기 위해 깊이버퍼를 사용한다는 것이다.
깊이버퍼를 파이프라인 스테이지에 지정할 수 있도록 하기 위해서는
깊이버퍼와 깊이스텐실뷰가 있어야 한다.
ID3D10Texture2D*   pkDepthStencil = NULL;
ID3D10DepthStencilView*  pkDepthStencilView = NULL;

// 깊이 스텐실 텍스쳐를 생성함
 D3D10_TEXTURE2D_DESC descDepth;
 descDepth.Width = scd->BufferDesc.Width;
 descDepth.Height = scd->BufferDesc.Height;
 descDepth.MipLevels = 1;
 descDepth.ArraySize = 1;
 descDepth.Format = DXGI_FORMAT_D32_FLOAT;
 descDepth.SampleDesc.Count = 1;
 descDepth.SampleDesc.Quality = 0;
 descDepth.Usage = D3D10_USAGE_DEFAULT;
 descDepth.BindFlags = D3D10_BIND_DEPTH_STENCIL;
 descDepth.CPUAccessFlags = 0;
 descDepth.MiscFlags = 0;
 hr = (*device)->CreateTexture2D(&descDepth, NULL, depthStencil);
 if(FAILED(hr))
  return false;

 // 깊이스텐실뷰를 생성함
 D3D10_DEPTH_STENCIL_VIEW_DESC descDSV;
 descDSV.Format = descDepth.Format;
 descDSV.ViewDimension = D3D10_DSV_DIMENSION_TEXTURE2D;
 descDSV.Texture2D.MipSlice = 0;
 hr = (*device)->CreateDepthStencilView((*depthStencil), &descDSV, depthStencilView);
 if(FAILED(hr))
  return false;

 (*device)->OMSetRenderTargets(1, renderTargetView, (*depthStencilView));

렌더시에
// 후면버퍼, 깊이버퍼를 갱신
 pkDevice->ClearRenderTargetView(pkRenderTargetView, D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f)); //RGBA.
 pkDevice->ClearDepthStencilView( pkDepthStencilView, D3D10_CLEAR_DEPTH, 1.0f, 0 );

fx상에 변하는 부분은 없다.

'Study > Directx 10' 카테고리의 다른 글

카메라 클래스 - 쿼터니온  (5) 2010.05.08
카메라 클래스 - 오일러  (0) 2010.05.07
육면체 렌더링  (0) 2010.05.05
삼각형 렌더링  (0) 2010.05.05
sprite 출력  (0) 2010.05.02
TAGS.

Comments