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