注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

穷到掉渣的超级奶爸阿赵

阿赵的博客

 
 
 

日志

 
 

Flare3D学习笔记(二)  

2013-07-17 13:42:09|  分类: Flash3D技术 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

三、模型贴图控制:

1、 setPosition( 0, 10, -20 ); lookAt( 0, 0, 0 );设置摄像机的位置和 注视方向。

2、cloned.parent = scene;作用和scene.addChild();是一样的

3、动态生成mesh

Flare3D可以很方便的动态生成模型,需要的数据和stage3D底层的推送点信息给缓存 器一样,具体如下:

mesh = new Mesh3D();

mesh.surfaces[0] = new Surface3D();

//设置点缓存器的数据构成,前三位是位置坐标,中间三位是法线坐标,最后两位是UV 坐标。

mesh.surfaces[0].addVertexData( Surface3D.POSITION, 3 );

mesh.surfaces[0].addVertexData( Surface3D.NORMAL, 3 );

mesh.surfaces[0].addVertexData( Surface3D.UV0, 2 );

//点信息

// position,    normal,   uv0 

mesh.surfaces[0].vertexVector.push( -10, 0, 10,  0, 1, 0,  0, 0,

10, 0, 10,  0, 1, 0,  1, 0,

-10, 0, -10,  0, 1, 0,  0, 1,

10, 0, -10,  0, 1, 0,  1, 1 );

//索引信息

mesh.surfaces[0].indexVector.push( 0, 1, 2, 

1, 3, 2 );

//设置材质

var shader:Shader3D = new Shader3D( "material", [new TextureMapFilter()] );

shader.twoSided = true;

mesh.surfaces[0].material = shader;

4、多通道贴图的使用:

var shader:Shader3D = new Shader3D();

//漫反射通道

shader.filters.push( new TextureMapFilter( new Texture3D( "tex6.jpg" ) ) );

//法线通道

shader.filters.push( new NormalMapFilter( new Texture3D( "images.jpg" ) ) );

//环境反射通道

shader.filters.push( new EnvironmentMapFilter( new Texture3D( "reflections.jpg" ),  BlendMode.MULTIPLY, 1.5 ) );

shader.build();

//贴图平铺次数

shader.filters[1].repeatX = 4;

shader.filters[1].repeatY = 4;

5、Pivot3D获取Mesh3D的方法:

var mesh:Mesh3D = model.getChildByName("Line01") as Mesh3D;

6、添加贴图到场景的方法:

specular = scene.addTextureFromFile( "terrain.png" );

7、关于天空盒,有三种方式:

1.使用整张的贴图做天空盒,比如:

Flare3D学习笔记(二) - 阿赵 - 有爪的小羔羊阿赵
 

var sky:SkyBox = new SkyBox( "skybox1.png", SkyBox.HORIZONTAL_CROSS, scene );

2. 把贴图放在指定的文件夹里面,然后直接指定文件夹的名称:

Flare3D学习笔记(二) - 阿赵 - 有爪的小羔羊阿赵
 

var sky:SkyBox = new SkyBox( "skybox_folder", SkyBox.FOLDER_JPG, scene );

这个方法必须要注意每张图片的命名,不然找不到贴图的。

3.一般的内嵌式bitmap创建:

[Embed(source = "../bin/skybox_folder/front.jpg")]  private var Front:Class;

[Embed(source = "../bin/skybox_folder/back.jpg")]  private var Back:Class;

[Embed(source = "../bin/skybox_folder/left.jpg")]  private var Left:Class;

[Embed(source = "../bin/skybox_folder/right.jpg")]  private var Right:Class;

[Embed(source = "../bin/skybox_folder/top.jpg")]  private var Top:Class;

[Embed(source = "../bin/skybox_folder/bottom.jpg")] private var Bottom:Class;

var sky:SkyBox = new SkyBox( [new Front, new Back, new Right, new Left, new Top, new Bottom], SkyBox.BITMAP_DATA_ARRAY, scene );

8、在模型上绘制

只需要做以下几个步骤:

1、获得模型身上的材质

var material:Shader3D = mesh.getMaterialByName( "mElsa" ) as Shader3D;

2、获得材质上的模型,然后修改mipMode

texture = material.filters[0].texture;

texture.mipMode = Texture3D.MIP_NONE;

texture.upload( scene );

3、由于修改了mipMode,所以要upload一下,具体作用不明:

material.download();

4、最后,在你想要的地方,获取这个纹理的bitmapData,然后绘制:

var bitmapData:BitmapData = texture.bitmapData;

bitmapData.draw( …… );

9、改变贴图:

先把材质提取出来:

shader = scene.getMaterialByName( "mElsa" ) as Shader3D;

然后替换贴图:

shader.filters[0].texture = new Texture3D( "metal.jpg" );

10、关于数量庞大的物体的生成。从CubesMesh的例子看来,如果直接添加数万个物体,flare3D也是不能承受的,但如果改成每一个物体生成一个Surface3D,然后surfaces.push( surf );这样就变成了一个整体物体,由于单个物体的面数可以数万,所以也就可以承载数万个物体了。

  评论这张
 
阅读(2140)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016