天天看點

Papervision3D類關系解析(一)

一些全局設定,還有log函數

二、core

1.Number3D.as

Number3D類:3D坐标系中的一個值

(1)屬性:x,y,z:Number:浮點數

(2)方法:clone()

                     modulo():長度

                     add()

                     sub()

                     dot()

                     cross()

                     normalize()

                     get ZERO():(0,0,0)

                     toString()

2. NumberUV.as

NumberUV類:UV坐标系中的一個值

(1)屬性:u,v:Number

(2)方法:clone()

                     get ZERO()

                     toString()

3. Matrix3D.as

Matrix3D類:4×3矩陣

import flash.geom.Matrix;

(1)屬性:n11,n12,n13,n14,

                     n21,n22,n23,n24,

                     n31,n32,n33,n34

(2)方法:IDENTITY()

                     toString()

                     calculateMultiply( a:Matrix3D, b:Matrix3D ) :void:矩陣a和矩陣b相乘

multiply( a:Matrix3D, b:Matrix3D ):Matrix3D:矩陣a和矩陣b相乘,傳回值為結果

                     calculateMultiply3x3 ( a:Matrix3D, b:Matrix3D ):void:3×3矩陣相乘

public static function multiply3x3( a:Matrix3D, b:Matrix3D ):Matrix3D:3×3矩陣相乘,傳回值為結果

calculateAdd( a:Matrix3D, b:Matrix3D ):void

public static function add( a:Matrix3D, b:Matrix3D ):Matrix3D

public function calculateInverse( m:Matrix3D ):void

public static function inverse( m:Matrix3D ):Matrix3D:逆

get det():行列式(3×3)

get trace()

copy( m:Matrix3D ):Matrix3D

copy3x3( m:Matrix3D ):Matrix3D

clone( m:Matrix3D ):Matrix3D

multiplyVector( m:Matrix3D, v:Number3D ):void

multiplyVector3x3( m:Matrix3D, v:Number3D ):void

rotateAxis( m:Matrix3D, v:Number3D ):void

rotationX( rad:Number ):Matrix3D

rotationY( rad:Number ):Matrix3D

rotationZ( rad:Number ):Matrix3D

rotationMatrix( x:Number, y:Number, z:Number, rad:Number ):Matrix3D

rotationMatrixWithReference( axis:Number3D, rad:Number, ref:Number3D ):Matrix3D:ref-參考點

translationMatrix( x:Number, y:Number, z:Number ):Matrix3D

scaleMatrix( x:Number, y:Number, z:Number ):Matrix3D

static private var toDEGREES :Number = 180/Math.PI;

static private var toRADIANS :Number = Math.PI/180;

4.proto. DisplayObjectContainer3D

DisplayObjectContainer3D類:繼承自EventDispatcher,可作為DisplayObject3D容器的所有對象的基類。每個DisplayObjectContainer3D對象有自己的child list。

(1)屬性:

       protected var _children       :Dictionary; //以children作為索引的名字清單

       protected var _childrenByName :Object; //以名字作為索引的children清單

       private   var _childrenTotal :int;    // children數目

5.objects.DisplayObject3D(不屬于core,屬于objects!!!)

DisplayObject3D類:繼承自DisplayObjectContainer3D,表示場景中的3D對象(也包括錄影機和其目标)

提供x,y,z,rotationX,rotationY,rotationZ,scaleX,scaleY.scaleZ,visible,transform Matrix3D

(1)屬性:visible:Boolean:是否可見

        name:String:對象名(可選)

              id:int:對象辨別

              extra :Object:包含使用者定義屬性的對象

              container   :Sprite:繪制到的sprite

              material    :MaterialObject3D:材質

              materials   :MaterialsList:材質清單

              scene :SceneObject3D:對象所屬的場景

              parent :DisplayObjectContainer3D:包含該對象的容器(隻讀)

              MESH_SORT_CENTER:String = "meshSortCenter":告訴Mesh3D的render()方法如何排序

              MESH_SORT_FAR:String = "meshSortFar":

              MESH_SORT_CLOSE:String = "meshSortClose"

              相對方向:

              static private var FORWARD :Number3D = new Number3D( 0, 0, 1 );

              static private var BACKWARD :Number3D = new Number3D( 0, 0, -1 );

              static private var LEFT     :Number3D = new Number3D( -1, 0, 0 );

              static private var RIGHT    :Number3D = new Number3D( 1, 0, 0 );

              static private var UP       :Number3D = new Number3D( 0, 1, 0 );

              static private var DOWN     :Number3D = new Number3D( 0, -1, 0 );

              由此可見,PV3D的坐标系是左手系(和D3D一樣)

              transform :Matrix3D:變換矩陣(scaling,translation,rotation)

              var view      :Matrix3D:錄影機變換矩陣

              projected :Dictionary:

              faces     :Array = new Array():面

              geometry :GeometryObject3D:包含該對象的3D幾何定義(instances:不同的對象共享相同的幾何形體,也就是相同的對象顯示多次,instance技術可以節省記憶體)

              screenZ :Number:變換後的物體中心的深度值(Z坐标),也就是到camera的距離。

(2)方法:

       addGeometry( geometry:GeometryObject3D=null ):void:增加幾何定義

       distanceTo( obj:DisplayObject3D ):Number:與obj的距離

       hitTestPoint( x:Number, y:Number, z:Number ):Boolean:是否與指定點相交(與物體的邊界球的半徑相比較)

       hitTestObject( obj:DisplayObject3D, multiplier:Number=1 ):Boolean:與obj是否相交(邊界球),multiplier-邊界球組(貌似還沒實作)

       getMaterialByName( name:String ):MaterialObject3D:獲得材質

       materialsList():String:材質清單中的材質名

       project( parent :DisplayObject3D, camera :CameraObject3D, sorted :Array=null ):Number:投影

       render( scene :SceneObject3D ):void:渲染

       moveForward(distance:Number)

       moveBackward()

       moveLeft()

       moveRight()

       moveUp()

       moveDown()

       translate( distance:Number, axis:Number3D ):void:沿給定方向移動物體

       pitch( angle:Number ):void:(繞X軸旋轉)

       yaw( angle:Number ):void:偏航角(繞Y軸旋轉)

       roll( angle:Number ):void:繞Z軸旋轉

       lookAt( targetObject:DisplayObject3D, upAxis:Number3D=null ):void:讓物體看着某一指定位置(upAxis:向上方向,一般是Y軸正向)

       copyPosition( reference:* ):void:拷貝位置(reference可以為DisplayObject3D或Matrix3D)

       copyTransform( reference:* ):void:拷貝變換矩陣

       updateTransform():void:更新變換矩陣

内部使用的屬性:

protected var _transformDirty :Boolean = false; //Dirty技術。變換時就設為true

       private var _rotationX      :Number;

       private var _rotationY      :Number;

       private var _rotationZ      :Number;

       private var _rotationDirty :Boolean = false; //Dirty技術。旋轉時就設為true

       private var _scaleX         :Number;

       private var _scaleY         :Number;

       private var _scaleZ         :Number;

       private var _scaleDirty     :Boolean = false; //Dirty技術。縮放時就設為true

       protected var _sorted       :Array;

       static private var _totalDisplayObjects :int = 0; // id