flash 3d flash3d 研究所 pv3d 共享资源  | 经典范例  | 视频教程  | 友情链接  | 联系我们
登陆 | 注册  flash 3d 研究所
教程区





最近更新:
● allthrough阁下在讨论区里 发表新主题“【求助】关于PV3D的VectorSha...”(22:14:36)
● compra viagra阁下在教程区里 回复“《超简易papervision3D基础 ...”(11:24:50)
● cialis阁下在教程区里 回复“cailvenqq的dae模型经验...”(11:24:27)
正在浏览教程: 《超简易papervision3D基础 第十一篇 转换绕旋轴和卡通材质》
《超简易papervision3D基础 第十一篇 转换绕旋轴和卡通材质》
DDM君 , Flab3D.com (允许转载,转载请注明)

常常有朋友会想要实现,或摄像机,或某物体绕另一个物体旋转的功能。其实它的思路非常简单。
另外讨论区有朋友询问是否能够卡通渲染,嗯…其实pv3d是有类似功能的。实事上卡通材质相对其他材质是一种耗资源较少的方法。但是卡通勾线却是没有适用价值非常耗资源的且效果很差的,希望明年内能有优良的卡通勾线功能,所以这里我们不讲解卡通勾线的问题。







原理解释
转换绕旋轴的思路应该源于以前的三维动画架设师的技巧。以前我们的三维软件中没有移动pivot功能,三维架设师常常把此物体父籍给另一个物体,旋转另父物体,则可达成绕任意点旋转子物体的目的。
我们建立一个不可被渲染的虚拟DiaplayObject3D物体,把物体作为虚拟体的子物体,旋转虚拟体即可。注意,由于物体是虚拟体的子物体,那么他的,x,y,z都是相对虚拟物体的距离,我们可以看作是绕旋的半径。

目前建立带贴图的材质,步骤还稍稍有点麻烦。卡通材质需要两个东西,卡通材质和材质上的位图贴图。把这两个东西合在一起变成生成模型时能被接受的MaterialObject3D参数.
如果有朋友确实需要更方便的材质带贴图功能,可以发到讨论区,我们研究所会放出更方便的贴图功能。


这里下载源代码
这次在下不想加更多外部导入贴图的代码,所以手动在fla文件里导入了需要的位图贴图,并命名其类名为MyMap,继承自BitmapData。代码中我们可以直接new MyMap()来建立和使用,我们需要它作为BitmapData使用。
pv3d 教程
代码分析
建立两个DisplayObject3D虚拟物体,我们可在他们之间互相切换sphere1

private var sphere1:Sphere;
private var do3d1:DisplayObject3D=new DisplayObject3D;
private var do3d2:DisplayObject3D=new DisplayObject3D;


凡是和材质有关的都必需要有光源,建立好了记住要加到场景里。

private var light1:PointLight3D=new PointLight3D();


建立卡通材质,4个参数分别是:1光源2亮部颜色3影部颜色4颜色段数

var shader1:CellShader= new CellShader(light1,0xffffff,0x555555,4);


注意下面这个不是我们平常用的BitmapFileMaterial哦,这个东西不能直接new BitmapMaterial(贴图地址),它只接受BitmapData参数。MyMap就是在下在fla文件中导入的位图的类名字,是个BitmapData。BitmapData的参数随便写两个什么整数作为长宽都可以,不清楚BitmapData可以查询flash帮助文档。

var bm:BitmapMaterial=new BitmapMaterial(new MyMap(256,256));


有了以上两个东西,就可以用ShadedMaterial把他们结合起来了,ShadedMaterial是一个MaterialObject3D,所以和一般的贴图是一样使用。

var shaded:ShadedMaterial= new ShadedMaterial(bm,shader1);


建立球体模型,ShadedMaterial被直接作为了第一个贴图参数。

sphere1=new Sphere(shaded,100,10,10);


再次强调一下,和flash2d一样,子物体的x,y,z是相对父物体来说的,所以这里x=200表示的是XZ平面绕行半径为200,而不是shpere1的绝对位置。

sphere1.x=200;


这里,在下建立了一个按钮来动态的切换绕行轴。如何建立按钮在下这里就不讲解了,不是flash3d的内容。
当点击按钮时,两个虚拟物体转换着将球体加为子物体继续旋转。记得要先从以前的父亲那里移除再加给另一个父亲。

if (sphere1.parent==do3d1) {
    do3d1.removeChild(sphere1);
    do3d2.addChild(sphere1);
} else {
    do3d2.removeChild(sphere1);
    do3d1.addChild(sphere1);
}



在enterframe里面加入两个虚拟体旋转的代码

do3d1.rotationY+=4;
do3d2.rotationY+=-4;


当然,除开那些建立按钮相关的类,这次需要导入的pv3d新类有:

import org.papervision3d.materials.BitmapMaterial;
import org.papervision3d.materials.shaders.CellShader;
import org.papervision3d.materials.shaders.ShadedMaterial;
import org.papervision3d.lights.PointLight3D;






这个使用材质的方法当然不仅限于卡通材质,任何材质都可以如此使用,只是细节上的不同而已。有什么心得都欢迎给我们分享,有问题欢迎去讨论区
想了解更多其他贴图用法,欢迎参考《贴图,更深一点》


这次的代码比以前的要麻烦很多,但请不要放弃,继续加油!




DDM君
Flab3D.com



Flash3d研究所推荐的最新pv3d傻瓜包
程序源代码
(无法右键另存,直接点击即可)


山紫水明
(2008-12-27 22:27:23)
噢噢~~~ddm昆 满塞~~
苹果
(2008-12-30 14:48:38)
最近忙一些事情没来网站,今天回来了
突然发现换LOGO了,不错 呵呵
fur3
(2009-01-01 01:21:33)
呵呵 稀客稀客~~
cxshabi
(2009-01-05 11:45:43)
噢噢
Hi-Fi
(2009-03-28 19:31:52)
首先我要感谢DMM君~其次~我再测试这些文件时到了这个教程我遇上了一个问题!
private var map1:BitmapData=new MyMap(256,256);

在这段中flex3 提示 MyMap未自定义?

test01.fla中的类是test01.

这其中的关系....


???
(2009-04-04 09:03:43)
貌似昨天服务器好像不正常
laidun
(2009-05-26 17:07:21)
DDM君,盼望你的新的文章,还有几个有连接的,但打开了是空页,不知道怎么回事啊
DDM君
(2009-07-29 00:24:28)
是因为我们这个站浏览器兼容没有制作,所以目前只IE7上能正确显示。
yuxing5
(2009-08-08 16:53:38)
《贴图,更深一点》进不了了呀
chenyin151
(2009-11-19 14:14:31)
无意之间来到这,发现这里真是一个不错的地方,对于我们要学习PV3D的朋友来说真是个天堂,
Greg
(2009-12-24 17:46:48)
if (sphere1.parent==do3d1) {
do3d1.removeChild(sphere1);
do3d2.addChild(sphere1);
} else {
do3d2.removeChild(sphere1);
do3d1.addChild(sphere1);
}
这样反复add,remove不会增加内存负担?
wrage
(2010-09-02 18:07:06)
迟到不一定学不到,笨鸟不一定慢节拍
wrage
(2010-09-28 09:49:21)
用DAE模型,很卡呀
woshicaigang
(2011-08-02 14:24:57)
迟到很久了
Gracyn
(2011-08-23 03:04:41)
Pin my tail and call me a dokeny, that really helped.
rpxeqqsidjc
(2011-08-23 19:58:21)
NdGIbA wpekhfvyxjld
seriago
(2011-08-28 09:49:41)
order zovirax online canadian vvg buy generic cymbalta >:OO
iamr3al
(2011-09-01 09:24:35)
buy propecia from usa >:-((( topamax wellbutrin eating disorder 4386
OLAYOLLIE
(2011-09-04 08:54:14)
order prednisone 8-[[[ propecia patent expiration generic 50313
tomionl
(2011-09-15 07:55:36)
online accutane zem colchicine nxhpjp
jildoo
(2011-09-16 08:39:59)
cost of priligy =-]]] buy propecia in usa 559661
sandilincoln
(2011-09-20 09:47:33)
propecia 848932 topamax 355448
cheap tadalafil
(2012-01-27 04:54:15)
svlfska cheap tadalafil >:-[ viagra kyoxF cialis :-O sildenafil 6767 cheap viagra 1107 cheap cialis 1930
payday loan
(2012-01-30 04:27:35)
wceptm payday loan :-O payday loan 2545 Payday loans IaqIz
cialis
(2012-02-02 04:26:56)
cuumtbrg cialis :-O tadalafil 0426 viagra mjrUhR viagra 4762
viagra
(2012-02-02 04:26:59)
gkskbbg viagra 8]]] cialis >:-OOO generic cialis 0726 viagra cheap %-[[[
payday loans
(2012-02-02 20:46:27)
tliyxb payday loans >:-OOO instant cash advance XRXTNn payday loans online SPpqb
payday loans
(2012-02-03 01:35:10)
xmzsis payday loans 2848 cash advance 9372 payday loans >:]]
cash advance
(2012-02-03 01:35:20)
msaxbttt cash advance uUTdl instant cash advance %-[[[ payday loans online CRKTFJ
accutane
(2012-02-04 02:40:02)
labjsfh accutane >:-OOO viagra 2302 propecia 9013 cialis :-O
cialis online
(2012-02-04 11:24:17)
shkpapd cialis online 0028 viagra %-[[[ viagra online 9572 compra cialis ixaiYf viagra crObv cialis en ligne 8173

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

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

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