DDM君,Flab3D.com (允许转载,转载请注明)
所有PV3D三维模型都是继承至DisplayObject3D类,所以所有三维模型都有同样的移动,旋转,缩放的方法/属性。(如果不理解什么叫继承可以无视这句话=_=)讲这句的意思是“摄像机这些也是DisplayObject3D”,所以也可以做同样的操作。
我们第一篇的小球在这里不是特别能明显表示下面的区别。所以我们这次用个立方体Cube。
原理介绍:
先记下上面这个图,它保证我们不迷失在三维的世界里,如果你正好是maya,3dsmax的使用,恭喜你!和里面的道理一模一样。
移动:
cube.x //物体在世界坐标的X轴位置
cube.y //物体在世界坐标的Y轴位置
cube.z //物体在世界坐标的Z轴位置
pv3d的三维坐标 图1
cube.moveForward(一定距离) //向物体本地Z的正方向移动
cube.moveBackward(一定距离) //向物体本地Z的负方向移动
cube.moveDown(一定距离)//向物体本地Y的负方向移动
cube.moveUp(一定距离)//向物体本地Y的正方向移动
cube.moveLeft(一定距离)//向物体本地X的负方向移动
cube.moveRight(一定距离)////向物体本地X的正方向移动
这两种有什么区别呢?其实就是world和local坐标系的区别,上面那张图应该能帮助您理解。
旋转:
cube.rotationX //物体绕世界坐标的X轴,顺时针旋转
cube.rotationY //物体绕世界坐标的Y轴,顺时针旋转
cube.rotationZ //物体绕世界坐标的Z轴,顺时针旋转
cube.yaw(一定角度) //以本地的Y为轴心,顺时针旋转
cube.pitch(一定角度) //以本地的X为轴心,顺时针旋转
cube.roll(一定角度) //以本地的Z为轴心,顺时针旋转
(yaw-pitch-roll其实是欧拉角euler的一种描述方法,愿意研究图形数学可以到网上百科查询具体含义,我们flash3d研究所以后也会在图形学原理里放出关于三种旋转方式和万向节锁gimbal-lock的相关资料)
这两种有什么区别呢?还是自己尝试尝试吧~不要放弃任何一种哦,都是每天都会用到的东西。
缩放:(默认下,单位为1,2,3…倍这种,不是百分比)
cube.scaleX //物体延X轴放大
cube.scaleY //物体延Y轴放大
cube.scaleZ //物体延Z轴放大
这是分别延x,y,z的缩放,如果要整体缩放,直接用下面这个就可以了。
cube.scale //物体整体放大
代码流程:
仍然有困难写出代码的朋友,可以
下载源代码
。
和上次一样,建包,放傻瓜包,然后初始化最基础的4要素。不想重新来一次的可以就修改上次的^_^。如果不记得了可以看
《第一篇 人人都能PV3D》—点击到第一篇
我们这次要添加一个cube(立方体)。
cube=new Cube(new MaterialsList({all:new BitmapFileMaterial('map.jpg')}),500,500,500,3,3,3);
介绍一下生成立方体的构造器,和我们第一篇的球体少许不同。
第一个参数需要一个‘材质列表’(MaterialsList),而不是像我们上次小球只要单个材质。(不理解材质列表暂时没关系,其实它就是一个很多单个材质添加在一起的‘数组’或object。我们以后会在中级研究中作一些具体分析)
参数二,参数三,参数四分别是立方体的宽,长,高。
参数五,参数六,参数七分别是决定长宽高有多少段(段数越多运行越慢,但是贴图变形越小,越准确)。
因为需要用‘材质列表’(MaterialsList),所以开始要记得把MaterialsList类导入进来。
import org.papervision3d.materials.utils.MaterialsList;
当然,也得把立方体的类导入
import org.papervision3d.objects.primitives.Cube;
为了能更清楚的测试这些控制的含义,我在初始化的时候先给立方体了一个角度。
cube.rotationX=30;
cube.rotationY=30;
enterframe里面就可以测试我们学到的各种操作了。
属性需要这样写才能累加,才能看到动画变化:
cube.x+=10;
方法直接写就可以了:
cube.MoveForward(10);
这次的也非常简单吧,记住它们,熟悉它们,因为我们每天都会用到。
好好练习哦~加油!
有任何不清楚的地方,欢迎到讨论区发言。(无需注册)
DDM君
Flab3D.com
Flash3d研究所推荐的Pv3d傻瓜包下载
源文件下载