⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 flatshader.as

📁 一个2D基于verlet的Flash物理引擎。它用AS3编写而成。Fisix的目标是应用到游戏等计算量很大的实时应用中。尽管flash比c/c++要慢,很棒的物理引擎
💻 AS
字号:
package org.papervision3d.materials.shaders{	import flash.display.BitmapData;	import flash.display.Graphics;	import flash.display.Sprite;	import flash.geom.Matrix;		import org.papervision3d.core.geom.renderables.Triangle3D;	import org.papervision3d.core.math.Matrix3D;	import org.papervision3d.core.proto.LightObject3D;	import org.papervision3d.core.render.data.RenderSessionData;	import org.papervision3d.core.render.shader.ShaderObjectData;	import org.papervision3d.materials.utils.LightMaps;		/**	 * @Author Ralph Hauwert	 */	public class FlatShader extends LightShader implements IShader, ILightShader	{				private static var triMatrix:Matrix = new Matrix();		private static var currentGraphics:Graphics;		private static var zAngle:Number;		private static var currentColor:int;				private static var vx:Number;		private static var vy:Number;		private static var vz:Number;				public var lightColor:int;		public var ambientColor:int;		private var _colors:Array;		private var _colorRamp:BitmapData;				public function FlatShader(light:LightObject3D, lightColor:int, ambientColor:int)		{			super();			this.light = light;			this.lightColor = lightColor;			this.ambientColor = ambientColor;			this._colors = LightMaps.getFlatMapArray(lightColor, ambientColor,1);			this._colorRamp = LightMaps.getFlatMap(lightColor, ambientColor,1);		}				/**		 * Localized vars		 */		private static var zd:Number;		private static var lightMatrix:Matrix3D;		private static var sod:ShaderObjectData;				override public function renderLayer(triangle:Triangle3D, renderSessionData:RenderSessionData, sod:ShaderObjectData):void		{			lightMatrix = Matrix3D(sod.lightMatrices[this]);			zd = triangle.faceNormal.x * lightMatrix.n31 + triangle.faceNormal.y * lightMatrix.n32 + triangle.faceNormal.z * lightMatrix.n33;			if(zd < 0){				zd = 0;			};			zd = zd*0xFF;			triMatrix = sod.uvMatrices[triangle] ? sod.uvMatrices[triangle] : sod.getUVMatrixForTriangle(triangle);			currentColor = _colors[int(zd)];						currentGraphics = Sprite(layers[sod.object]).graphics;			currentGraphics.beginFill(currentColor,1);			currentGraphics.moveTo(triMatrix.tx, triMatrix.ty);			currentGraphics.lineTo(triMatrix.a+triMatrix.tx, triMatrix.b+triMatrix.ty);			currentGraphics.lineTo(triMatrix.c+triMatrix.tx, triMatrix.d+triMatrix.ty);			currentGraphics.lineTo(triMatrix.tx, triMatrix.ty);			currentGraphics.endFill();		}				/**		 *Localized var		 */		public static var scaleMatrix:Matrix = new Matrix();		override public function renderTri(triangle:Triangle3D, renderSessionData:RenderSessionData, sod:ShaderObjectData,bmp:BitmapData):void		{			lightMatrix = Matrix3D(sod.lightMatrices[this]);			if(lightMatrix){				zd = triangle.faceNormal.x * lightMatrix.n31 + triangle.faceNormal.y * lightMatrix.n32 + triangle.faceNormal.z * lightMatrix.n33;				if(zd < 0){zd = 0;};				scaleMatrix.a = bmp.width;				scaleMatrix.d = bmp.height;				scaleMatrix.tx =-int(zd*0xFF)*bmp.width;				bmp.draw(_colorRamp, scaleMatrix,null,layerBlendMode, bmp.rect, false);			}		}	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -