`
jy00314996
  • 浏览: 72840 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Papervision3D(PV3D)笔记&教程(3)-坐标系统

阅读更多

      记得上中学的时候学立体几何,老师提到过左手坐标系右手坐标系什么的,不过现在已经基本忘记了,从头再来吧。
 
  首先运行一段代码看看,这段代码的作用是创建颜色分别为红绿蓝的三条线,起点都为坐标原点,终点分别指向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的坐标系统烂熟于心,这可以让我们在以后的学习或开发中少走弯路。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics