记得上中学的时候学立体几何,老师提到过左手坐标系右手坐标系什么的,不过现在已经基本忘记了,从头再来吧。
首先运行一段代码看看,这段代码的作用是创建颜色分别为红绿蓝的三条线,起点都为坐标原点,终点分别指向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的坐标系统烂熟于心,这可以让我们在以后的学习或开发中少走弯路。
分享到:
相关推荐
Papervision3D 教程,pv3d,pv3d+Flex,pv3d中文帮助
整理了Papervision3d的各方面资料,并且提供一个全景代码案例!
Papervision3D is a powerful real-time 3D engine for Flash. Papervision3D can take externally created 3D models and render them as Flash content, without requiring end-users to download or install an ...
尤其是去年ActionScript 3发布了之后,ActionScript的效率得到了大幅度提升,基于此的Papervision3D无论是在效率、功能上都有了很大的提高。随着现在Web 2.0、Web-Game及休闲类竞技网络游戏的发展,相信Papervision...
Papervision3D_2.0.869.swc
《Papervision3D+Essentials》中文翻译
这是一本papervision 3D入本的好书,详细介绍了papervision 3D的使用
例子来自于Flash3D研究所,超简易Papervision3D基础 Main.cs 小球加外部贴图 Main2.cs 物体的各种移动 (讲解移动/旋转/放大物体的方法) Main3.cs导入外部模型 (讲解如何从外部软件导入collada文件) Main4.cs pv...
使用papervision3d引擎做的7个实例源码
Papervision3D_2.1.932.swcPapervision3D_2.1.932.swcPapervision3D_2.1.932.swc
希望对学习PV3D引擎的人提供点帮助。这是一pv3D的api电子书
Papervision3D Essentials (PV3D)的中文版电子书及 书中实例源码下载 PV3D FLEX 三维渲染必备开源包
NULL 博文链接:https://baixiaozhe.iteye.com/blog/319388
一个不错的Flash 3D引擎Papervisio3D,让你的flash从2D转化3D不再是难事.最新版本as3
Papervision3D Essentials 中文版 翻译 第一章 docx格式
Papervision3D的api,这个帮助文档介绍各种包的使用,有利于快速学习3D
papervisiion3d sdk,开发环境myeclipse+flex+pv3d
学习PaperVision3D随行笔记,基础知识
Flash3D引擎 "Papervision3D" 演示 http://www.onemotion.com/flash/spider/
Papervision3D_1_5 Flash3D运行环境,让你的flash玩转3d