Sealyu

--- 博客已迁移至: http://www.sealyu.com/blog

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  618 随笔 :: 87 文章 :: 225 评论 :: 0 Trackbacks

出处:http://hi.baidu.com/heguang

Papervision3D仍然处理2.0 alpha阶段,在测试这些例子之前,确保更新到了Papervision3D 2.0 alpha Great White branch的最新版本。

原文地址:http://www.insideria.com/2008/05/textures-wireframe-bitmap-movi-1.html

Materials
关于Papervision3D的材质你需要知道些什么呢?以一个球体为例,你怎样确定这个球体是地球呢,还是眼睛或篮球?你只能通过贴在球体上面的材质来判断。
这篇文章介绍了Papervision3D材质的基本内容并且教会你怎样把材质加到一个平面上。让我们开始吧。

材质的基类
在单独介绍每种材质之前,需要着重了解每种材质都扩展了的抽象父类“MaterialObject3D” (org.papervision3d.core.proto.MaterialObject3D)。也就是说,无论哪种材质,你都可以找到以下共同的属性。

所有的材质都很常用的
1. name(String):材质的名称。
2. interactive(Boolean)允许指定监听器。
3. oneSide或doubleSided(Boolean):在网格(即3D物体)的正面和反面贴上材质。例如,一个转动的平面在它的两面都显示相同的材质。
4. smooth(Boolean):在材质上应用平滑算法。把材质或者高分辨率的材质的平滑打开,会增强它的表现效果。

较少用到,但很有用的
5. bitmap(BitmapData):允许你访问材质的bitmap data。
6. tiled(Boolean):决定纹理是否平铺在整个材质上。对于原始对象,需要调整maxU 和maxV才能生效。关于UV映射的更多信息请访问:http://en.wikipedia.org/wiki/UV_mapping/
7. maxU (Number):“U”最大值。
8. maxV (Number):“V”的最大值。
9. scene (Scene3D):持有物体所属舞台的引用。

特别情况下使用的
10. invisible(Boolean):表明物体表明是否被绘制。
11. opposite(Boolean):indicates whether the face is flipped. Only use this if the material is double sided.
12. widthOffset (Number): holds the original width of the bitmap before auto mip-mapping resizes
13. heightOffset (Number): holds the original height of the bitmap before auto mip-mapping resizes

Wireframe Material(或者包含了Wireframe Material的组合材质)
14. lineColor (Number):表面线条的RGB值(如0xabc123)。
15. lineAlpha (Number):0到1之间的数值,代表了线条的透明度。
16. lineThickness (Number):线条厚度。

仅适用于Color Material(或者包含了Color Material的组合材质)
1. fillColor (Number):填充网格的RGB值(如0xabc123)。
2. fillAlpha (Number):0到1之间的数值,填充的透明度。

1. Wireframe

WireframeMaterial( color:Number=0xFF00FF, alpha:Number=100, thickness:Number = 0 )

2.Color

ColorMaterial( color:Number=0xFF00FF, alpha:Number = 1, interactive:Boolean = false )

3.Bitmap
如果想要将图像应用到3D物体上,你需要用到下面的方法来得到.gif、.jpeg或者.png文件的bitmap数据。

在这个例子里用到上面这幅logo。Bitmap Material, Bitmap Asset Material, 和 Bitmap File Material是三种不同的方式,得到相同下面相同的效果。

a.Bitmap

Bitmap Material允许将任何BitmapData贴到材质上。最典型的用法是绑定一个位图,从而获取它的bitmapData再应用到材质上。你可以从这 里获得关于在Flex中绑定位图的更多信息:http://livedocs.adobe.com/flex/3/html /help.html?content=embed_3.html
BitmapMaterial( asset:BitmapData=null, precise:Boolean = false)

b.Asset(仅在Flash CS3使用)

使用Bitmap Asset Materials将Flash库里的一幅位图贴到物体上。仅需要增加任何位图到library里,右键单击->属性

c. Color

Bitmap Color Material的用法跟Color Material差不多,但它允许你访问bitmapData,按照自己的意愿绘制或改变颜色的像素。

d.File

Bitmap File Material仅需要一个字符串,指出图片的位置。你可以为材质增加监听器,来监听图片下载进度或什么时候完成下载。
BitmapFileMaterial( url :String=”" )

e.Viewport

Bitmap Viewport Material获取一幅视口位图的快照,并允许你把它应用到其它的3D物体上。类似于篮球比赛,通过大屏幕而不是直接观看。
BitmapViewportMaterial(bitmapViewport:BitmapViewport3D,precise:Boolean=false); BitmapViewport3D(viewportWidth:Number=640,viewportHeight:Number=480, autoScaleToStage:Boolean = false, bitmapTransparent:Boolean=false, bgColor:int=0×000000, interactive:Boolean=false, autoCulling:Boolean=true);

f.Wireframe

Bitmap Wireframe Material类似于Wireframe Material,但允许访问材质的bitmapData。
BitmapWireframeMaterial(color:Number=0xFF00FF, alpha:Number=1,thickness:Number=3)

4.MovieClip
Papervision3D允许你直接使用Flash库里的MovieClip,通过链接标识符(linkage identifier)贴到3D物体上。对于Flex,就需要绑定公开的.swf和MovieClip。
a.Asset (仅用于Flash CS3)
MovieAssetMaterial( linkageID:String=”", transparent:Boolean=false, animated:Boolean=false, createUnique:Boolean=false, precise:Boolean = false)
b.MovieMaterial
MovieMaterial( movieAsset:DisplayObject=null, transparent:Boolean=false, animated:Boolean=false, precise:Boolean = false )

5. Video Stream

嗯,你可以在3D物体上显示视频了。真酷!

VideoStreamMaterial ( video:Video, stream:NetStream , precise:Boolean = false )

6.Shade
阴影材质是基于光线的,一束光照射在材质上,反射与否就形成了阴影。你可能已经猜到了,你首先需要创造一束光:
light = new PointLight3D();
通过x、y和z属性,你可以把这束光移动到你想要的位置。阴影物体会朝向这束光。如果你想这束光可见,需要传递一个为“true”的参数,并把它“addChild”到舞台上。否则,它就是一束不可见的光,在同样的位置上创建3D物体,看起来光源就像是太阳或灯那样。
a.cell

http://en.wikipedia.org/wiki/Cel-shaded_animation
Cell Material用到了两种颜色,你可以设置步数来混合它们。

CellMaterial(light:LightObject3D, color_1:int, color_2:int, steps:int)

b.Environment Map

http://en.wikipedia.org/wiki/Environment_map
environment map接受投影过的位图。下一篇文章里会提到需要“shaders”的environment map的更多高级用法。

EnvMapMaterial(light:LightObject3D, lightMap:BitmapData, backEnvMap:BitmapData=null, ambientColor:int = 0)

c. Flat Shade

http://en.wikipedia.org/wiki/Flat_shading

平面阴影使多边形的每一面都有固体阴影。这个效果用在球体上会比在平面或立方体上更好。你会看见光线环绕着这个球体。

FlatShadeMaterial(light:LightObject3D, diffuse:uint=0xffffff, ambient:uint=0×000000)

d.Gouraud

http://en.wikipedia.org/wiki/Gouraud_shading
Gouraud Material具有更平滑的阴影。上面的链接讨论了它的局限性。

GouraudMaterial(light3D:LightObject3D, lightColor:int = 0xFFFFFF, ambientColor:int=0×000000)

e. Phong

http://en.wikipedia.org/wiki/Phong_shading
Phong Material跟Gouraud Material类似,不过它允许高光。

PhongMaterial(light3D:LightObject3D, lightColor:int, ambientColor:int, specular:int)

7.Composite

composite material就是多种材质组合到一起变成了一种材质。在这里我们看到的是bitmap material和wireframe material混在一起的效果。

8.运行时材质交换

在运行时(run-time)交换材质将很容易办到。感谢Ralph的更新。
my3DObject.material = myMaterial;
最用使用是在翻转的时候,但Papervision3D的交互要在接下来的文章里才会介绍。

9.网络上Material的例子

http://www.zeropointnine.com/blog/a-papervision-20-alpha-example
http://www.unitzeroone.com/blog/2008/03/12/papervision3d-shaders-bumpmap-example-sourcecode-for-cs3/

标签: , ,

posted on 2008-12-01 22:54 seal 阅读(611) 评论(0)  编辑  收藏 所属分类: Flex+ActionScript

只有注册用户登录后才能发表评论。


网站导航: