DirectX Graphics 프로그래밍 가이드 튜토리얼, 샘플, 툴, 힌트 샘플 스텐실 버퍼의 샘플 Shadow Volume 샘플   [목차열람] [주소복사] [슬롯비우기]
Shadow Volume 샘플
 
Microsoft DirectX 9.0

Shadow Volume 샘플


설명

Shadow Volume 샘플에서는, 스텐실 버퍼를 사용해, 리얼타임 그림자를 실현하고 있다. 이 샘플에서는, 복잡한 개체가 렌더링 되어, 그림자를 캐스트 하는 개체로서 사용되어 그 개체 자체 및 그 아래의 지형에 리얼타임 그림자를 캐스트 하고 있다.

스텐실 버퍼는, 지오메트리를 렌더링 할 경우에 갱신할 수 있는 깊이 버퍼의 방법으로, 다른 지오메트리를 드로잉(Drawing)하기 위한 마스크로서 재이용할 수 있다. 일반적인 이펙트에는, 거울·(고도의 방법으로서의) 그림자·디졸브등이 있다.

스텐실 버퍼 방법의 일부의 기능 밖에 지원 하고 있지 않는 카드도 있다. 일부의 하드웨어에서는, 스텐실 버퍼를 지원 하고 있지 않는 경우나, 일부 밖에 지원 하고 있지 않는 경우가 있다. 스텐실 버퍼의 더 자세한 정보는, Microsoft® DirectX® 소프트웨어 개발 킷 (SDK)의 메뉴얼을 참조할것.

패스

소스 파일 : (SDK 루트) \Samples\C++\Direct3D\StencilBuffer\ShadowVolume

실행 가능 파일 : (SDK 루트) \Samples\C++\Direct3D\Bin

사용자 가이드

다음의 표는 , 처리 되고 있는 키를 나타내고 있다. 메뉴 커멘드를 사용해 같은 조작을 실시할 수가 있다.

동작
Enter장면을 시작 및 정지한다.
Space 키장면을 조금씩 진행한다.
F2새로운 렌더링 장치 또는 디스플레이 모드를 선택하도록(듯이) 사용자에 지시한다.
Alt+Enter풀 스크린 모드와 윈도우 모드를 바꾼다.
Esc애플리케이션을 종료한다.

프로그래밍 정보

리얼타임 그림자의 생성은 꽤 고도의 방법이다. 각 프레임으로, 즉 장면(scene)내의 지오메트리 또는 라이트가 이동할 경우에, 그림자 볼륨으로 불리는 개체를 계산한다. 그림자 볼륨은, 광원으로부터 밀어 내졌을 때의, 그림자를 캐스트 하는 개체의 실루엣인 3D 개체이다.

이 샘플에서는, 그림자를 캐스트 하는 3D 개체는 복엽기이다. 비행기의 실루엣은 각 프레임으로 계산된다. 이 방법에서는, 엣지 검출 알고리즘을 사용해, 실루엣의 엣지를 검출한다. 인접하는 다각형의 법선에는 빛의 벡터에 관해서, 반대 방향으로 성장하는 법선이 있기 (위해)때문에, 이러한 엣지 검출이 가능하다. 검출된 엣지 리스트 (실루엣)는, 광원으로부터 멀어지도록(듯이) 밀어 내져 3D 개체가 된다. 이 3D 개체는, 이 볼륨의 안쪽에 있는 모든 포인트가 그림자안에 있으므로, 그림자 볼륨이라고 부른다.

다음에, 그림자 볼륨은, 스텐실 버퍼에 2 회 렌더링 된다. 처음은 적극적인 다각형만이 렌더링 되어 스텐실 버퍼값이 매회 인크리먼트(increment) 된다. 다음에, 그림자 볼륨의 퇴행적인 다각형이 드로잉(Drawing) 되어 스텐실 버퍼의 값이 감소 된다. 보통, 인크리먼트(increment) 된 값과 감소 된 값은 모두 서로 지운다. 그러나, 장면(scene)는 이미 법선 지오메트리 (이 경우는 평면과 지형)를 사용해 렌더링 되고 있으므로, 일부의 픽셀은 그림자 볼륨을 렌더링 할 경우에 Z 버퍼 테스트에 합격하지 않는다. 스텐실 버퍼에 남은 값이, 그림자안의 픽셀에 대응한다.

마지막으로, 모든 것을 포함한 큰 사각형을 장면(scene)에 알파 혼합 할 경우에, 이 남은 스텐실 버퍼의 내용이 마스크로서 사용된다. 스텐실 버퍼를 마스크로서 사용하는 것에 의해, 그림자안의 픽셀만이 어두워진다.

이 샘플에서는, 헬퍼-함수등의 프로그래밍 요소로부터 구성되는 공통의 DirectX 코드를 사용하고 있다. 이 코드는 DirectX SDK 외 샘플과 공유되고 있다. 샘플 프레임워크(framework)의 헤더는 (SDK 루트)\Samples\C++\Common\Include, 소스 코드는 (SDK 루트) \Samples\C++\Common\Src 에 있다.



© 2002 Microsoft Corporation. All rights reserved.
↑TOP