flash 3d flash3d 研究所 pv3d
登陆 | 注册  flash 3d 研究所
教程区





最近更新:
● fool_tiger阁下在讨论区里 回复“旋转摄像机的问题...”(09:40:55)
● fool_tiger阁下在讨论区里 回复“旋转摄像机的问题...”(09:19:42)
● webbise阁下在讨论区里 回复“交换链接...”(23:30:47)
正在浏览教程: 《超简易papervision3D基础 第二篇 物体的各种移动》
《超简易papervision3D基础 第二篇 物体的各种移动》
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傻瓜包下载
源文件下载


中华
(2008-11-25 21:56:47)
太感谢你们了 flash 3d是未来的方向
DDM君
(2008-11-26 11:14:59)
呵呵 感谢 中华君 我们也如此希望 只是在下8年前就在研究网页3d,到现在不知时机成熟与否。
qiqi
(2008-11-28 13:26:49)
弱弱的问一下,输出里面出现以下语句是什么意思:
MaterialObject3D: transformUV() material.bitmap not found!(重复很多行)
fur
(2008-11-28 14:07:35)
因为开始几秒,贴图还没来得及被读取,所以输出框要喊“找不到啊找不到”,贴图一旦被读出就停止叫了。
写给开发者看的,可以消除,但比较麻烦。如果是初学,可以不理会这个,对制作没有影响的。
qiqi
(2008-11-30 00:26:38)
明白了,谢谢fur~ ^_^

(2008-12-08 20:48:07)
cube.moveForward(一定距离) //向物体本地Z的正方向移动
而你的图片上的解说是本地X
DDM君
(2008-12-11 22:31:57)
图片是二维的 只有x,y坐标 只是表示一个规则 以下面的文字为准
如风
(2009-03-09 22:27:16)
不好意思,我是初学者
有点不清楚这两名是什么意思
cube.x+=10;
cube.MoveForward(10);
是不是让cube旋转的
让cube元世界Y轴旋转可以达到一样的效果不
谢谢
DDM君
(2009-03-11 18:44:56)
cube.moveForward(一定距离) //向物体本地Z的正方向移动

a+=1
等同于
a=a+1
aaron
(2009-03-20 11:03:41)
找了好久才找到这么好的博客,学习了!
guest
(2009-03-22 21:40:58)
导出文件以后,放在别的地方打开swf文件,只有深蓝色的立方体了,只能把swf和map.jpg放在一个目录里吗?能不能把图片包含在swf里啊。
milk
(2009-03-25 15:55:44)
好东西啊。博主真的是解决了我的烦恼。我一直研究学习FLASH,一直对FLASH 3D很感兴趣,终于找到一个打开学习之门的钥匙了。
如风
(2009-03-25 23:09:22)
嗯 , 我又从头看了骗,现在明白了,
好有成就感啊,越学越有意思,
谢谢DDM君的回复

要是什么时候自己能开发这样的3D引晴就好了,
有没有FLASH 3D方面基础原理骗呢,
kennyworker
(2009-04-02 17:22:47)
這一篇好棒阿! 讓我想起來 VIEW POINT 好像也是這樣做的
, 感謝感謝!
DDM君
(2009-04-04 19:42:42)
都很不错啊大家,继续加油哦!
wuoliyan
(2009-04-07 11:00:57)
这个应该是右手坐标系吧
wuoliyan
(2009-04-07 11:40:01)
哦~我错了,是左手系统
邀月清风
(2009-04-16 15:15:56)
DDM君,我现在想改用给物体填充颜色,怎么写呢,主要是对类库不熟悉。

我写的部分代码,把贴图的注释掉了!
var mat:ColorMaterial = new ColorMaterial(0xff0000, 1);
cube = new Cube(mat, 100,100,100,3,3,3);



(2009-05-25 17:33:19)
感谢感谢
king
(2009-06-02 23:13:36)
请问要建一个橄榄球要用到什么?用Sphere吗》
LL
(2009-06-05 23:12:30)
似乎教程中的
cube.MoveForward(10);
应该是
cube.moveForward(10);
吧?

(2009-06-14 18:33:34)
scale不可和yaw-pitch-roll一起在enterframe里这是为什么呢?
dreamofc
(2009-06-27 11:27:39)
很好很好,我要努力学习。

还有,看到许多听课不认真的同学,MaterialObject3D: transformUV() material.bitmap not found!这个问题第一篇里就有提过,楼主会被你们折磨死的,那以后谁来指领我们呢?
bee0873
(2009-07-22 14:00:12)
学习小记:
用rotationX旋转时,以世界坐轴X为轴心,顺时针方向为旋转度数为正。
注:ratation玩的是度数,不是弧度!
rotationY,rotationZ同理;
bee0873
(2009-07-22 15:39:14)
DDM兄弟,我想问一下camera的注册点和cube,cylinder的注册点是不是一样啊,我在做一个东东的时候,发现好像有点不一样!!!

(2009-08-08 10:08:56)
DDM君高手...教程里的球体,什么变成了立方体了呀?
ashes_li
(2009-08-12 12:19:26)
最近布置了任务让做flash 3D,博主写的太好了,一定要好好研究。
eagle
(2009-08-20 15:20:37)
你好,如果6个面得贴图是不同的,new MaterialsList({all:new BitmapFileMaterial('map.jpg')}),500,500,500,3,3,3 里的参数该如何写,6个图形全列出来,用逗号隔开?
weidylin
(2009-10-14 14:37:06)
真的很强.强烈支持!
wangkai
(2009-10-14 14:43:00)
这真是我学习3d路上的指南针!太有才了~通俗易懂!顶顶顶
inke
(2009-10-15 10:57:11)
好东西,只有认真学习。。。。
糙人
(2009-12-25 17:46:38)
pitch()和rotationX的区别我没有看出来,好像并不像解释的那样一个按照自身的x坐标旋转一个按照世界x坐标旋转。而是两个都是按照自身的x坐标旋转了。这是实验的结果。不信大家写一段程序看看。

(2010-01-02 21:33:36)
请问 有交流的QQ群吗?群号多少啊?
boycy815
(2010-02-08 17:20:44)
rotationX
rotationY
rotationZ
所绕的轴比较特殊,并不是世界坐标轴,这是实验结果。
rotationZ所绕的轴方向永远不变
rotationY所绕的轴的方向随rotationZ的值改变而改变
rotationX所绕的轴的方向由rotationZ与rotationY的值共同确定,方向永远和本地坐标的X轴方向相同。
三条轴共同穿过物体中心。
然后关于localRotationX,localRotationY,localRotationZ三个所绕的坐标轴,实验出来就是本地坐标轴。吗,貌似和pitch()之类的差不多,一个是属性,一个是方法,本人还是感觉属性好用。

评论人:
邮   箱: (填入邮箱,博客地址均可)

内   容:
链接地址
(广告和垃圾内容可能会被删除,望理解)