예전부터 Flex4 프로젝트의 일환인 Gumbo를 다운로드를 받았지만 쓸 기회가 없어서 안쓰다가 Flash Player 10에서 3D 회전 예제가 있어서 한번 해봤다.
Flex Builder 3에서 작업을 하기 위해 수행해야할 일은 다음과 같다.
1. Gumbo 최신버전을 다운받는다. [다운로드 받으러가기]
2. 다운로드 받는 Flex 4 SDK를 Flex Builder 설치폴더안에 sdks 폴더에 압축하여 풀어준다.
3. Flex Builder 3를 실행해서 메뉴에 Windows->Preperences...에 들어가면 창이 뜬다. 창 왼쪽에 Flex->Installed Flex SDKs를 선택한 다음 아까 압축을 푼 SDK폴더를 등록한다.
4. File->New->ActionScript Project를 선택하면 창이 뜬다. 창 아래부분에 Use a specific SDK를 선택한다음 Flex 4를 선택하고 프로젝트 명을 CubeRotationExample로 프로젝트를 만든다.
5. 아래 소스를 복사해서 메인 소스에 덮어쓴다.
package{ import flash.display.*; import flash.events.*; import flash.geom.*; public class CubeRotationExample extends Sprite { private static const EDGE :Number = 40; //edge length private var mtxWorld :Matrix3D; //world transform matrix private var vCube :Vector.<Number>; //cube points private var vFlatCube :Vector.<Number>; //projected cube points private var vUVT :Vector.<Number>; //uvt data private var vIndicies :Vector.<int>; //triangle indicies private var sprCube :Sprite; //canvas object public function CubeRotationExample(){ // setup and initialize stage.align = StageAlign.TOP_LEFT; stage.scaleMode = StageScaleMode.NO_SCALE; stage.quality = StageQuality.BEST; mtxWorld = new Matrix3D(); vCube = Vector.<Number>([ EDGE,EDGE,-EDGE, EDGE,-EDGE,-EDGE, -EDGE,-EDGE,-EDGE, -EDGE,EDGE,-EDGE, EDGE,EDGE,EDGE, EDGE,-EDGE,EDGE, -EDGE,-EDGE,EDGE, -EDGE,EDGE,EDGE ]); vFlatCube = new Vector.<Number>(16); vUVT = new Vector.<Number>(24); vIndicies = Vector.<int>([0,1,2, 2,3,0, 4,7,6, 6,5,4, 0,4,5, 5,1,0, 1,5,6, 6,2,1, 2,6,7, 7,3,2, 4,0,3, 3,7,4]); sprCube = new Sprite(); addChild(sprCube); addEventListener(Event.ENTER_FRAME, onEnterFrame); } private function onEnterFrame(eo:Event):void { // center the cube sprCube.x = stage.stageWidth/2; sprCube.y = stage.stageHeight/2; // rotate the transform matrix mtxWorld.appendRotation(2, new Vector3D(0,1,0)); mtxWorld.appendRotation(2, new Vector3D(0,0,1)); mtxWorld.appendRotation(2, new Vector3D(1,0,0)); // project 3D data to 2D plane Utils3D.projectVectors(mtxWorld, vCube, vFlatCube, vUVT); // draw the cube using cube data sprCube.graphics.clear(); sprCube.graphics.beginFill(0xFF00FF); sprCube.graphics.lineStyle(1,0xFF0000,1); sprCube.graphics.drawTriangles(vFlatCube, vIndicies, null, TriangleCulling.POSITIVE); sprCube.graphics.endFill(); } } }
6. 저장하면 에러가 날거다. Flash Player 10에서 작동하므로 그에 따른 설정을 해주어야 한다. 메뉴에서 Project->Properties 로 들어가면 창이 뜬다. 왼쪽메뉴에 ActionScript Compiler를 선택하고 오른쪽 아래 Require Flash Player version을 10.0.0으로 맞춰준다.
7. 실행한다.(단 Flash Player 10이 설치되어 있어야 한다.)
[실행화면]
다시한번 언급하지만 Flash Player 10 환경에서만 된다.
위의 소스를 보면 예전 ActionScript 3.0에서 볼 수 없었던 것들이 보인다.
Vector, Matrix3D, Util3D등이다. Papervision3D와 같은 것을 쓰지않아도 쉽게 네이티브 코드로 3D를 구현할 수 있게 한 Flash Player 10. 아직 다양한 표현을 위한 많은 API를 가지고 있지 않지만 더욱 발전될 가능성이 크다고 생각한다. 기대해보겠다.
[소스출처]
http://dispatchevent.org/calebjohnston/flash-player-10-3d-example/
글쓴이 : 지돌스타(http://blog.jidolstar.com/421)
'비공개 > Adobe Flash 3D' 카테고리의 다른 글
[Flash 3D]최고의 3D 엔진. Alternativa3D (10) | 2009.08.07 |
---|---|
[Flash 3D]Cube Map 구현하기 - drawTriangle() 메소드의 활용 (8) | 2009.08.05 |
[Flash 3D]토성 그리기 (20) | 2009.07.07 |
[Flash 3D]우리 아가 회전시키기 2-Texture를 이용해 여러모양 만들기 (5) | 2009.07.02 |
[Flash 3D]우리 아가 회전시키기-UV맵핑,원근투영 이용 (24) | 2009.06.30 |