天天看點

Papervision3D類關系解析(二)

6.proto.CameraObject3D

CameraObject3D類:繼承自DisplayObject3D,所有錄影機的基類

(1)屬性:

zoom :Number:要渲染的物體的縮放,值越大,則場景就放大,距離就縮小,将它與focus一起使用

focus :Number:正數,表示觀察者到近平面的距離,這是任何物體與camera的最近距離,将它與zoom一起使用(高focus值可以放大物體之間的距離,這樣就可以允許更大的深度域,模拟廣角鏡的效果,或魚眼)

sort :Boolean:渲染時物體是否排序

var DEFAULT_POS :Number3D = new Number3D( 0, 0, -1000 ):新錄影機的預設位置

(2)方法:

transformView( transform:Matrix3D=null ):void:world space--->camera space

_flipY :Matrix3D = Matrix3D.scaleMatrix( 1, -1, 1 ); //y值倒轉

tilt( angle:Number ):void:錄影機繞x軸轉動

pan( angle:Number ):void:錄影機繞y軸轉動

7.proto. SceneObject3D(場景管理)

SceneObject3D類:繼承自DisplayObjectContainer3D,是所有場景的基類

場景是放置物體的地方,它包含3D環境

場景管理所有渲染的物體,它擴充了DisplayObjectContainer3D類來配置設定顯示物體

SceneObject3D是抽象基類,是以不能執行個體化

(1)屬性:

container :Sprite:你繪制到的地方

geometries :Dictionary:場景中的幾何體清單

stats :Object:總體和目前統計資訊(points,polys,triangles,performance,rendered)

objects :Array:場景中的物體清單

materials :MaterialsList:場景中的材質清單

(2)方法:

addChild( child:DisplayObject3D, name:String=null ):DisplayObject3D

removeChild( child:DisplayObject3D ):DisplayObject3D

renderCamera( camera :CameraObject3D ):void:渲染,流程如下:

       <1> Render performance stats;

       <2> Materials: MovieMaterial.updateAnimatedBitmaps();

       <3> 3D projection:

        1> Transform camera: camera.transformView();

              2> Project objects:

       <4> Z sort: this.objects.sortOn( 'screenZ', Array.NUMERIC );

       <5> Render objects: renderObjects( camera.sort );

8.proto. GeometryObject3D

GeometryObject3D類:繼承自EventDispatcher,包含一對象的MESH定義

(1)屬性:

material: MaterialObject3D:材質

materials:材質清單

boundingSphere2:邊界球半徑的平方

faces    :Array:MESH的面

vertices :Array:頂點

transformVertices(transformation:Matrix3D):貌似未實作

(2)方法:

transformUV( material:MaterialObject3D ):void:

getBoundingSphere2():Number

9.proto. MaterialObject3D

MaterialObject3D類:繼承自EventDispatcher,所有材質的基類。是抽象基類,故不能執行個體化

(1)屬性:

bitmap :BitmapData:透明或不透明的BitmapData紋理

smooth :Boolean:繪制BitmapData紋理時是否要平滑

lineColor :Number:面的outline的RGB顔色

lineAlpha :Number:面的outline的8位的alpha值(若為0,則不繪制outline)

fillColor :Number:面的填充顔色(隻有無紋理時才有效)

fillAlpha :Number:alpha值(8位)

get doubleSided():是否雙面shade

oneSide :Boolean:是否單面shade

invisible :Boolean:是否不可見(不畫)

opposite :Boolean:是否相反(隻用于雙面shade)

scene :SceneObject3D:所屬的scene

static public var DEFAULT_COLOR :int = 0x000000;:材質的預設顔色(黑色)

static public var DEBUG_COLOR :int = 0xFF00FF;:DEBUG材質的顔色

name :String:材質名

id :Number:材質ID

maxU :Number

maxV :Number

geom目錄

10. Vertex2D類:2D projected vertices

(1)屬性:

       x,y,z

       extra:Object

       visible :Boolean:設定該頂點在經過投影後是否可見。若為false,則表示該頂點在錄影機平面的後面

11. Vertex3D類:3D頂點

同10

12. Vertices3D類:繼承自DisplayObject3D類,頂點組

方法:

project( parent :DisplayObject3D, camera :CameraObject3D, sorted :Array=null ):Number:将3d坐标投影到2d平面

boundingBox():Object:計算包圍盒,傳回{minX, maxX, minY, maxY, minZ, maxZ}

transformVertices( transformation:Matrix3D ):void:變換頂點

13. Mesh3D類:繼承自Vertices3D類,建立和顯示由頂點和三角形組成的3D物體

方法:

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

projectTexture( u:String="x", v:String="y" ):void:從指定平面的平面投影(u-紋理水準軸,v-紋理垂直軸)

14. Face3D類:渲染線性采樣的紋理貼圖的三角形,也支援顔色填充和輪廓線(繪制代碼就在這裡!!!)

(1)屬性:

vertices :Array:一個三角形的3個頂點

materialName :String:材質名

uv :Array:每個三角形頂點的UV坐标

screenZ :Number:轉換後的三角形的平均深度

visible :Boolean:面是否可見

id :Number:面ID

存儲三角形頂點的引用:

private var v0:Vertex3D;

       private var v1:Vertex3D;

       private var v2:Vertex3D;

(2)方法:

transformUV( instance:DisplayObject3D=null ):Matrix:應用更新後的UV紋理映射值到三角形上,這用來加速渲染

render( instance:DisplayObject3D, container:Sprite ): Number:渲染三角形

渲染流程:

<1>.内部

有紋理:

graphics.beginBitmapFill( texture, _localMatrix, true, material.smooth);

無紋理:

graphics.beginFill( material.fillColor, fillAlpha );

<2>.輪廓線

lineAlpha>0:

graphics.lineStyle( 0, material.lineColor, lineAlpha );

lineAlpha=0:

graphics.lineStyle();

<3>.畫三角形

// Draw triangle

graphics.moveTo( x0, y0 );

graphics.lineTo( x1, y1 );

graphics.lineTo( x2, y2 );

<4>.顯示出來

graphics.lineTo( x0, y0 ); //畫輪廓線

graphics.endFill(); //顯示三角形