【Away3D】初步认识


  1 package zen.funny
2 {
3 import com.greensock.TweenLite;
4
5 import flash.display.Sprite;
6 import flash.display.StageAlign;
7 import flash.display.StageScaleMode;
8 import flash.events.Event;
9 import flash.events.MouseEvent;
10
11 import away3d.containers.View3D;
12 import away3d.controllers.HoverController;
13 import away3d.entities.Mesh;
14 import away3d.materials.TextureMaterial;
15 import away3d.primitives.CubeGeometry;
16 import away3d.textures.BitmapTexture;
17
18 [SWF(backgroundColor="#000000", frameRate="60", quality="LOW")]
19 public class CubeTest extends Sprite
20 {
21 [Embed(source="../../assets/images/floor_normal.jpg")]
22 private var grassClass:Class;
23
24 private var _view3D:View3D;
25 private var cameraController:HoverController;//360全景展示相机控制器
26 private var box:Mesh;
27
28 private var lastPanAngle:Number;
29 private var lastTiltAngle:Number;
30 private var lastMouseX:Number;
31 private var lastMouseY:Number;
32 private var move:Boolean;
33
34 public function CubeTest()
35 {
36 super();
37 addEventListener(Event.ADDED_TO_STAGE, init);
38 }
39
40 private function init(e:Event):void
41 {
42 stage.scaleMode = StageScaleMode.NO_SCALE;
43 stage.align = StageAlign.TOP_LEFT;
44
45 //渲染3D视窗
46 _view3D = new View3D();
47 _view3D.antiAlias = 4; //抗锯齿平滑系数,2的幂,设置越高锯齿越不明显
48 this.addChild(_view3D);
49
50 //将位图数据转换成贴图材质
51 var bmpTexture:BitmapTexture = new BitmapTexture(new grassClass().bitmapData); //位图纹理,记录贴图信息
52 var material:TextureMaterial = new TextureMaterial(bmpTexture); //位图材质,将材质贴到模型上的皮肤
53
54 var cubeSize:uint = 500;
55 var cube:CubeGeometry = new CubeGeometry(cubeSize, cubeSize, cubeSize); //Geometry相当于骨架
56
57 //Geometry几何体
58 box = new Mesh(cube,material); //Mesh相当于是附着在Geometry上的皮肤,没有Mesh的Geometry是不能被显示的
59 _view3D.scene.addChild(box);
60 initCamera();
61
62 // 添加侦听器来渲染3D世界
63 addEventListener(Event.ENTER_FRAME, enterFrameHandler);
64 stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
65 stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
66 stage.addEventListener(MouseEvent.MOUSE_WHEEL,onWheel);
67 }
68
69
70 private function initCamera():void
71 {
72 //创建摄像机功能
73 cameraController = new HoverController(_view3D.camera);
74 cameraController.distance = 1000; //摄像机和目标点距离
75 cameraController.minTiltAngle = 0; //摄像机以Y轴旋转最小角度
76 cameraController.maxTiltAngle = 90; //摄像机以Y轴旋转最大角度
77 cameraController.panAngle = 45; //摄像机以Y轴旋转角度
78 cameraController.tiltAngle = 20; //摄像机以X轴旋转角度
79 }
80
81 private function onWheel(e:MouseEvent):void
82 {
83 if(e.delta > 0)
84 {
85 if(cameraController.distance < 1000)
86 TweenLite.to(cameraController,.5,{distance:cameraController.distance + 100});
87 }
88 else
89 {
90 if(cameraController.distance > 600)
91 TweenLite.to(cameraController,.5,
92 {distance:cameraController.distance - 100});
93 }
94 }
95
96 private function onMouseDown(event:MouseEvent):void
97 {
98 lastPanAngle = cameraController.panAngle;
99 lastTiltAngle = cameraController.tiltAngle;
100 lastMouseX = stage.mouseX;
101 lastMouseY = stage.mouseY;
102 move = true;
103 }
104
105 private function onMouseUp(event:MouseEvent):void
106 {
107 move = false;
108 }
109
110 private function enterFrameHandler(event:Event):void
111 {
112 // 渲染3D世界
113 if (move)
114 {
115 cameraController.panAngle = 0.3 * (stage.mouseX - lastMouseX) + lastPanAngle;
116 cameraController.tiltAngle = 0.3 * (stage.mouseY - lastMouseY) + lastTiltAngle;
117 }
118 _view3D.render();
119 }
120 }
121 }

渲染时的执行优先级依次为:


normalMethod

>ambientMethod

>shadowMethod

>diffuseMethod

>specularMethod

>colorTransform

>其它通过addMethod()方法添加的Method

一些常用的Method

EnvMapMethod  环境贴图方法

想要物体表面能反射周围环境(如不锈钢,有机玻璃材质)?用这个就对啦..


 1 //创建一个skybox,6块贴图大家自己找,官方demo里有
2 var cubeTexture:BitmapCubeTexture = new BitmapCubeTexture("6块贴图")
3 scene.addChild(new SkyBox(cubeTexture));
4 //创建一个宽高长均为500的方块
5 var cubeGeometry:CubeGeometry = new CubeGeometry(500, 500, 500);
6 var cubeMaterial:ColorMaterial = new ColorMaterial();
7 cubeMaterial.specular = 0.8;
8 cubeMaterial.alpha = 0.5;
9 //因为要反射skybox的环境,所以共用skybox的贴图材质
10 //如果你想反射别的东西,也可以使用别的材质
11 cubeMaterial.addMethod(new EnvMapMethod(cubeTexture));
12 var cubeMesh:Mesh = new Mesh(cubeGeometry, cubeMaterial);
13 scene.addChild(cubeMesh);

FresnelSpecularMethod  菲涅尔镜面贴图方法

我不想把这东西解释的太复杂,下面有一段摘录自百度百科的内容,相信大家一看就能明白....
(我们站在湖边的时候,低头看脚下的水,水是透明的,反射不是特别强烈;远处的湖面,你会发现水并不是透明的,并且反射非常强烈。这就是“菲涅尔效应”....摘自百度百科)
说白了就是把光线反射变得更柔和,可以使用在湖面材质上,也可以配合SSS散射方式使用在皮肤材质上

FresnelEnvMapMethod  菲涅尔环境贴图方法

SubsurfaceScatteringDiffuseMethod  次表面满散射方式(SSS满散射方式)

这个方法用来模拟光在半透明物体内的折射效果(如人的皮肤,葡萄,蜡烛等)

1 var subsurfaceMethod:SubsurfaceScatteringDiffuseMethod = new SubsurfaceScatteringDiffuseMethod(2048, 2);
2 subsurfaceMethod.scatterColor = 0xff7733;
3 subsurfaceMethod.scattering = .05;
4 subsurfaceMethod.translucency = 4;
5 bodyMaterial.diffuseMethod = subsurfaceMethod;

WrapDiffuseMethod
包裹散射方式,接近于SSS满散射方式,但更粗糙一些

ColorTransformMethod
颜色转换方法,效果与直接设置material.colorTransform一样,在执行顺序上会晚于material.colorTransform的设置
一般情况下不推荐使用,请直接使用material.colorTransform,除非你需要解决一些特殊的问题或Bug

1 var m:ColorTransformMethod = new ColorTransformMethod();
2 m.colorTransform = new ColorTransform(1,0,0);
3 bodyMaterial.addMethod(m);

ColorMatrixMethod
颜色矩阵转换方法,想换贴图的颜色?也可以用它....
但你得具备一些ColorMatrixFilter的知识...


1 var matrix:Array = new Array();
2 matrix = matrix.concat([1, 0, 0, 0, 0]); // red
3 matrix = matrix.concat([0, 0, 0, 0, 0]); // green
4 matrix = matrix.concat([0, 0, 0, 0, 0]); // blue
5 matrix = matrix.concat([0, 0, 0, 1, 0]); // alpha
6 var filter:ColorMatrixFilter = new ColorMatrixFilter(matrix);
7 var m:ColorMatrixMethod = new ColorMatrixMethod();
8 m.colorMatrixFilter = filter;
9 bodyMaterial.addMethod(m);

OutlineMethod
轮廓方法,如果材质图某些地方是透明的,但你又想知道整个mesh的形状,可以使用此方法(此方法不受贴图影响,有效边界为geometry边界)

RimLightMethod
轮廓发光方法(有效边界为贴图可视边界,透明部分不受此方法影响)

1 bodyMaterial.addMethod(new RimLightMethod(0xff0000));


ProjectiveTextureMethod  投射材质方法

想像一下阳光透过彩色的窗玻璃,这些玻璃上的色彩投射在墙上的效果
或者....heihei.....如果你有一个球体,想再贴一张照片在这球体上....heihei.....

1 var projector:TextureProjector = new TextureProjector(photoBitmapData);
2 projector..position = new Vector3D(0,100,0);
3 bodyMaterial.addMethod(new ProjectiveTextureMethod(projector));

SimpleWaterNormalMethod
想要一些简单的水波效果?用它,就是用它!

SoftShadowMapMethod
想看到物体的阴影被映射在墙角时的弯折效果?就是这个了

DitheredShadowMapMethod  抖动阴影方法

【Away3D】初步认识

时间: 2024-10-12 19:17:39

【Away3D】初步认识的相关文章

初步了解CPU

了解CPU By JackKing_defier 首先说明一下,本文内容主要是简单说明CPU的大致原理,所需要的前提知识我会提出,但是由于篇幅我不会再详细讲解需要的其他基础知识.默认学过工科基础课. 一.总述 先从计算机的结构说起,在现代计算机中,CPU是核心,常常被比喻为人的大脑.现在的计算机都为“冯·诺依曼机”,“冯诺依曼机”的一个显著的特点就是由运算器.存储器.控制器.输入设备和输出设备组成.CPU是运算器和控制器合起来的统称,因为运算器和控制器在逻辑关系和电路结构上联系十分紧密,尤其在大

zerglurker的C语言教程004——指针初步讲解

在上次的教程里面,我提到了指针. 针对指针,这次我将简单的讲讲,后面我还会讲到--那个时候你应该有了相当的基础. 首先,先讲讲指针类型. 任何类型关键字后面加一个*符号,就会变成指针类型. 比如: char → char* 字符指针 int → int* 整数指针 double→double* 双精度指针 甚至还可以这样: char*→char** 字符指针的指针类型 →char*** 字符指针的指针的指针类型- 指针本质上是一个内存地址值,该内存地址上存放的是相关类型的数值.但是void*指针

nodejs,webpack安装以及初步运用

nodejs安装: 1.下载:https://nodejs.org/en/download/ 2.安装node-v6.11.3-x64.msi文件,直接默认安装(next--): 3.验证是否完成安装:cmd 进入后输入命令 node -v  回车能得到nodejs版本号: 输入node 回车再输入console.log('aaaaa') 回车能正常显示输出. 这表示nodejs安装成功. webpack安装: 1.npm安装:在f盘新建文件夹webpack,在webpack文件夹建文件夹dem

Github 的注册教程和初步使用体验

我叫许晴,是网工143的学生,学号是1413042064,兴趣包括手绘,看书和手游.学习过c++和汇编语言课程,但在编程方面没什么独立实践经验. 我的Githup用户名是 XQ123 .下面是我在github的注册流程及初步使用体验. 我先搜索github,试了好几次才进去官网,但是在手机客户端注册的话比较好进.这是网页注册的界面.使用名不能设成中文,只能使用数字.字母和特殊符号,不能以短横线开头.如果设置的用户名有重复的话也不能设置 如果设置的用户名已经有人使用的话,也是不能设置的. 然后就是

Unity3D游戏开发初探—2.初步了解3D模型基础

一.什么是3D模型? 1.1 3D模型概述 简而言之,3D模型就是三维的.立体的模型,D是英文Dimensions的缩写. 3D模型也可以说是用3Ds MAX建造的立体模型,包括各种建筑.人物.植被.机械等等,比如一个大楼的3D模型图.3D模型也包括玩具和电脑模型领域. 互联网的形态一直以来都是2D模式的,但是随着3D技术的不断进步,在未来的时间里,将会有越来越多的互联网应用以3D的方式呈现给用户,包括网络视讯.电子阅读.网络游戏.虚拟社区.电子商务.远程教育等等.甚至对于旅游业,3D互联网也能

虚拟桌面技术的初步探讨

[文章标题]: 虚拟桌面技术的初步探讨  [文章作者]:  newjueqi  [作者邮箱]: [email protected][作者QQ号]: 190678908[编写语言]:VC++6.0[操作平台]: XP-SP2[作者声明]:感觉到这是一种非常有意思的技术,这篇就当成是学习笔记吧!本人只是感兴趣,没有其它目的,失误之处敬请给位大侠原谅! 本文曾发表于看学论坛http://bbs.pediy.com/showthread.PHP?t=82537                      

【Qt学习笔记】1.初步接触

一.前言 Qt是一个跨平台的C++图形面向对象的框架,今天开始学习并记录学习过程,希望通过这段时间的努力学会Qt的使用. 同时我也希望在学习的过程中对C++的各种特性有能深刻的认识. 此外,我在Qt初步的学习过程中,所用的环境应该是 VS2015 IDE 二.安装 官网下载Qt安装包和 Qt for VS addin,分别安装,并配置. 三.Hello World 接下来用Qt框架来完成第一个程序 首先打开VS,创建一个Qt工程 熟悉的C++界面,但Qt是有可视化界面的,点击解决方案管理器中的.

基于C/S架构的3D对战网络游戏C++框架 _05搭建系统开发环境与Boost智能指针、内存池初步了解

本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): 1.实现基本通信框架,包括对游戏的需求分析.设计及开发环境和通信框架的搭建: 2.实现网络底层操作,包括创建线程池.序列化网络包等: 3.实战演练,实现类似于CS反恐精英的3D对战网络游戏: 技术要点:C++面向对象思想.网络编程.Qt界面开发.Qt控件知识.Boost智能指针.STL算法.STL.

初步安装、使用PyPy

最近一周,一直在琢磨着怎么提高python的运行效率,前几天还写了一篇关于提高运行效率的博文,有兴趣的可以去看看,地址如下:http://11026142.blog.51cto.com/11016142/1858568 这些都是从Python语言本身的角度提高优化代码来提高效率,看过几本Python教材.也看过网上的一些优秀博文,都说PyPy是Python的未来,是提高python运行效率的终极杀器,今天上午闲来无事,决定也来了解一下这个杀器.首先是在网上查资料大概了解一下PyPy是什么东西,在