纳金网

标题: away3d4.0 新手入门系列教程 第四讲 创建天地 [打印本页]

作者: D调的华丽    时间: 2012-8-29 23:06
标题: away3d4.0 新手入门系列教程 第四讲 创建天地
今天我们来讲一下运用SkyBox和 Elevation 来创建一个3D虚拟世界



PS:从这一期开始 因为代码量的增加 我会以单独类来发代码。方便管理也方便阅读。



1创建天(SkyBox)



我们一般创建天空用球(Sphere)或者天空盒子(SkyBox)。 SkyBox是最为广泛的用来模拟天空,它不受摄像机渲染范围的影响,且能保持同步,所以在3D的虚拟世界里,天空永远都在远端。

既然是盒子 所以我们用一个BitmapCubeTexture 来做贴图容器。

BitmapCubeTexture 是个盒子贴图,里面可以放置6张无缝位图贴图,类似于盒子的6个面。贴图方式如下图





以下就是Sky类创建的全部代码

package skyBox

{

import away3d.containers.ObjectContainer3D;

import away3d.primitives.SkyBox;

import away3d.textures.BitmapCubeTexture;

import away3d.textures.CubeTextureBase;



public class Sky extends ObjectContainer3D

{  

  private var _skyBox:SkyBox;

  

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

  private var m_1:Class;

  

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

  private var m_2:Class;

  

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

  private var m_3:Class;

  

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

  private var m_4:Class;

  

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

  private var m_5:Class;

  

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

  private var m_6:Class;
  

  public function Sky()

  {

   _cubeMapMaterial=new BitmapCubeTexture(new m_4().bitmapData,new m_1().bitmapData,new m_5().bitmapData,new m_2().bitmapData,new m_6().bitmapData,new m_3().bitmapData);

   

   _skyBox=new SkyBox(_cubeMapMaterial);

   

   this.addChild(_skyBox);

  }

}

}





现在我们来创建地面



用过Unity3d的人应该比较清楚。Unity3D的地形是用笔刷刷出来的。其实笔刷并非是真正把地形刷起来了。而是去绘制了颜色。Unity3d通过颜色来改变了地形。在Away3d里同样可以。



我们可以用Elevation来创建一个复杂的地形。



创建地形图我们需要一张地形图。地形图的样式如下图





一张黑白渐变的图 。如同在外太空看地球一样。颜色越深的地方海拔越低。相反越浅的地方海拔越高。我们之需要给他最高的值 他便会按照这个值 用颜色来生成出个复杂的地形。

我们现在来创建一个25000*25000 最高的高度为1000的地形

_terrain = new Elevation(terrainMaterial, new HeightMap().bitmapData, 25000, 1000, 25000);



terrainMaterial为一个地形的TextureMaterial的位图贴图, new HeightMap().bitmapData 遍为这张高度图。



我们的Terrian类为

package terrain

{

import away3d.containers.ObjectContainer3D;

import away3d.ex***sions.Elevation;

import away3d.materials.TextureMaterial;

import away3d.materials.methods.FogMethod;

import away3d.materials.methods.TerrainDiffuseMethod;

import away3d.textures.BitmapTexture;



public class Terrain extends ObjectContainer3D

{

  [Embed(source="asset/terrain/terrain_diffuse.jpg")]

  private var Albedo:Class;

  

  [Embed(source="asset/terrain/terrain_heights.jpg")]

  private var HeightMap:Class;

  

  [Embed(source="asset/terrain/terrain_normals.jpg")]

  private var Normals:Class;

  

  [Embed(source="asset/terrain/grass.jpg")]

  private var Grass:Class;

  [Embed(source="asset/terrain/rock.jpg")]

  private var Rock:Class;

  [Embed(source="asset/terrain/beach.jpg")]

  private var Beach:Class;

  

  [Embed(source="asset/terrain/terrain_splats.png")]

  private var Blend:Class;

  

  private var _terrain:Elevation;

  

  private var fogMethod:FogMethod;  

  

  private var terrainMaterial:TextureMaterial;

  

  public function Terrain()

  {

   

   fogMethod=new FogMethod(5000,10000,0x5f5e6e);

   

   terrainMaterial = new TextureMaterial(new BitmapTexture(new Albedo().bitmapData));

   terrainMaterial.normalMap = new BitmapTexture(new Normals().bitmapData);

   terrainMaterial.ambientColor = 0xff00ff;

   terrainMaterial.ambient = 1;

   terrainMaterial.specular = .2;

   

   

   _terrain = new Elevation(terrainMaterial, new HeightMap().bitmapData, 25000, 1000, 25000);

   

   addChild(_terrain);

  }

  

  public function get getTerrain():Elevation

  {

   return _terrain;

  }

}

}



好了 天地创建完了 我们打开输出之后可以看到我们所创建的天和地了





好了 我们一个简单的天地就创建出来了,看起来不错吧。我们可以放置一个FirstPersonController 的第一视角的摄像机来和第一人称射击游戏那样去观看这个3D世界。



这里为了模拟人物在高地不同的地面上行走。我们一方面会采取类似awyphyscis 或者jiglib这样的3D物理引擎。但是 我们用Elevation里我们可以通过getHeightAt(x,z)来获取地形的高度。 让我们的摄像机和地形高度同步。这样便可以完美的模拟出以第一视角在高低不平的路上行走。





期到此结束。我会上传源文件供大家学习。




作者: wsk    时间: 2012-9-7 11:53
顶顶!!!!!!!!!!!!
作者: 如同    时间: 2012-9-7 17:30
只有5节课吗?继续等待中。。。。。。。

作者: D调的华丽    时间: 2012-9-7 19:19
原帖由  如同  于 2012-09-07 17:30 发表:
只有5节课吗?继续等待中。。。。。。。

-----------------------------------------------------
下一节会讲下模型导入 就是新手教程的最后一节 往后可能会多用实例来讲解 谢谢支持
作者: zsg    时间: 2012-9-18 22:52
很好的教程,让俺入门了。感谢。
作者: 蓝调昊    时间: 2012-9-19 13:23
这个入门教程很好,顶起
作者: danceink    时间: 2012-9-21 16:53
很喜欢这个教程~
作者: 神魔黑    时间: 2012-9-27 11:31

作者: 測試用    时间: 2012-10-3 15:11
太谢谢楼主了,顶顶顶顶~~~
作者: 冰鏡    时间: 2012-10-4 11:38
非常感激!!~~~~~~~~~~~~~~~~~~~~~~~~~~~

作者: nonever200    时间: 2012-10-7 17:31
学习学习
作者: sutang_888    时间: 2012-10-9 10:10
学习。。。
作者: owen211    时间: 2012-10-17 15:45
非常不错哦
作者: wahaha    时间: 2012-10-19 15:14
写的很好哦  继续努力!
作者: seedcll    时间: 2012-10-19 15:37
写的很好 看下具体的11
作者: zzlasp    时间: 2012-10-22 19:00
完整详尽的实例,收集了。

作者: 白菜无敌    时间: 2012-10-23 14:26
非常感谢老师的辛勤劳动
作者: Roltec    时间: 2012-10-24 12:37
阿斯达斯好好看看一下一下
阿斯达斯
作者: huixiusnow    时间: 2012-10-29 09:09
顶 ,太有用了
作者: alps    时间: 2012-10-31 14:20
源文件呢,没看到啊。。。
作者: acso    时间: 2012-10-31 20:39
源文件在哪里呢?请发下 286031567@qq.com谢谢
作者: zhust    时间: 2012-11-8 16:36
完整详尽的实例,收集了。

作者: 81537261    时间: 2012-12-5 10:13
我就顶~~~~~~~~~~~~~~~~~~~~~QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ
作者: jonas    时间: 2012-12-5 16:44
谢谢谢谢谢谢谢谢谢谢谢谢
作者: 芮雪阁    时间: 2012-12-19 16:17
顶顶顶..................

作者: 愤怒的小牛    时间: 2013-1-8 16:05
必须填满10个字符的飘过
作者: 王飞    时间: 2013-1-9 09:48
原帖由  owen211  于 2012-10-17 15:45 发表:

                                                                                        非常不错哦
                                                                               
-----------------------------------------------------
楼主很威武啊。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

作者: xwq1849    时间: 2013-1-10 10:53
看看先生!!!!!!!!!

作者: iha2000    时间: 2013-1-10 14:36
写的很好,受教了!!!!!!!!!!!

作者: 北海盗22    时间: 2013-1-15 15:54
楼主好人那~~~~~~感动~~~~
作者: yu    时间: 2013-1-16 16:41
非常不错,楼主加油!

作者: 水墨    时间: 2013-1-21 16:31
受教了,受教了,谢谢

作者: sweet    时间: 2013-1-28 11:25
谢谢楼主楼主好认啊
作者: xxds    时间: 2013-1-28 16:01
谢谢啦.实在太有用了111111
作者: xsshsy    时间: 2013-1-29 11:26
教程不错额,蛮好的,我下载下来看看

作者: 愤怒的水果刀    时间: 2013-2-25 11:25
多谢楼猪,楼猪好淫啊。

作者: haoyi    时间: 2013-2-27 16:41
哇 真的挺好的 教程很详细 很明了

作者: awakerr    时间: 2013-2-28 15:31
看不懂 页支持看不懂 页支持看不懂 页支持
作者: long    时间: 2013-3-2 11:17
学习中。。。。。。。。。。。。。。。。。。。
作者: 来学习    时间: 2013-3-5 20:25
这个必须顶~~~这个必须顶~~~这个必须顶~~~这个必须顶~~~这个必须顶~~~这个必须顶~~~

作者: bubi    时间: 2013-3-12 19:12
来拿素材了!oh yeah..

作者: 开拓者    时间: 2013-3-12 21:56
期待后面的教程  哈哈

作者: luoxi1111    时间: 2013-5-6 14:33
求素材,求素材,
作者: qq545213635    时间: 2013-6-29 11:36
牛逼啊!!!!!!!!!赞
作者: 路、人bobo    时间: 2013-8-23 15:15
加油 支持、、、
作者: 西方朔    时间: 2013-10-8 20:31
必须顶。。。
作者: sonic    时间: 2013-10-11 02:23
好的教程,让俺入门了。感谢。
作者: sonic    时间: 2013-10-11 02:24
thx very much
作者: raycg    时间: 2013-10-28 04:35
很好的教程




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