Tech/WPF2009. 11. 11. 17:40


WPF는 Silverlight와는 3D 구현이 많이 다르다. Silverlight 에서는 Projection 속성을 이용하여 3D를 구현하는 반면에 WPF는 3차원 도형을 그리거나 모형을 만든 후에, 카메라의 위치와 시선을 조작하거나 그 이외의 각종 요소 등을 변경함으로 원하는 3D 효과를 얻어낸다. Silverlight 외의 3D 구현을 접한 경우가 없었기 때문에 이해하는데 조금 어려워었다.

WPF의 3D 구현은 마치 영화를 촬영하는 것과 느낌이 비슷하다.

우선 Viewport3D 객체를 만들고, Camera를 설정한다.
Viewport3D.Camera의  종류는 두 가지이다.
1. OrthographicCamera : 정사 방식, 거리와는 상관없이 동일한 크기로 물체가 보인다.
2. PerspectiveCamera : 투시 방식, 거리에 따라 물체가 원근감있게 보인다.

Camera 수정할 수 있는 속성
1. Position : 카메라의 위치
2. LookDirection : 카메라 시선
3. UpDirection : 카메라의 방향
4. Width / FieldOfView

자! 카메라는 준비했다.
그런데, 카메라가 있으면 뭐 하나? 주인공이 없는데 -ㅅ-);

귀하신 주인공님은 여러 가지 방법들(Model3D, Visual3D, Viewport2DVisual3D ... )로 표현할 수 있는데,
세부 사항을 제외하고 그 방법들의 큰 속성들은 같은 역할을 한다.
1. Transform : 위치 이동 및 회전
2. Geometry : 물체의 렌더링 결과물을 반영하는 범위를 설정할 수 있다.
3. Material : 카메라에서 물체에 반사시킬 색상과 형태를 설정할 수 있다.
4. Visual : 보여줄 물체의 정보

Model3D는 단순 이미지나 도형들은 이용할 경우에는 괜찮지만, 사용자와의 피드백이 불가능하다.
한 마디로 버튼을 Model3D로 만들었으면, 버튼 클릭을 할 수 없단 얘기다.
때문에 UIElement들 중 사용자와의 상호작용이 필요한 아이들이 있는 경우에는 Viewport2DVisual3D를 사용하길 바란다.

여기까지 다 설정을 완료하였다면, 카메라와 주인공까지 준비된 것이다.
다 된 것 같겠지만, 실제론 그렇지 않다.
바로! ... 조명이 빠졌다 =ㅁ=);

주인공님을 비춰줄 조명이 없으면 그대는 시커먼 물체와 맞닥뜨릴 수 밖에 없을 것이다.
진상이라고 짜증내지 말기를 바란다. 조명(Light)도 입맛따라 선택할 수 있다.
1. DirectionalLight : 평행 방향을 빛을 뿌린다.
2. PointLight : 하나의 포인트로부터 모든 방향으로 일정하게 빛을 뿌린다.
3. SpotLight : 지정된 포인트로부터 지정된 방향으로 빛을 뿌린다.
4. AmbientLight : 모든 면에 빛을 뿌린다.

이제 조명까지 완성되면 -ㅁ-) 주인공님이 쨔잔~! 하고 등장할 것이다.
우와아아아아아아아아아앙~ +ㅍ+)/ 으히히히히히 ... (...)

여기까지 기본내용이고, 실제 XAML에 쓰여지는 코드는 다음 기회로 미루도록 하겠다.
Posted by 벚꽃손님