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

Clip Volume 샘플


설명

ClipVolume 샘플에서는, 렌더링 시에 셰이더를 사용해 임의의 모델로부터 구를 "공제하는" 방법을 나타낸다. 이 방법은, 가시화 애플리케이션으로 복잡한 개체의 안쪽을 표시할 경우에 도움이 된다. 이 샘플에서는, 양면 조명의 실행 방법도 가리킨다.

패스

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

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

사용자 가이드

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

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

이 샘플에서는, 마우스를 사용해 시점의 위치를 제어할 수 있다.

프로그래밍 정보

이 샘플에서는, 2 개의 ID3DXMesh 개체를 생성 한다. 1 개는 찻주전자용, 이제 1개는 구이다. 찻주전자를 렌더링 하려면 정점 셰이더와 픽셀 셰이더를 사용해, 구의 렌더링에는 다른 정점 셰이더를 사용한다.

구의 정점 셰이더는 특수한 처리는 실시하지 않는다. 정점 위치에 대해서 표준적인 월드 뷰 투영 변환을 실행해, 디퓨즈색을50% 알파로 진한 파랑으로 설정하는 것만으로 있다. 구는 찻주전자의 내부를 표시시키기 (위해)때문에만의 목적으로 사용하는 것에 주의하면 좋겠다. 샘플에 나타내는 클리핑 이펙트를 얻는데 구의 렌더링은 불필요하다.

찻주전자의 정점 셰이더는 다음의 3 개의 태스크를 실행한다.

  1. 월드 뷰 투영 행렬에 의한 정점 위치의 표준 변환.
  2. 구의 중심 (c12 레지스터에 저장 되고 있다)으로부터 각 정점까지의 거리를 계산해, 그 거리를 구의 반경 (c12.w 에 저장 되고 있다)과 비교해, 그 차이를 oT0 에 저장 한다. 같은 부동 소수점수(실수)값의, oT0 의 4 개 (xyzw)의 부분 모두에게 넣는다. 픽셀 셰이더 명령 texkill 는 4 개의 성분 모든 것을 읽어내기 (위해)때문에, 4 개의 성분 모두에게 기입하는 것. oT0 의 데이터는 구의 반경의 안쪽에서는 부가 되어, 반경의 외측에서는 정말로 되는 것에 주의.
  3. 찻주전자에 양면 디퓨즈 조명을 실행한다. 회전 행렬을 사용해 정점 법선을 변환 해, 정점이 전면에 있으면 r3.x 를 1 으로 설정해, 정점이 뒷면에 있으면 0 을 설정한다. 다음에,mad 명령을 사용해 r5 를 c92 + (r3.x * c91)로 설정한다. 즉, r3.x 가 0 이라면 빨강 (c92), r3.x 가 1 이라면 초록 (c91 + c92)이 된다. 마지막으로, r5 에 그 정점에서의 빛의 강도 (r3.z 의 절대치)를 곱셈한다.

찻주전자의 픽셀 셰이더는, 텍스처 좌표가 0 보다 작은 경우는 픽셀을 렌더링 하지 않게,texkill 명령을 사용한다. 구의 안쪽에서는, 모든 정점 및 픽셀의 x 텍스처 좌표는 부가 되므로, 구의 안쪽에 있는 픽셀은 렌더링 되지 않는다.

이 샘플은, Microsoft® DirectX® 소프트웨어 개발 킷 (SDK) 외 샘플과 공유하는 샘플 프레임워크(framework) 코드를 사용한다. 샘플 프레임워크(framework)의 헤더는 (SDK 루트)\DXSDK\Samples\C++\Common\Include, 소스 코드는 (SDK 루트) \DXSDK\Samples\C++\Common\Src 에 있다.



© 2002 Microsoft Corporation. All rights reserved.
↑TOP