package
{
import away3d.containers.View3D;
import away3d.entities.Mesh;
import away3d.events.MouseEvent3D;
import away3d.lights.DirectionalLight;
import away3d.lights.PointLight;
import away3d.materials.ColorMaterial;
import away3d.materials.TextureMaterial;
import away3d.materials.lightpickers.StaticLightPicker;
import away3d.materials.methods.FilteredShadowMapMethod;
import away3d.primitives.CubeGeometry;
import away3d.primitives.PlaneGeometry;
import away3d.utils.Cast; import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event; /**
* @author Frost.Yen
* @E-mail 871979853@qq.com
* @create 2015-9-23 下午3:27:28
*
*/
[SWF(width='800',height='600',frameRate="60", backgroundColor="0x000000")]
public class Away3dLight extends Sprite
{ //floor的贴图图片
[Embed(source = "assets/1.jpg")]
private static var FloorMaterial:Class;
//声明视口
private var _view:View3D;
//声明平面几何对象
private var _planeGeometry:PlaneGeometry;
//声明平面对象的贴图
private var _planeMaterial:TextureMaterial;
//声明平面几何对象的容器
private var _planeMesh:Mesh;
//控制旋转方向的变量
private var _direction:Boolean;
//声明cube对象
private var _cubeGeometry:CubeGeometry;
//声明cube对象容器
private var _cubeMesh:Mesh; //灯光
private var _directionalLight:DirectionalLight;
private var _pointLight:PointLight;
//灯光容器
private var _light:StaticLightPicker; public function Away3dLight()
{
if (stage) {
init();
}else {
this.addEventListener(Event.ADDED_TO_STAGE, init);
} }
private function init(e:Event=null):void {
//trace("舞台初始化完成!");
//设置舞台缩放模式和对齐方式
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
this.removeEventListener(Event.ADDED_TO_STAGE, init); //实例化视口
_view = new View3D();
addChild(_view);
//设置抗锯齿参数
_view.antiAlias = 6; //实例化一个长宽都是300的平面对象
_planeGeometry = new PlaneGeometry(300, 300);
//实例化贴图对象
_planeMaterial = new TextureMaterial(Cast.bitmapTexture(FloorMaterial));
//实例化平面几何对象的容器,第一个参数是平面几何对象,第二个参数是贴图数据
_planeMesh = new Mesh(_planeGeometry, _planeMaterial);
//设置容器可交互
_planeMesh.mouseEnabled = true;
//容器侦听鼠标点击事件
_planeMesh.addEventListener(MouseEvent3D.CLICK, clickHandler); //将容器添加到视口的场景中
_view.scene.addChild(_planeMesh); _cubeGeometry = new CubeGeometry();
_cubeMesh = new Mesh(_cubeGeometry, new ColorMaterial(0xcccccc));
_cubeMesh.mouseEnabled = true;
_cubeMesh.y = 150;
_cubeMesh.z = -40;
_view.scene.addChild(_cubeMesh); //添加平行光源
_directionalLight = new DirectionalLight();
_directionalLight.diffuse = .8;
_directionalLight.ambient = .3;
_directionalLight.castsShadows = true; //添加点光源
_pointLight = new PointLight();
_pointLight.ambient = 0.4;
//_pointLight.diffuse = 10; //实例化灯光容器
_light = new StaticLightPicker([_directionalLight,_pointLight]); //给地面添加阴影效果
_planeMaterial.shadowMethod = new FilteredShadowMapMethod(_directionalLight); //给两个模型的材质添加灯光
_planeMesh.material.lightPicker = _light;
_cubeMesh.material.lightPicker = _light; //将灯光添加到场景
_view.scene.addChild(_directionalLight); //设置摄像机的位置
_view.camera.z = -400;
_view.camera.y = 200; //可以把这个值改成1试试看,这样可以有更加直观的感受
//_view.camera.x = 90;
//设置摄像机始终指向平面
_view.camera.lookAt(_planeMesh.position);
//_view.camera.lookAt(new Vector3D()); this.addEventListener(Event.ENTER_FRAME, onEnterFrame);
stage.addEventListener(Event.RESIZE, onResize);
onResize();
} private function clickHandler(e:MouseEvent3D):void {
//鼠标点击变换运动方向
_direction = !_direction;
} private function onResize(e:Event = null):void {
//调整视口尺寸以适应新的窗口大小
_view.width = stage.stageWidth;
_view.height = stage.stageHeight;
} private function onEnterFrame(e:Event):void {
//判断方向旋转
_cubeMesh.rotationX += 1;
_cubeMesh.rotationY += 1;
if (!_direction) {
_planeMesh.rotationY += 1;
}else {
_planeMesh.rotationY -= 1;
}
//渲染3D世界
_view.render();
} }
}

[ActionScript 3.0] Away3D 灯光的使用的更多相关文章

  1. [ActionScript 3.0] Away3D 官网实例

    /* Dynamic tree generation and placement in a night-time scene Demonstrates: How to create a height ...

  2. [ActionScript 3.0] Away3D 非skybox的全景例子

    package { import away3d.containers.View3D; import away3d.controllers.HoverController; import away3d. ...

  3. [ActionScript 3.0] Away3D 天空盒(skybox)例子2

    所谓skybox就是六个面即六张图能够无缝的拼成一个正方体的盒子. package { import away3d.cameras.Camera3D; import away3d.cameras.le ...

  4. [ActionScript 3.0] Away3D 天空盒(skybox)例子

    /* SkyBox example in Away3d Demonstrates: How to use a CubeTexture to create a SkyBox object. How to ...

  5. [ActionScript 3.0] Away3D 旋转效果

    package { import away3d.containers.View3D; import away3d.entities.Mesh; import away3d.events.MouseEv ...

  6. ActionScript 3.0入门:Hello World、文件读写、数据存储(SharedObject)、与JS互调

    近期项目中可能要用到Flash存取数据,并与JS互调,所以就看了一下ActionScript 3.0,现把学习结果分享一下,希望对新手有帮助. 目录 ActionScript 3.0简介 Hello ...

  7. ActionScript 3.0 for the Lunder Algorithm

    package com.feiruo.Calendar.LunderCalendar { /* *@ClassName: package:com.feiruo.Calendar.LunderCalen ...

  8. [转]ActionScript 3.0入门:Hello World、文件读写、数据存储(SharedObject)、与JS互调

    本文转自:http://www.cnblogs.com/artwl/p/3396330.html 近期项目中可能要用到Flash存取数据,并与JS互调,所以就看了一下ActionScript 3.0, ...

  9. [ActionScript 3.0] AS3.0 动态加载显示内容

    可以将下列任何外部显示资源加载到 ActionScript 3.0 应用程序中: 在 ActionScript 3.0 中创作的 SWF 文件 — 此文件可以是 Sprite.MovieClip 或扩 ...

随机推荐

  1. EDIUS分别输出视频和音频的教程

    使用EDIUS剪辑好视频之后渲染输出文件时,为什么视频和音频分别出,而不是一起呢?这个问题很可能会让一些新手困惑不已,到底是什么原因呢?又要如何设置才能让输出的文件视音频一体呢?下面,小编将来和大家探 ...

  2. 怎么在OCR文字识别软件中安装和启动 OCR文字识别软件 Hot Folder

    默认情况下,ABBYY Hot Folder 会与 ABBYY FineReader 12 一起安装到计算机中.(关于ABBYY FineReader 12请参考ABBYY FineReader 12 ...

  3. webpack es6支持配置

    Install Babel and the presets: npm install --save-dev babel-core babel-preset-es2015 Install babel-l ...

  4. 通过新浪ip地址库获得用户的省份、城市等信息

    <script src="http://apps.bdimg.com/libs/jquery/1.11.3/jquery.min.js"></script> ...

  5. Linux环境下vsftpd参数配置

    很久之前就用过vsftpd,但总是忘了参数该如何配置,今天特地有搜索了一遍,把配置方法整理如下: (1)检查是否已安装vsftpd #rpm -qa | grep vsftpd vsftpd--.el ...

  6. Hibernate3回顾-1-部署

    web备份版本,详见doc版本. 一.背景(部署简单回顾) 我们知道,一个Hibernate快速上手的简单流程是这样. 1引入对应jar包. 中间涉及log4的jar包和配置,略. 2 实体类 pac ...

  7. RESRful API 和 HTTP状态码

    一.RESRful API: GET(SELECT):从服务器取出资源(一项或多项). POST(CREATE):在服务器新建一个资源. PUT(UPDATE):在服务器更新资源(客户端提供改变后的完 ...

  8. 【Hadoop环境搭建】Centos6.8搭建hadoop伪分布模式

    阅读目录 ~/.ssh/authorized_keys 把公钥加到用于认证的公钥文件中,authorized_keys是用于认证的公钥文件 方式2: (未测试,应该可用) 基于空口令创建新的SSH密钥 ...

  9. IntelliJ IDEA中运行Tomcat报内存溢出(java.lang.OutOfMemoryError: PermGen space)

    在Run/Debug Configuration中修改Tomcat的VM options,在里面输入以下内容: -server -XX:PermSize=128M -XX:MaxPermSize=25 ...

  10. bzoj1346: [Baltic2006]Coin

    Description 有一个国家,流通着N种面值的硬币,其中包括了1分硬币.另外,有一种面值为K分的纸币,它超过了所有硬币的面值. 有一位硬币收藏家,他想收集每一种面值的硬币样本.他家里已经有一些硬 ...