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 |