查看: 3806|回复: 1
打印 上一主题 下一主题

【Away3D初级教程】使用天空盒

[复制链接]

3795

主题

2

听众

5万

积分

版主

Rank: 7Rank: 7Rank: 7

纳金币
53202
精华
32

活跃会员 优秀版主 推广达人 突出贡献 荣誉管理 论坛元老

跳转到指定楼层
楼主
发表于 2013-1-6 11:41:56 |只看该作者 |倒序浏览
    本教程向您介绍了在Away3D 4.x中的环境映射到一个对象表面的镜面反射效果,并简要介绍了天空盒类。不断旋转的圆环对象,从它周围的动态反映,就可以出锅了摄像头,周围的圆环,将鼠标移动到中心点,进一步增加从您的鼠标的中心向左或向右水平移动速度。


清单1。基本Skybox的例子源代码(下载附件)。




设置场景
与前面的教程中,您需要创建您的View3D和设置摄像头的属性。


为了提高整体看时,使用Skybox的,你可以增加相机的可视角度90辈分,加入以下行。缺省情况下,与60度的视角的相机被初始化。

_view.camera.lens = new PerspectiveLens(90);



在类的构造函数,你需要的的Event.ENTER_FRAME Event.RESIZE事件侦听器包括渲染3D场景中的每一帧和响应当窗口重新调整大小。



创建你周围的世界
一个天空盒是用来提供一个3D的背景图像远处的物体,如景观,视野,天空和云,星域或其他unreachbale的对象。这些远处的物体表示为多维数据集并和图像被映射到与摄像机视点在天空盒多维数据集的中心是该多维数据集的内表面。
Skybox的多维数据集仍然是固定的,即使相机和观点可能会改变,所以会一直保持为背景的距离。

Skybox的布局原则

要添加Skybox的,需要6个单独的位图纹理的顶部,底部,前部,背部,左,右两侧的立方体。这些位图建立成BitmapCubeTexture。

左图像的纹理

对图像进行纹理

底部的图像纹理

顶部图像纹理

远的图像纹理

近的图像纹理




//setup the cube texture
var cubeTexture:BitmapCubeTexture = new BitmapCubeTexture(Cast.bitmapData(EnvPosX), Cast.bitmapData(EnvNegX), Cast.bitmapData(EnvPosY), Cast.bitmapData(EnvNegY), Cast.bitmapData(EnvPosZ), Cast.bitmapData(EnvNegZ));


然后,它只是一个问题,通过立方织构的



_skyBox = new SkyBox(cubeTexture);
_view.scene.addChild(_skyBox);


反映世界
现在,您可以添加到你的场景的圆环,所以你可以看到如何简单,它可以反映你周围的世界,纹理映射的基础上已应用到您的Skybox的。
所用的材料是一个的基本ColorMaterial,允许您指定通常的照明性能,如果需要。为了使ColorMaterial考虑对环境映射,有必要增加一个额外的纹理化方法,EnvMapMethod。这需要在Skybox的立方织构材料,并把它应用到你的材料作为环境贴图。第二个参数在EnvMapMethod是要应用于映射的alpha值。


//setup the environment map material
var material:ColorMaterial = new ColorMaterial();
material.addMethod(new EnvMapMethod(cubeTexture, 1));




最后的圆环可以构造和添加到场景。


//setup the scene
_t***s = new Mesh(new T***sGeometry(150, 60, 40, 20), material);
_view.scene.addChild(_t***s);




环境映射的一个限制是,它不考虑任何其他场景中的物体时产生的反射,因为它完全依赖于所提供的立方织构。

结论
本教程向您介绍了使用Skybox的能力,Away3D的4.x中增加一个级别的深度/背景,场景。而不是试图建造大量的几何,天空盒的现实主义,同时又给人的印象是非常简单和高性能的优势。
此外,你有一个非常快速的引进与环境地图创建一个对象,反映的观点,天空盒的整个物体的表面。
计算其他场景中的物体反射动态的一个显着困难和更多的处理器密集型任务。天空盒的构造函数,将对象添加到场景,如下。
//setup the render loop
addEventListener(Event.ENTER_FRAME, _onEnterFrame);
stage.addEventListener(Event.RESIZE, onResize);
onResize();





stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;

//setup the view
_view = new View3D();
addChild(_view);

//setup the camera
_view.camera.z = -600;
_view.camera.y = 0;
_view.camera.lookAt(new Vector3D());



分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

3795

主题

2

听众

5万

积分

版主

Rank: 7Rank: 7Rank: 7

纳金币
53202
精华
32

活跃会员 优秀版主 推广达人 突出贡献 荣誉管理 论坛元老

沙发
发表于 2013-1-6 16:26:55 |只看该作者
【Away3D初级教程】总目录
【Away3D初级教程】灯光与材质  【Away3D初级教程】粒子系统  【Away3D初级教程】场景设置   
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2025-1-27 21:59 , Processed in 0.083211 second(s), 32 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部