2.11. 스프라이트 3D(Sprite3D)

이전 섹션에서 살펴본 모든 표시 객체는 순수한 2차원 객체를 나타냅니다. Starling은 2D 엔진입니다. 그러나 2D 게임에서도 간단한 3D 효과를 추가하면 더 나을 것입니다. 두 화면 사이를 전환하거나 게임 카드의 뒷면을 표시하는 등의 작업 말이죠

이러한 이유 때문에 Starling에는 기본 3D 기능인 Sprite3D를 쉽게 추가할 수있는 클래스가 포함되어 있습니다. 그것은 여러분이 3차원 공간에서 2D 객체를 움직일 수있게 합니다.

2.11.1. 기본

기존의 Sprite와 마찬가지로 이 컨테이너에 자식을 추가 및 제거할 수 있으므로 여러 표시 객체를 그룹화 할 수 있습니다. 그러나 Sprite3D는 여러 가지 흥미로운 속성을 제공합니다:

  • z — Z 축을 따라 스프라이트를 이동합니다 (카메라에서 멀어지는 방향).

  • rotationX — 스프라이트를 x축을 중심으로 회전합니다.

  • rotationY — 스프라이트를 y축을 중심으로 회전합니다.

  • scaleZ — Z축을 따라 스프라이트의 크기를 조절합니다.

  • pivotZ — 피벗 점을 z축을 따라 이동합니다.

이러한 속성 덕분에 스프라이트와 모든 자식을 3D 세계에 배치할 수 있습니다.


1
2
3
4
5
6
7
8
9
10
11
var sprite:Sprite3D = new Sprite3D(); (1)

sprite.addChild(image1); (2)
sprite.addChild(image2);

sprite.x = 50; (3)
sprite.y = 20;
sprite.z = 100;
sprite.rotationX = Math.PI / 4.0;

addChild(sprite); (4)

(1) Sprite3D의 인스턴스를 만듭니다.

(2) 몇 가지 일반적인 2D 객체를 스프라이트에 추가합니다.

(3) 3D 공간에서 물체의 위치와 방향을 설정합니다.

(4) 평상시처럼 디스플레이 목록에 추가하십시오.

보시다시피 Sprite3D를 사용하는 것은 어렵지 않습니다. 탐색할 몇 가지 새로운 속성이 있습니다. 히트-테스트, 애니메이션, 사용자 정의 렌더링 – 다른 모든 표시 객체에서 익숙해진 것처럼 모든 것이 작동합니다.

2.11.2. 카메라 설정(Camera Setup)

물론 3D 오브젝트를 표시하는 경우 해당 오브젝트를 보는 퍼스펙티브를 구성할 수 있기를 원합니다. 카메라를 설치하면 가능합니다. Starling에서는 카메라 설정이 무대에서 발견됩니다.

다음 스테이지 속성은 카메라를 설정합니다:

  • fieldOfView — 시야 (FOV)의 각도 (라디안 0과 PI[파이] 사이)를 지정합니다.

  • focalLength — 무대와 카메라 사이의 거리.

  • projectionOffset — 카메라를 기본 위치에서 멀리 이동시키는 벡터로 무대 중앙 바로 앞에 있습니다.

그림 34. 이들은 카메라를 설정하는 속성입니다.

Starling은 스테이지가 전체 뷰포트를 채울 수 있는지 항상 확인합니다. 시야를 변경하면 초점 길이가 이 제약 조건을 준수하도록 수정되고 다른 방법은 반올림 됩니다. 다른 말로 하면 fieldOfView와 focalLength는 동일한 속성의 다른 표현입니다.

다음은 서로 다른 fieldOfView 값이 Starling 데모에서 큐브의 모양에 어떻게 영향을 미치는지 보여주는 예입니다:

그림 35. fieldOfView의 다른 값 (도).

기본적으로 카메라는 항상 스테이지 중앙을 향하도록 정렬됩니다. projectionOffset을 사용하면 이 시점에서 원근감을 변경할 수 있습니다. 다른 방향에서 물건을 보려고 할 때 사용하십시오. 위 또는 아래에서. 이번에는 projectionOffset.y에 대해 다른 설정을 사용하여 다시 큐브를 만듭니다:

그림 36. projectionOffset.y의 다른 값.

2.11.3. 제한 사항

Starling은 여전히 ​​2D 엔진이므로 몇 가지 제한 사항이 있습니다:

  • Starling은 깊이 테스트를 하지 않습니다. 시정은 아동의 순서에 의해서만 결정됩니다.

  • 성능에 주의해야 합니다. 각 Sprite3D 인스턴스는 일괄 처리를 중단합니다.

그러나 많은 경우에 후자의 문제를 완화하는 속임수가 있습니다. 객체가 실제로 3D로 변환되지 않을 때 즉 2D 스프라이트도 마찬가지로 수행할 수없는 경우 Starling은 이것을 2D 객체처럼 취급합니다 – 동일한 성능 및 배치 동작.

즉 많은 수의 Sprite3D 인스턴스가 있는 것을 피할 필요가 없습니다. 당신은 너무 많은 것들이 동시에 3D 변환된다는 것을 피하기만 하면 됩니다.

2.11.4. 샘플 프로젝트

이 기능을 실제 프로젝트에서 사용하는 방법을 보여주는 비디오 자습서를 만들었습니다. 그것은 2D 게임을 3차원으로 옮기는 방법을 보여줍니다.

  • Vimeo에서 비디오를 시청하세요.

  • GitHub에서 소스를 다운로드 하세요.