ActionScript/Away3D2011.02.02 13:48



3D 예제하면 가장 먼저 등장하는것이 Cube나 Sphere 같은 객체 하나를 만들고 회전 시키는걸 껍니다.
보여주기에 간단하면서도 가장 중요한 부분이기 때문이겠죠.

제가 사용한 버젼은 3.6.0 입니다.
API - http://away3d.com/livedocs/3.6.0_lib/index.html

버젼업을 하면서 바뀐 부분이 있는것 같네요.

예제들을 보기위해 구글링 해봤더니 light를 추가하는게 scene.addChild(light) 로 되어있는 예제가 많았습니다.
이전 버젼에선 addChild로 추가했던 모양이네요.

상속받는 객체도 전혀 틀리길래 요래조래 찾아봤더니 
addLight(light:AbstractLight):void 가 따로 생겼네요.

오늘 알게된건 기본사용법과 Light 추가하는 방법..요정도??

잡담]
Papervision3D 를 공부하려고 생각하고 있었는데 Away3D로 갈아타야겠네요.(갈아탈것도 없을 정도로 한게 없지만..-_-;)
http://powerfl.com/?p=199 지돌스타 님이 남기신 글 입니다.
블로그+카페를 통해 도움을 많이 받는분이라 항상 감사해하고 있는데 3D에 관해서도 좋은글을 남겨주셨네용

package
{
	import away3d.cameras.Camera3D;
	import away3d.containers.Scene3D;
	import away3d.containers.View3D;
	import away3d.lights.DirectionalLight3D;
	import away3d.materials.PhongColorMaterial;
	import away3d.materials.WireColorMaterial;
	import away3d.primitives.Sphere;
	
	import flash.display.Sprite;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.geom.Rectangle;
	import flash.geom.Vector3D;
	
	[SWF (width="500" , height="400" , backgroundColor="0x333333" , frameRate="60")]
	public class Away2 extends Sprite
	{
		private var stageRect:Rectangle;
		private var scene:Scene3D;
		private var camera:Camera3D;
		private var viewport:View3D;
		private var light:DirectionalLight3D;
		private var sphere:Sphere;
		
		private var mat1:PhongColorMaterial;
		private var mat2:WireColorMaterial;
		private var wire:Boolean = true;
		
		public function Away2()
		{
			stage.align = StageAlign.TOP_LEFT;
			stage.scaleMode = StageScaleMode.NO_SCALE;
			
			stageRect = new Rectangle(0, 0, stage.stageWidth , stage.stageHeight);
			
			initAway3D();
		}
		private function initAway3D():void
		{
			scene = new Scene3D();
			camera = new Camera3D({zoom:3, focus:200, distance:50});
			viewport = new View3D({camera:camera , scene:scene , x:stageRect.width/2 , y:stageRect.height/2});
			light = new DirectionalLight3D();
			light.direction = new Vector3D(500, -500 , 500);
			light.ambient = 0.7;
			light.diffuse = 0.4;
			light.specular = 0.05;
			
			mat1= new PhongColorMaterial(0xff6600);
			mat2 = new WireColorMaterial(0xff6600);
				
			sphere = new Sphere({x:0, y:0 , z:500});
			sphere.segmentsH = 3;
			sphere.segmentsW = 3;
			sphere.material = mat2;
			
			scene.addLight(light);
			scene.addChild(sphere);
			viewport.addEventListener(Event.ENTER_FRAME , enterframe);
			addEventListener(MouseEvent.MOUSE_DOWN , mouseHandler);
			addChild(viewport);
		}
		private function mouseHandler(evt:MouseEvent):void
		{			
			switch(evt.type){
				case MouseEvent.MOUSE_DOWN:
					wire = !wire;
					(!wire) ? sphere.material = mat1 : sphere.material = mat2;
					break;
			}
		}
		private function enterframe(evt:Event):void
		{
			sphere.rotationX += 0.5;
			sphere.rotationY += 0.5;
			viewport.render();
		}
	}
}
저작자 표시 비영리 변경 금지
신고
Posted by 돼냥이

댓글을 달아 주세요


티스토리 툴바