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(); //顯示三角形