STEP1 :  DisplayObject3D의 선회 축 만들기

: 이전 Netsting 에서 Sphere에 Sphere를 addChild하여 부모 자식 관계를 만든 다음 부모를 회전시켜 처리 하였다면, 이번에는 Sphere대신 DisplayObject3D에 Sphere를 추가시켜 do3D를 회전시켜 본다.
=> 즉, do3D가 선회 축이 되는 것임.

[ 참조 ]
(이제부터 DisplayObject3D는 길기 땜시 줄여 do3D라고 부르기로 함.)

STEP2 : 꼭지점에 접근하는 방법

ex) _sphere.geometry.vertices[i].x 
이런 식으로 해당 do3D Object에서 geometry (기하) => vertices (꼭지점) => [i] (인덱스) => x (좌표) 순서로 접근한다.

STEP3 : 삼각 면에 접근하는 방법

ex) _sphere.geometry.faces[i]
이런 식으로 해당 do3D Object에서 geometry (기하) => faces (면) => [i] (인덱스) 로 접근한다.
접근한 면은 [object Triangle3D]로 변환하여 사용할 수 있다.

구 안쪽에 구 넣기

이제 위에서 배운 3가지 단계를 거쳐 구 내부에 작은 구를 넣는 방법을 적용하여 보겠습니다 ^^;
(주석 참조 => 모르는거 있음 리플 주시고요 ㅋ)


//Main.mxml

<?xml version="1.0" encoding="utf-8"?>

<mx:Application

       creationComplete="init()"

       frameRate="40"

       xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">

       <mx:Script>

             <![CDATA[

                    import sample.VerticesExample;

                    import mx.core.UIComponent;

                   

                    private function init():void{

                           var bs:VerticesExample = new VerticesExample();

                          

                           var ui:UIComponent = new UIComponent();

                           ui.addChild(bs);

                          

                           this.addChild(ui);

                    }

                   

             ]]>

       </mx:Script>

</mx:Application>


//VerticesExample.as

package sample

{

       import flash.events.Event;

      

       import org.papervision3d.objects.DisplayObject3D;

       import org.papervision3d.objects.primitives.Sphere;

       import org.papervision3d.view.BasicView;

 

       public class VerticesExample extends BasicView

       {

             private var _do3D:DisplayObject3D;

            

             public function VerticesExample()

             {

                    init();

                    startRendering();

             }

            

             private function init():void{

                   

                    _do3D = new DisplayObject3D();   //회전 생성

                    scene.addChild(_do3D);

                   

                    //작은 원들이 들어갈 원을 생성, 실제  scence 에는 추가되지 않음.

                    var bigSphere:Sphere = new Sphere(null,200,10,10);  

                    // 원의 꼭지점 계산

                    var vLen:uint = bigSphere.geometry.vertices.length; 

                   

                    for(var i:uint=0;i<vLen;i++){

                          

                           //작은 생성

                           var smallSphere:Sphere = new Sphere(null,Math.random()*30,2,2);  

                          

                           // 원의 꼭지점 좌표에 작은 원을 위치 한다.

                           smallSphere.x = bigSphere.geometry.vertices[i].x;   

                           smallSphere.y = bigSphere.geometry.vertices[i].y;

                           smallSphere.z = bigSphere.geometry.vertices[i].z;

                          

                           //작은원을 삽입한다. 큰원은 삽입 안됨( 원은 꼭지점 참조용)

                           _do3D.addChild(smallSphere);

                    }

                   

             }

            

             override protected function onRenderTick(event:Event=null):void{

                   

                    _do3D.localRotationY+=1;   //회전축 돌리기

                   

                    super.onRenderTick();

             }

            

       }

}

+ Recent posts