纳金网

标题: away3d4.0 新手入门系列教程 第三讲 位图贴图 [打印本页]

作者: D调的华丽    时间: 2012-8-26 12:56
标题: away3d4.0 新手入门系列教程 第三讲 位图贴图
这一节我们来讲讲away3d的位图贴图部分。

在将这一部分 我们必须先来了解下和位图贴图有关的几个元素。

1:UV:做过3D的人都比较清楚。UV是我们再画贴图前必须拆解的。U和V不同于我们模型中的点。他横向为U纵向为V 用来精确指示我们的位图的填充范围。在3D模型中我们可以将模型的UV展平,并提取出来,然后再平面软件中以UV为标准画出贴图,这样我们的贴图也可以精确的再模型中填充出来。

2:法线贴图(Normals):这是是在我们做模型贴图中非常重要的一个元素。法线并非真正的线。而是一个。它是一条垂直于曲线上节点和表面切线方向上的虚拟线,使用正负值来表示和区别多边形上面和点的法向参数,并且只有法线为正值的点和面在场景中才可见(这一句 借鉴rakuten的解释)。我们通常用法线贴图在低模中表现纹理。特别是在游戏模型中。为了表现出优秀的纹理。我们在制作模型的时候经常会制作2个模型,一个高模,一个低模。在高模中烘焙出带着纹理的法线贴图,然后再低模中以法线贴图贴上去。这样我们的一个低模就可以变现出数十万级别多边形的高模的纹理。

3:BitmapTexture(位图纹理 PS:我直译的。应该也出不多)。这个是away3d中的位图容器。不管是贴图还是法线贴图都是用BitmapTexture来存放起来 以贴给模型。

4:TextureMaterial(纹理贴图)  这个就是away3d的位图贴图 我们只需将TextureMaterial赋予给Mesh然后Mesh就拥有了位图贴图

5:Method :这个通常做特效只用。如阴影,反射,等等。我们再这里仅需要先了解下即可 在以后的章节里我会着重讲解。



好了 知识要点了解到这了  我么现在开始做一个地面(Floor);



创建地面PlaneGeometry我就不详解了。入不了解请看第一节

创建位图纹理;

var bitmapTexture:BitmapTexture=new BitmapTexture(new _floorTexture().bitmapData);

创建纹理体位图

var textureMaterial:TextureMaterial=new TextureMaterial(bitmapTexture);

将纹理贴图贴到Mesh

_floor=new Mesh(plane,textureMaterial);

现在我们输出可以看到如下图





好了 我们贴图已经贴上去了 但是这个稍显平了点 别忘了 我们还有纹理贴图

textureMaterial.normalMap=new BitmapTexture(new _floorNormal().bitmapData);

现在我们输出的时候就可以看到下图



细节是不是都出来了 当然 这个前提是需要灯光的



以下是全部的代码

package

{

import away3d.containers.View3D;

import away3d.entities.Mesh;

import away3d.lights.DirectionalLight;

import away3d.materials.TextureMaterial;

import away3d.materials.lightpickers.StaticLightPicker;

import away3d.primitives.PlaneGeometry;

import away3d.textures.BitmapTexture;



import flash.display.Sprite;

import flash.events.Event;

import flash.geom.Vector3D;
[SWF(width='1024',height='768')]

public class Away3DTexture extends Sprite

{

  [Embed(source='asset/floor_diffuse.jpg')]

  private var _floorTexture:Class;

  [Embed(source='asset/floor_normal.jpg')]

  private var _floorNormal:Class;

  private var _light:StaticLightPicker;

  private var _view:View3D;

  private var _floor:Mesh;

  public function Away3DTexture()

  {

   _view=new View3D();

   addChild(_view);

   _view.camera.y=500;

   _view.camera.lookAt(new Vector3D(0,0,0));

   

   var planelaneGeometry=new PlaneGeometry(700,700);

   var bitmapTexture:BitmapTexture=new BitmapTexture(new _floorTexture().bitmapData);

   var textureMaterial:TextureMaterial=new TextureMaterial(bitmapTexture);

   textureMaterial.normalMap=new BitmapTexture(new _floorNormal().bitmapData)

   plane.scaleUV(1,1);

   

   

   _floor=new Mesh(plane,textureMaterial);

   _view.scene.addChild(_floor);

   

   var dlirectionalLight=new DirectionalLight(0,-.5);

   

   _light=new StaticLightPicker([dl]);

   

   textureMaterial.lightPicker=_light;

   

   _view.scene.addChild(dl);

   

   

   

   

   

   this.addEventListener(Event.ENTER_FRAME,etnerFrameFunction);

  }

  

  private function etnerFrameFunction(evt:Event):void

  {

   _floor.rotationY+=1;

   _view.render();

  }

}

}

好了 今天的教程到此结束了 。源码和素材我会放到附件里提供给大家。如有疑问欢迎跟帖。

从这一期里,我不在和前几期一样用flash CS6来做。从这一期开始我会使用FlashBuild4.6
作者: wsk    时间: 2012-9-7 11:44
很新的教程!!!
作者: 如同    时间: 2012-9-7 17:33

作者: zsg    时间: 2012-9-18 21:47
非常好的入门教程,值得我们学习
作者: 蓝调昊    时间: 2012-9-19 15:19
非常非常不错!!!
作者: danceink    时间: 2012-9-21 16:06
很不错的教程~~
作者: 神魔黑    时间: 2012-9-27 10:36

作者: 測試用    时间: 2012-10-3 14:57
很棒的帖子,謝謝樓主分享
作者: 小铁匠    时间: 2012-10-9 12:24

作者: zzlasp    时间: 2012-10-22 18:48
最新的away3d用法,感谢分享。

作者: Roltec    时间: 2012-10-23 14:41
有没哟源码啊!!!有没有啊
作者: Roltec    时间: 2012-10-23 15:05
我想请问下楼主,那个jpg有什么要求吗?我为什么用别的图片代替就不行呢?
作者: huixiusnow    时间: 2012-10-25 12:36
原帖由  Roltec  于 2012-10-23 15:05 发表:

                                                                                        我想请问下楼主,那个jpg有什么要求吗?我为什么用别的图片代替就不行呢?
                                                                               
-----------------------------------------------------
图片大小是2的幂次方就好,例如:256*256,128*128
作者: 凡客    时间: 2012-10-31 19:27
我要附件 师傅
作者: acso    时间: 2012-10-31 21:08
我是在FLASH里面搞的
作者: zhust    时间: 2012-11-8 16:35
非常不错,感谢非常不错,感谢

作者: 81537261    时间: 2012-12-4 17:30
8887666666666666666666666666666666666666666666
作者: jonas    时间: 2012-12-5 15:44
来学习学习学习的
作者: 愤怒的小牛    时间: 2013-1-8 16:37
y5ytrytrytrytrytryrtyr

作者: 王飞    时间: 2013-1-8 20:37
楼主v587的1Bfffffff

作者: iha2000    时间: 2013-1-9 18:18
顶,好教程!!!!!!!!!!!!

作者: king    时间: 2013-1-10 11:57
很好很好~~~~~~~~~~

作者: 北海盗22    时间: 2013-1-15 15:34
好牛哦~~888888888888888888
作者: yu    时间: 2013-1-16 16:35
很棒的帖子,謝謝樓主分享

作者: 水墨    时间: 2013-1-19 20:37
郁闷了,这个网站的用户体验不好

作者: 开拓者    时间: 2013-1-26 14:36
围观的路人甲 觉得这文字很基础很适合初学者

作者: 开拓者    时间: 2013-1-27 08:10
   textureMaterial.normalMap=new BitmapTexture(new _floorNormal().bitmapData)
floorapNOrmal()是什么意思啊。   加载进来的图片 使用 这个方法使用吗


作者: xxds    时间: 2013-1-28 15:03
学习学习.谢谢啦.....................
作者: 愤怒的水果刀    时间: 2013-2-19 17:42
多谢楼主了,楼主好淫了。

作者: 乌鸦狼    时间: 2013-2-21 14:18
学习了,希望不断更新

作者: haoyi    时间: 2013-2-27 16:25
真的挺好的 和楼主学习一下 很好的初级教程

作者: long    时间: 2013-3-1 19:28
dddddddddddddddddddddd

作者: 来学习    时间: 2013-3-1 19:36
顶!顶!顶!顶!顶!顶!顶!顶!顶!顶!顶!顶!顶!顶!顶!顶!顶!顶!顶!顶!顶!顶!顶!顶!顶!
作者: bubi    时间: 2013-3-13 10:13
简单易懂,很好的教程!

作者: 吾世为C    时间: 2013-4-25 14:47
这个教程很不错。
作者: 西方朔    时间: 2013-10-8 19:42
有贴图资源吗,我专门来找它的
作者: sonic    时间: 2013-10-11 02:19

很棒的帖子,謝謝樓主分享
作者: raycg    时间: 2013-10-28 00:04
老好了,要顶
作者: roadProgram    时间: 2014-1-14 23:21
多看点原理才是王道吧 api只是引擎的一种设计方式 怎么调用原理是不会变的,不过还是支持下楼主
作者: 火百合    时间: 2014-6-12 17:31
好吧,搞了半天终于可以发表回复了,,,,文章真好,顶!
作者: nikai6868    时间: 2014-10-16 10:30
这么好的帖子,要是不回帖,就太没天理了
作者: vvhh2002    时间: 2015-1-27 19:07
提示: 作者被禁止或删除 内容自动屏蔽




欢迎光临 纳金网 (http://go.narkii.com/club/) Powered by Discuz! X2.5