快速导航:   教程资源  | 经典范例  | 友情链接  | 联系我们  | 官方微博
登陆 | 注册

 flash 3d 研究所
flash3d 研究所 pv3d 教程 研究所小贴士: 很遗憾,flash组件不能在stage3d中使用了,因为不是displayObject,所以只能自制组件










最近更新:
● BengerdWep阁下在讨论区里 发表新主题“Milok, Yugul, Redge ...”(18:56:36)
● BenBaG阁下在讨论区里 发表新主题“Delazar, Hernando, A...”(18:39:03)
● ChrisEr阁下在讨论区里 发表新主题“Daro, Jens, Domenik ...”(17:53:00)
浏览主题:《超简易papervision3D基础 第二篇 物体的各种移动》

《超简易papervision3D基础 第二篇 物体的各种移动》
DDM君 (2012-03-16 05:50:45)

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傻瓜包下载
源文件下载





flash 3d 研究所
(2008-11-25 21:56:47)
太感谢你们了 flash 3d是未来的方向


flash 3d 研究所
(2008-11-26 11:14:59)
呵呵 感谢 中华君 我们也如此希望 只是在下8年前就在研究网页3d,到现在不知时机成熟与否。


flash 3d 研究所
(2008-11-28 13:26:49)
弱弱的问一下,输出里面出现以下语句是什么意思:
MaterialObject3D: transformUV() material.bitmap not found!(重复很多行)


flash 3d 研究所
(2008-11-28 14:07:35)
因为开始几秒,贴图还没来得及被读取,所以输出框要喊“找不到啊找不到”,贴图一旦被读出就停止叫了。
写给开发者看的,可以消除,但比较麻烦。如果是初学,可以不理会这个,对制作没有影响的。


flash 3d 研究所
(2008-11-30 00:26:38)
明白了,谢谢fur~ ^_^


flash 3d 研究所
(2008-12-08 20:48:07)
cube.moveForward(一定距离) //向物体本地Z的正方向移动
而你的图片上的解说是本地X


flash 3d 研究所
(2008-12-11 22:31:57)
图片是二维的 只有x,y坐标 只是表示一个规则 以下面的文字为准


flash 3d 研究所
(2009-03-09 22:27:16)
不好意思,我是初学者
有点不清楚这两名是什么意思
cube.x+=10;
cube.MoveForward(10);
是不是让cube旋转的
让cube元世界Y轴旋转可以达到一样的效果不
谢谢


flash 3d 研究所
(2009-03-11 18:44:56)
cube.moveForward(一定距离) //向物体本地Z的正方向移动

a+=1
等同于
a=a+1


flash 3d 研究所
(2009-03-20 11:03:41)
找了好久才找到这么好的博客,学习了!


flash 3d 研究所
(2009-03-22 21:40:58)
导出文件以后,放在别的地方打开swf文件,只有深蓝色的立方体了,只能把swf和map.jpg放在一个目录里吗?能不能把图片包含在swf里啊。


flash 3d 研究所
(2009-03-25 15:55:44)
好东西啊。博主真的是解决了我的烦恼。我一直研究学习FLASH,一直对FLASH 3D很感兴趣,终于找到一个打开学习之门的钥匙了。


flash 3d 研究所
(2009-03-25 23:09:22)
嗯 , 我又从头看了骗,现在明白了,
好有成就感啊,越学越有意思,
谢谢DDM君的回复

要是什么时候自己能开发这样的3D引晴就好了,
有没有FLASH 3D方面基础原理骗呢,


flash 3d 研究所
(2009-04-02 17:22:47)
這一篇好棒阿! 讓我想起來 VIEW POINT 好像也是這樣做的
, 感謝感謝!


flash 3d 研究所
(2009-04-04 19:42:42)
都很不错啊大家,继续加油哦!


flash 3d 研究所
(2009-04-07 11:00:57)
这个应该是右手坐标系吧


flash 3d 研究所
(2009-04-07 11:40:01)
哦~我错了,是左手系统


flash 3d 研究所
(2009-04-16 15:15:56)
DDM君,我现在想改用给物体填充颜色,怎么写呢,主要是对类库不熟悉。

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




flash 3d 研究所
(2009-05-25 17:33:19)
感谢感谢


flash 3d 研究所
(2009-06-02 23:13:36)
请问要建一个橄榄球要用到什么?用Sphere吗》


flash 3d 研究所
(2009-06-05 23:12:30)
似乎教程中的
cube.MoveForward(10);
应该是
cube.moveForward(10);
吧?


flash 3d 研究所
(2009-06-14 18:33:34)
scale不可和yaw-pitch-roll一起在enterframe里这是为什么呢?


flash 3d 研究所
(2009-06-27 11:27:39)
很好很好,我要努力学习。

还有,看到许多听课不认真的同学,MaterialObject3D: transformUV() material.bitmap not found!这个问题第一篇里就有提过,楼主会被你们折磨死的,那以后谁来指领我们呢?


flash 3d 研究所
(2009-07-22 14:00:12)
学习小记:
用rotationX旋转时,以世界坐轴X为轴心,顺时针方向为旋转度数为正。
注:ratation玩的是度数,不是弧度!
rotationY,rotationZ同理;


flash 3d 研究所
(2009-07-22 15:39:14)
DDM兄弟,我想问一下camera的注册点和cube,cylinder的注册点是不是一样啊,我在做一个东东的时候,发现好像有点不一样!!!


flash 3d 研究所
(2009-08-08 10:08:56)
DDM君高手...教程里的球体,什么变成了立方体了呀?


flash 3d 研究所
(2009-08-12 12:19:26)
最近布置了任务让做flash 3D,博主写的太好了,一定要好好研究。


flash 3d 研究所
(2009-08-20 15:20:37)
你好,如果6个面得贴图是不同的,new MaterialsList({all:new BitmapFileMaterial('map.jpg')}),500,500,500,3,3,3 里的参数该如何写,6个图形全列出来,用逗号隔开?


flash 3d 研究所
(2009-10-14 14:37:06)
真的很强.强烈支持!


flash 3d 研究所
(2009-10-14 14:43:00)
这真是我学习3d路上的指南针!太有才了~通俗易懂!顶顶顶


flash 3d 研究所
(2009-10-15 10:57:11)
好东西,只有认真学习。。。。


flash 3d 研究所
(2009-12-25 17:46:38)
pitch()和rotationX的区别我没有看出来,好像并不像解释的那样一个按照自身的x坐标旋转一个按照世界x坐标旋转。而是两个都是按照自身的x坐标旋转了。这是实验的结果。不信大家写一段程序看看。


flash 3d 研究所
(2010-01-02 21:33:36)
请问 有交流的QQ群吗?群号多少啊?


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


flash 3d 研究所
(2010-08-23 11:04:46)
不得不说。。。讲解得太好了。太适合我这样的新手了。真的非常感谢你们。为开源作出的杰出贡献!


flash 3d 研究所
(2010-09-06 11:12:33)
属性需要这样写才能累加,才能看到动画变化:
cube.x+=10;
方法直接写就可以了:
cube.MoveForward(10);
cube.x+=10等于cube.MoveForward(10);???
不是等于cube.MoveRight(10)吗


flash 3d 研究所
(2010-09-08 01:44:24)
DDM君 请教一下我将scale 属性-= 0.1 发现 矩形很快的缩小了,然后又很快的放大了 而且一直在放大,请问是否scale 属性会有一个临界点当放大或缩小到这个临界点的时候会发送变化


flash 3d 研究所
(2010-10-27 13:29:17)
DDM君,关于世界坐标,他的焦点是在哪?也就是中心点


flash 3d 研究所
(2010-10-27 13:48:19)
我试着,他的中心点一直在舞台中央,另外,不明白,你提到的,世界坐标这个图的意义

可能看不懂世界坐标的起点在哪?


flash 3d 研究所
(2010-12-08 13:07:25)
所有PV3D三维模型都是继承至DisplayObject3D类

不好意思,念着念着总觉得拗口,还是提醒下,上面这句话有错别字,"继承至" 。啰嗦了~

另外谢谢你们,这么好的教程~


flash 3d 研究所
(2011-02-16 17:29:08)
留下谢谢二字是必须要做的事


flash 3d 研究所
(2011-08-22 10:26:15)
IMHO you've got the right anwesr!


flash 3d 研究所
(2011-09-04 14:11:34)
为什么我用这句时会出现语法错误(1093)?
cube.roll(1);
我是用的你们制作的包!
其他两个都对的(cube.yaw(1);cube.pitch(1);)
谢谢!


flash 3d 研究所
(2011-09-04 14:55:13)
我重新下了一下傻瓜包,结果就对了。


flash 3d 研究所
(2011-12-31 10:56:53)
学习学习


flash 3d 研究所
(2012-02-11 18:09:44)
有意思,一边学一边用


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

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

验证码:(为防止机器人骚扰,请麻烦输入验证码^_^)
  

(目前需登陆方可发表)


不想添加了