따뜻한 대한민국 겨울만들기
Papervision3D 1.5

Papervision3D 1.5 에서는 Camera3D 클래스와 FreeCamera3D 클래스가 존재합니다.

본론으로 들어가기 전에,

Camera3D

중심이 카메라가 아닌 모든 물체들이 될 수 있습니다.
물체를 중심으로 카메라가 돌아다닌다고 할 수 있습니다.
카메라가 물체를 중심으로 돌아다니므로 왠만하면 물체 자체가 움직이는 것 처럼 보입니다.

FreeCamera3D

중심이 카메라가 됩니다.
풀어서 얘기하면 카메라는 고정되어 있고,
물체가 카메라 주위를 돌아다니는 시점이라고 말할 수 있습니다.
물체가 카메라 중심으로 돌아다니므로 화면상에 보이지 않을 때도 있습니다.


이랬던 PV3D가....-_-;


2.0에 와서는
" 뭐야.. 왜 2.0에는 Camera3D.as 하나밖에 없는거냐? -_- "
2.0은 'GreatWhite'란 프로젝트 명으로 현재 개발 중인 것으로 알고있습니다.
그래서 추후에 추가 될줄 알았습니다.-_-;

하지만 많은 사람들이 2.0을 사용하는데... FreeCamera3D만 쏙 뺄 리가 없었습니다.
마냥 기다릴 수도 없는 노릇이고...

그래서 안되는 영어를 써서 외국인과 채팅(?)해 물어본 결과...
답은 간단했습니다.


Papervision3D 2.0

2.0 에서는 Camera3D와 FreeCamera3D가 병합 되었다고 합니다.

즉, Camera3D 클래스 하나만으로도 FreeCamera3D를 구현 할 수 있게 된 것입니다.

그럼 Camera3D에서 위의 두가지를 어떻게 구현하는지 알아보겠습니다.


간단히 말해서,

CameraObject3D의 속성중에 target 이라는 속성이 있습니다.

target 의 값이 null이면 FreeCamera3D 입니다.

target 의 값이 null이 아닌 어떤 3D객체이면 그것은 Camera3D 입니다.

여기서 3D 객체란 모든 DisplayObject3D(Plane, Cube...)가 이에 해당합니다.


코드로 설명해보겠습니다.


- FreeCamera3D -

...
import org.papervision3d.cameras.Camera3D;
...

private var default_camera:Camera3D;
private var current_camera:CameraObject3D;

public function init():void{
     default_camera = new Camera3D();
     current_camera = default_camera;

     current_camera.target = null;
}



- Camera3D -


...
import org.papervision3d.cameras.Camera3D;
import org.papervision3d.objects.primitives.Plane;
...

private var default_camera:Camera3D;
private var current_camera:CameraObject3D;
private var plane:Plane;

public function init():void{
     plane = new Plane();
     plane.x = 10;
     plane.y = 0;

     default_camera = new Camera3D();
     current_camera = default_camera;

     current_camera.target = plane;
}

이렇게 사용하시면 되겠습니다.
(위 코드는 이해를 돕기위해 작성한 것입니다.)


참고
Papervision3D 2.0 API - http://www.flashbookmarks.com/PV3D-GreatWhite-DOC/
Papervision3D Forum  - http://www.nabble.com/Papervision3D-f22855.html