记得上中学的时候学立体几何,老师提到过左手坐标系右手坐标系什么的,不过现在已经基本忘记了,从头再来吧。
首先运行一段代码看看,这段代码的作用是创建颜色分别为红绿蓝的三条线,起点都为坐标原点,终点分别指向XYZ轴的正方向,我们需要用到Line3D,Lines3D,LineMeterial以及Vertex3D这四个类,这四个类会在后面详细介绍,这里只要知道作用是什么就可以了。
Lines3D可以看作是Line3D的一个容器,Line3D本身不能作为3D显示对象被直接加入到Scene3D中,只能通过Lines3D的addLine(line:Line3D)方法先加入到Lines3D以后,再把Lines3D加入到Scene3D里呈现,Lines3D还有一个方法就是addNewLine(size:Number, x0:Number, y0:Number, z0:Number, x1:Number, y1:Number, z1:Number)这个方法允许Lines3D直接绘制出线段,如果初始化时候没有给Lines3D材质的话默认是红色的线,而且一个Lines3D用addNewLine方法绘制的线条只能有一种颜色,所以我们这里需要重新加入3条不同颜色的Line3D。
ActionScript代码:
package { import flash.events.Event; import org.papervision3d.core.geom.Lines3D; import org.papervision3d.core.geom.renderables.Line3D; import org.papervision3d.core.geom.renderables.Vertex3D; import org.papervision3d.materials.special.LineMaterial; import org.papervision3d.view.BasicView; [SWF(width="640",height="480",backgroundColor="#000000",frameRate="30")] public class CoordinateSystem extends BasicView { private var _lines:Lines3D; private var _xAxis:Line3D; private var _yAxis:Line3D; private var _zAxis:Line3D; public function CoordinateSystem() { init(); } private function init():void { setupCoordinateSystem(); addEventListener(Event.ENTER_FRAME,onEnterFrame); } private function setupCoordinateSystem():void { _lines=new Lines3D ; scene.addChild(_lines); var origin:Vertex3D=new Vertex3D ; _xAxis=new Line3D(_lines,new LineMaterial(0xff0000),1,origin,new Vertex3D(200,0,0)); _lines.addLine(_xAxis); _yAxis=new Line3D(_lines,new LineMaterial(0x00ff00),1,origin,new Vertex3D(0,200,0)); _lines.addLine(_yAxis); _zAxis=new Line3D(_lines,new LineMaterial(0x0000ff),1,origin,new Vertex3D(0,0,200)); _lines.addLine(_zAxis); } private function onEnterFrame(event:Event=null):void { _lines.rotationY+=1; _lines.rotationX+=1; singleRender(); if (Math.round(_lines.rotationX%360)==0&&Math.round(_lines.rotationY%360)==0) { removeEventListener(Event.ENTER_FRAME,onEnterFrame); trace("stoped!"); } } } }
看效果图:
运行代码,我们可以看见三条线围绕原点在旋转,当旋转到初始位置的时候又停止,这样做是方便我们观看三条线的方向,停止后我们只能看到红绿两条线,蓝色的垂直于屏幕看不见了(这就是要先旋转的原因),红色的从原点向屏幕左边延伸(X轴向左),绿色的从原点向屏幕上方延伸(Y轴向上),蓝色的向屏幕的里面延伸(Z轴向内)。比划一下,呵呵,这好像是左手坐标系吧。我们发现这跟FLASH本身的坐标系统有点不同,FLASH的Y轴是向下是正方向的。
将PV3D的坐标系统烂熟于心,这可以让我们在以后的学习或开发中少走弯路。