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

Motion Blur 샘플


설명

MotionBlur 샘플은, 몇개의 정점을 동작의 방향에 따라 신축(스트레치) 해, 투명도를 페이드 해 모션블러 이펙트를 생성 하는 정점 셰이더를 나타낸다.

패스

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

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

사용자 가이드

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

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

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

프로그래밍 정보

이 샘플에서는, 같은 ID3DXMesh 개체로 나타낸 2 개의 구를 나타낸다. 구는 타監내를 이동해, 각 구는 현재 위치 및 마지막에 계산된 위치의 행렬을 기억한다. "표준" (보통의) 셰이더를 사용해 1 회, 및 모션블러 셰이더를 사용해 1 회, 각 구를 렌더링 한다.

모션블러 셰이더는, 마지막 프레임의 월드 행렬 (c0) 및 현재의 프레임의 월드 행렬 (c4)을 사용해 정점 위치 (v0)를 변환 해, 결과를 r0 및 r1 에 저장 한다. 또, 현재의 프레임의 월드 행렬 (c4)을 사용해 법선 벡터 (v1)를 변환 해, 결과를 r2 에 저장 한다.

r3 는 r0 로부터 r1 까지의 모션 델타 벡터를 취득해, 정규화된다. 다음에, r4.x 를 정점 법선과 모션 델타 벡터의 내적으로 설정한다. 그 때문에, 정점 법선이 모션 델타 벡터에 가까워지는 만큼, 그 정점의 r4.x 는 커진다. r4.x 가 0 미만의 경우, 정점 법선은 모션 델타 벡터로부터 멀어진다. 이러한 정점에만 브라를 적용한다.

다음의 섹션에서는, r4.x 가 0 미만의 경우 (c20.y)는 r4.y 를 1 으로 설정한다. r4.x 가 0 또는 정의 경우, 0 으로 설정한다. 이것에 의해, 법선이 동작의 방향의 뒷면에 있는 정점에만 모션블러를 적용한다. r4.y 가 0 의 경우, r1 는 변화하지 않는다. r4.y 가 1 의 경우, r1 에 -r3 (동작의 방향)를 덧셈 한다.

다음에, r1 를 회전 행렬과 투영 행렬을 사용해 변환 해, 결과를 oPos 에 넣는다.

마지막으로, 디퓨즈색을 계산해 oD0 에 보존한다. 이 때, r4.x (정점 법선과 동작의 방향의 내적)가 부의 경우는 oD0 의 알파 혼합을 0 으로 설정해, 그 이외의 경우는 1 으로 설정한다. 이것에 의해, 브라는 실제의 개체로부터 멀어지는 것에 따라 용암 한다.

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



© 2002 Microsoft Corporation. All rights reserved.
↑TOP