프로그래밍/Flex/AIR2008.09.02 01:34
http://joshua.almirun.com/tech/3d/papervision3d-airs-htmlloader-vanity-cube

AIR를 다운 받고 소스를 보면 알 수 있습니다.

<textarea name="code" class="as3">public function BrowserCubeContainer() { scene = new MovieScene3D(this); camera = new Camera3D(); camera.z = -900; camera.zoom = 5; materials = []; var size:int = 800; cube = new Cube(new MaterialsList({ bottom : createBrowserFace("http://micapam.innariddim.com/"), back : createBrowserFace("http://joshua.almirun.com/"), right : createBrowserFace("http://linkedin.com/in/joshuamostafa"), top : createBrowserFace("http://cfour.com.au/"), front : createBrowserFace("http://media.almirun.com/photos/"), left : createBrowserFace("http://www.vtc.com/modules/products/authorInfo.php?author=107") }), size, size, size, 10, 10, 10); scene.addChild(cube); cube.x = 500; cube.y = 200; addEventListener(Event.ENTER_FRAME, handleEnterFrameEvent); } public function render():void { for (var i:Number = 0; i < materials.length; i++) { (materials[i] as MovieMaterial).updateBitmap(); } cube.rotationX += 1.35; cube.rotationY += 2.55; cube.rotationZ += 0.55; scene.renderCamera(camera); } public function handleEnterFrameEvent(event:Event):void { render(); } private function createBrowserFace(url:String):MovieMaterial { var html:HTMLLoader = new HTMLLoader(); var urlReq:URLRequest = new URLRequest(url); html.width = 800; html.height = 800; html.load(urlReq); var movie:MovieMaterial = new MovieMaterial(html); materials.push(movie); return movie; } </textarea>
눈여겨 볼 부분은 MaterialsList를 생성하는 도중
createBrowserFace() 호출 부분과
var movie:MovieMaterial = new MovieMaterial(html);

 render()가 일어나는 도중
 (materials[i] as MovieMaterial).updateBitmap(); 부분입니다.

정확히 flex 구조를 아는 것은 아니지만 짐작컨데
 addChild() 하지 않는 이상 bitmap이 생성되지 않을 겁니다.

 이렇게 되면 MovieMaterial의 생성자로 DisplayObject가 들어간다고 해도
 bitmapData가 초기화되지 않았기 때문에
 MovieMaterial 이 검게 나올 겁니다.

제대로 동작하기 위해 updateBitmap() 처리를 한 것입니다. (불확실)
Posted by 시난

댓글을 달아 주세요

  1. 이런.. 코드 하일라이트가 티스토리 편집기에서 html을 이스케이프 처리해버려서 (textarea) 되질 않는다--; 뭐냐....

    2008.09.23 11:06 신고 [ ADDR : EDIT/ DEL : REPLY ]