태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

안드로이드용 영어 어학기 Smart LC

스마트LC 소개 링크:
http://blog.ehxm.net/123

티스토어 링크:
http://bit.ly/awW3XW

Papervision 3D Tutorial 6 : Dynamic Image Material

Posted by EHXM. Posted in " Adobe Flash Platform/Tutorial "2009/06/10 21:57


Papervision 3D Tutorial 6 : Dynamic Image Material

Image를 URL을 통해 동적으로 불러온 후 material로 설정 해 보겠습니다.

AC3에서 동적으로 이미지를 불러오는 경우, Loader클래스를 사용합니다. ( flash.display.Loader )
material 생성자에 URL을 바로 적어서 생성할 수 있지만, 웹에서 외부 이미지를 사용할때는 그 이미지를 코드에서 사용한 시점과 다운받는 시점이 차이가 나기때문에 그 이미지를 확실히 load했을때 사용할 수 있는 방법이 필요하므로, Loader 클래스를 이용하여 이미지를 로드 할 수 있다.

Loader를 사용하기 위해서, Loader 변수를 추가하고, Loader에 이벤트를 등록하고, 이벤트를 처리하여 material로 설정하는 과정으로 이용하면 된다.
Pv3dBase 클래스를 상속 한 후 다음과 같이 변수를 추가한다.

	public class tutorial extends pv3dBase{
		
		private var plane:DisplayObject3D;
		private var cone:Cone;
		private var mat1:BitmapMaterial;
		private var loader:Loader;
		private var statText:TextField

 
생성자에서 Loader를 생성
		public function tutorial(_width:Number, _height:Number){
			loader = new Loader();
			init(_width, _height);
		}

init3d()에서 3D 기본 세팅
		override protected function init3d():void{
			mat1 = new BitmapFileMaterial("images/ehxm.jpg");
			mat1.doubleSided = true;
			mat1.smooth = true;
			
			plane = new Plane(null, 300, 200, 10, 10);
			cone = new Cone(null);
			
			plane.material = mat1;
			
			cone.material = mat1;
			
			cone.x = 150;
			cone.pitch(-30);
			
			plane.x = -150;
			plane.z = 100;
			
			camera.x=0;
			camera.y=0;
			camera.z=-1000;
			camera.zoom=100;
			
			scene.addChild(plane);
			scene.addChild(cone);
		}

init2d()에서 이미지를 불러오는 상태를 출력하는 텍스트 필드를 추가
		override protected function init2d():void{
			statText = new TextField()
			addChild(statText);
		}

initEvent()함수에서 Loader에 관한 이벤트를 등록한 후 핸들러 처리
ProgressEvent.PROGRESS는 Loader에서 이미지를 불러오는 이벤트,
Event.COMPLETE는 load가 완료되었을때의 이벤트
		override protected function initEvents():void{
			addEventListener(Event.ENTER_FRAME, onEnterFrame);
			loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, handleProgress);
			loader.contentLoaderInfo.addEventListener(Event.COMPLETE, handleComplete);
		}

불러오는 과정을 %로 나타내기 위해 다음과 같이 사용하고 텍스트 필드로 출력
		private function handleProgress(event:ProgressEvent):void{
			var percent:Number = event.bytesLoaded / event.bytesTotal * 100;
			statText.text = "Loading . . " + percent.toString();
		}

load가 완료되면 불러온 이미지를 loader.content로 접근할 수 있으며, 여기서는 이미지 파일이므로 Bitmap으로 캐스팅 해준다. 불러온 Bitmap으로 Material 생성 후 Object에 적용
		private function handleComplete(event:Event):void{
			statText.text = "Complete";
			var _bitmap:Bitmap = Bitmap(loader.content);
			mat1 = new BitmapMaterial(_bitmap.bitmapData);
			mat1.doubleSided = true;
			
			plane.material = mat1;
			cone.material = mat1;
		}

이제 loader.load(new URLRequest("이미지주소")); 를 실행하면 이벤트가 실행되고 이미지를 로드할 수 있다.
클래스에 이미지 주소를 받는 메소드를 추가한다. 이 메소드는 Flex에서 버튼을 클릭할때 실행
		public function setImg(imgURL:String):void{
			loader.load(new URLRequest(imgURL));
		}

전체 tutorial 클래스 소스
// ActionScript file
package ehxm{
	import flash.display.Bitmap;
	import flash.display.Loader;
	import flash.events.Event;
	import flash.events.ProgressEvent;
	import flash.filters.BitmapFilter;
	import flash.net.URLRequest;
	import flash.text.*;
	
	import org.papervision3d.materials.BitmapFileMaterial;
	import org.papervision3d.materials.BitmapMaterial;
	import org.papervision3d.objects.DisplayObject3D;
	import org.papervision3d.objects.primitives.Cone;
	import org.papervision3d.objects.primitives.Plane;
	
	public class tutorial extends pv3dBase{
		
		private var plane:DisplayObject3D;
		private var cone:Cone;
		private var mat1:BitmapMaterial;
		private var loader:Loader;
		private var statText:TextField
		
		//출력될 canvas를 매개변수로 받아서 canvas의 width, height로  viewport의 width, height설정
		public function tutorial(_width:Number, _height:Number){
			loader = new Loader();
			init(_width, _height);
		}
		override protected function initEvents():void{
			addEventListener(Event.ENTER_FRAME, onEnterFrame);
			loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, 

handleProgress);
			loader.contentLoaderInfo.addEventListener(Event.COMPLETE, handleComplete);
		}
		private function handleProgress(event:ProgressEvent):void{
			var percent:Number = event.bytesLoaded / event.bytesTotal * 100;
			statText.text = "Loading . . " + percent.toString();
		}
		private function handleComplete(event:Event):void{
			statText.text = "Complete";
			var _bitmap:Bitmap = Bitmap(loader.content);
			mat1 = new BitmapMaterial(_bitmap.bitmapData);
			mat1.doubleSided = true;
			
			plane.material = mat1;
			cone.material = mat1;
		}
		public function setImg(imgURL:String):void{
			loader.load(new URLRequest(imgURL));
		}
		override protected function init3d():void{
			mat1 = new BitmapFileMaterial("images/ehxm.jpg");
			mat1.doubleSided = true;
			mat1.smooth = true;
			
			plane = new Plane(null, 300, 200, 10, 10);
			cone = new Cone(null);
			
			plane.material = mat1;
			
			cone.material = mat1;
			
			cone.x = 150;
			cone.pitch(-30);
			
			plane.x = -150;
			plane.z = 100;
			
			camera.x=0;
			camera.y=0;
			camera.z=-1000;
			camera.zoom=100;
			
			scene.addChild(plane);
			scene.addChild(cone);
		}
		override protected function init2d():void{
			statText = new TextField()
			addChild(statText);
		}
		override protected function processFrame():void{
			cone.yaw(1);
			plane.rotationY = (stage.width/2 - mouseX)/10;
			plane.rotationX = (stage.height/2 - mouseY)/10;
		}
	}
}

mxml파일에 Canvas, Button, TextInput을 추가해서 디자인을 다음과 같이 만들고, 버튼클릭시에 setImg 메소드를 호출
 복사시 이줄을 삭제해주세요

결과화면
보안처리를 해주지 않았으므로,
주소창에 http://ehxm.net/flex/images/ehxm1.jpg 라고 입력하고 클릭.

관련 TAG로 검색해보세요. : ,

¬ COMMENT [0]

여러분의 커뮤니케이션을 기다리고 있습니다.

  1. : 이름
  2. : 홈페이지

  1. : 비밀번호

[안드로이드] 영어 어학기 어플

영어 듣기 공부 많이들 하시나요? 따로 어학기를 장만하시기는 비용이 들죠? 스마트폰에서 MP3 파일을 터치를 이용해서 자유롭게 듣을 수 있는 영어 어학기 어플입니다. 동아리.....

2010년 대한민국 매쉬업 경진대회 후기, 아이디어 전쟁을 다녀와서..

아이디어의 전쟁의 현장이었던 2010년 대한민국 매쉬업 경진대회에 다녀왔습니다. 이번 대회는 지난 2월 6일(토요일), 삼성동 코엑스 컨퍼런스룸 401에서 열렸습니다. 이번.....

2010년 100가지가 넘는 안드로이드폰이 몰려온다!

2010년에 100가지가 넘는 안드로이드 폰 출시가 될 예정입니다. Mobile World Congress keynote에서 Google CEO Eric Schmidt의 연설.....

[안드로이드] 모토로이 체험할 수 있는 곳 (전국)

서울, 안양, 부산, 대구, 광주, 대전에 안드로이드 폰 체험 할 수 있는 곳이 있네요. 저는 코엑스 메가박스 입구에 있는 모토로라 체험 부스에서 우연히 모토로이를 만져보게 되.....

위 3D 갤러리는 http://www.fotoviewr.com/ 사이트의 Fotoviewr 입니다. Flex와 Papervision3D를 이용하여 위와같은 3D 갤러리를 구현해.....

무료 MP3 포멧 변경 툴 - Free MP3 WMA Converter
무료 MP3 포멧 변경 툴 - Free MP3 WMA Converter
무료 MP3 포멧 변경 툴 - Free MP3 WMA Converter
무료 MP3 포멧 변경 툴 - Free MP3 WMA Converter
언톡 2010년 신입생 모집 포스터
Android, LEGO NXT를 이용한 Sudoku Solving Robot 제작
Android, LEGO NXT를 이용한 Sudoku Solving Robot 제작
Android, LEGO NXT를 이용한 Sudoku Solving Robot 제작
Android, LEGO NXT를 이용한 Sudoku Solving Robot 제작
1 ... 86 87 88 89 90 91 92 93 94 ... 108

Category

전체보기 (108)
Anycall Dreamers (1)
안드로이드 (39)
Adobe Flash Platform (20)
Algorithm (0)
개발노트 (6)
경험 (33)

글 보관함

2011/02 (3)

2011/01 (1)

2010/09 (1)

2010/08 (1)

2010/07 (2)

Calendar

«   2012/05   »
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

믹시


Total : 126,963 Today : 91 Yesterday : 114