TextureMaterial(texture:Texture2DBase = null, smooth:Boolean = true, repeat:Boolean = false, mipmap:Boolean = true)//贴图,平滑,重复,启用mipmap贴图
Creates a new TextureMaterial.

1.贴图相关

在三维计算机图形的贴图渲染中有一个常用的技术被称为Mipmapping。为了加快渲染速度和减少图像锯齿,贴图被处理成由一系列被预先计算和优化过的图片组成的文件,这样的贴图被称为 MIP map 或者 mipmap。这个技术在三维游戏中被非常广泛的使用。“MIP”来自于拉丁语 multum in parvo 的首字母,意思是“放置很多东西的小空间”。Mipmap 需要占用一定的内存空间,同时也遵循小波压缩规则 (wavelet compression)。

var floorMapTexture:BitmapTexture = new BitmapTexture(new this.FloorMapAsset().bitmapData); var floorMap:TextureMaterial = new TextureMaterial(floorMapTexture, true, true);
floorMap.specular = 1;//反射
floorMap.lightPicker = new StaticLightPicker([param1]);//拾取灯光
floorMap.diffuseMethod = new TerrainDiffuseMethod([floorMapTexture], new BitmapTexture(new this.FloorShadowMapAsset().bitmapData), [10]);//三维里面称之为凹凸贴图方法this.floorMesh = new Mesh(new PlaneGeometry(3800, 3800), floorMap);//创建地面面片,贴上上面生成的地面贴图

一般贴图思路:

1.制作各种贴图 ,如 :反射贴图,凹凸贴图,等

2场景里的灯光用lightPicker把灯光打到贴图

3.把效果的贴图 添加到贴图上

4.生成一个面片mesh  ,把贴图放到面片上

加载模型上贴图

  var garageLoader:Loader3D = new Loader3D();//实例模型加载器garageLoader.addEventListener(AssetEvent.ASSET_COMPLETE, this.complete);garageLoader.loadData(new this.GarageAsset(), null, null);super.addChildren(this.floorMesh, this.floorShadowMesh);private function complete(event:AssetEvent):void{if (event.asset.assetType == AssetType.MESH){garageMesh = event.asset as Mesh;//将模型转换成面片garageMesh.material = new TextureMaterial(new BitmapTexture(new this.GarageMapAsset().bitmapData), true);//为加载进来的模型上贴图garageMesh.roll(180);garageMesh.geometry.scale(3);super.addChild(this.garageMesh);super.y = 188;}}

Method类的用法有两种,一种是通过DefaultMaterialBase的子类(如ColorMaterial,BitmapMaterial等)的addMethod()方法进行设置,
如:

var cubeMaterial:ColorMaterial = new ColorMaterial();
cubeMaterial.addMethod(new OutlineMethod());

另一种是通过DefaultMaterialBase子类的指定方法进行设置,
如:

var cubeMaterial:ColorMaterial = new ColorMaterial();
cubeMaterial.diffuseMethod = new SubsurfaceScatteringDiffuseMethod();
cubeMaterial.specularMethod = new FresnelSpecularMethod();
cubeMaterial.shadowMethod = new DitheredShadowMapMethod();

其实这两种设置方式的区别仅在于渲染时的执行优先级,如果对哪个Method被先执行没有特殊要求的话,完全可以使用第一种方式来添加所有的Method

渲染时的执行优先级依次为:
normalMethod>ambientMethod>shadowMethod>diffuseMethod>specularMethod>colorTransform>其它通过addMethod()方法添加的Method

一些常用的Method:

EnvMapMethod
环境贴图方法,想要物体表面能反射周围环境(如不锈钢,有机玻璃材质)

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

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

FresnelEnvMapMethod
菲涅尔环境贴图方法

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

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

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

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

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

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

var matrix:Array = new Array();
matrix = matrix.concat([1, 0, 0, 0, 0]); // red
matrix = matrix.concat([0, 0, 0, 0, 0]); // green
matrix = matrix.concat([0, 0, 0, 0, 0]); // blue
matrix = matrix.concat([0, 0, 0, 1, 0]); // alpha
var filter:ColorMatrixFilter = new ColorMatrixFilter(matrix);
var m:ColorMatrixMethod = new ColorMatrixMethod();
m.colorMatrixFilter = filter;
bodyMaterial.addMethod(m);

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

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

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

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

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

话说....这货有个bug....不支持透明图片....希望下个版本能修复吧....

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

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

DitheredShadowMapMethod
抖动阴影方法

转载于:https://www.cnblogs.com/bulolo/archive/2012/12/01/2797675.html

away3d 4.1 贴图总结相关推荐

  1. Away3D实例教程 - 贴图(EnviroBitmapMaterial)

    本篇包含内容: 3D基本元素 - 圆环 环境位图材质EnviroBitmapMaterial. 转载请注明出处:nooon.cnblogs.com 本例会用到的图片:             先看本例 ...

  2. ActionScript 3.0 学习(十七) away3D学习2 away3d的贴图原理

    我正在做这样一个东西,在球体的表面,贴上多张图片,如四张图片,其实很简单,如果你明白它的贴图原理. away3d空间中的最小单位是Face(surface的简称),也就是一个三角形Triangle(但 ...

  3. 【Away3D代码解读】(四):主要模块简介

    数据模块: Away3D中最核心的数据类是Mesh类,我们先看看Mesh类的继承关系: NamedAssetBase:为对象提供id和name属性,是Away3D大部分类的基类: Object3D:3 ...

  4. 【AwayPhysics学习笔记】:Away3D物理引擎的简介与使用

    首先我们要了解的是AwayPhysics这个物理引擎并不是重头开始写的新物理引擎,而是使用Flascc技术把一个已经很成熟的Bullet物理引擎引入到了Flash中,同时为了让as3可以使用这个C++ ...

  5. away3d 4.0.9Gold 学习笔记 加载模型(6)

    学习笔记提供模型和贴图请勿用于商业用途. 1 package 2 { 3 import away3d.containers.ObjectContainer3D; 4 import away3d.con ...

  6. 【Away3D代码解读】(一):主要类及说明

    在深入解读Away3D的代码之前,需要对其有个大概的认识.本节主要列出Away3D中常用的类,并附上说明: View3D: Away3D的入口类,即创建该类就会初始化一个可以使用GPU呈现3D的对象, ...

  7. 使用away3d 精灵表实现材质动画

    away3d中进行材质动画可使用SpriteSheetAnimator类:要使用这个功能应完成以下几个步骤: 1:准备精灵表--一个连续动画的位图序列(单张或影片剪辑形式): 2:创建一个Sprite ...

  8. Away3d材质实战——旋转的地球

    这篇文章已经过期,请使用最新版的Away3d并查看相关资料 使用现有的flash player API能够实现三维旋转的地球,但是比较麻烦,主要使用的是flash player10新增加的绘图API ...

  9. (2011-12-11 旧博文搬运)away3d太阳系DEMO

    away3d制作的简易太阳系演示,不要吐槽数据不太符合实际,那些靠边的行星公转周期都是以世纪为单位的,我不加快一点就根本看不出它们是在运动还是罢工了...LOL.边上那个哈雷彗星就当没看见吧,实在太丑 ...

最新文章

  1. Android之利用ColorMatrix进行图片的各种特效处理
  2. 【十五分钟Talkshow】谈谈HTML 5及其对Web开发人员的挑战和机遇
  3. dock模拟macos教程_将macOS首选项窗格添加到您的Dock中以快速访问
  4. 关机时无人照管更新正在运行_无法抗拒的未来:无人叉车在内部物流中已成为现实...
  5. SQL Server 不同数据库导入指定数据解决方案
  6. spark 上下游shuffle结果的存放获取
  7. Jquery 关于span标签的取值赋值用法
  8. 拓端tecdat:数据评估三方科技公司开发人员能力
  9. CAJViewer的下载与使用
  10. 计算机指纹驱动程序,解决Windows 7系统本本指纹识别器问题
  11. 移动硬盘驱动怎么修复_为什么您的新硬盘驱动器未在Windows中显示(以及如何修复)...
  12. Android锁机病毒分析
  13. pandas学习task05变形
  14. MIPI通讯的初理解
  15. 游戏领域的“抄袭”与“借鉴”之分,无耻与致敬仅有一步之遥
  16. Mac 重命名快捷键
  17. 使用Xcode查看当前渲染性能以及渲染情况
  18. 数据库安全防护措施之防黑客攻击
  19. 数据库系统-SimpleDB
  20. stata行业变量怎么赋值_动态面板模型估计方法简介以及stata应用

热门文章

  1. html默认值,html基本标签的分类及默认值
  2. 2022-2028全球茶浓缩液市场现状及未来发展趋势
  3. H5 img标签图片无法显示或video标签视频无法显示解决方法
  4. Java: ParameterizedType用法与简介
  5. 基于双机械硬盘和一块固态硬盘安装ubuntu系统的硬盘挂载
  6. HTTP和HTTPS的区别详解
  7. 关于mini2440LCD模块总结
  8. js去除字符串中的空格
  9. Linux下保存/不保存退出vi,vim编辑
  10. 计算机毕业设计基于asp.net在线音乐网站