My favorites | Sign in
Project Home Downloads Wiki Issues Source
Checkout   Browse   Changes    
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package org.papervision3d.materials.shadematerials
{
import flash.display.BitmapData;
import flash.display.Graphics;
import flash.geom.Matrix;

import org.papervision3d.core.geom.renderables.Triangle3D;
import org.papervision3d.core.material.AbstractLightShadeMaterial;
import org.papervision3d.core.math.Matrix3D;
import org.papervision3d.core.proto.LightObject3D;
import org.papervision3d.core.render.command.RenderTriangle;
import org.papervision3d.core.render.data.RenderSessionData;
import org.papervision3d.core.render.draw.ITriangleDrawer;
import org.papervision3d.materials.utils.LightMaps;

/**
* @Author Ralph Hauwert
*/
public class FlatShadeMaterial extends AbstractLightShadeMaterial implements ITriangleDrawer
{
private static var currentColor:int;
private static var zAngle:int;

protected var _colors:Array;

public function FlatShadeMaterial(light:LightObject3D, lightColor:uint=0xffffff, ambientColor:uint=0x000000, specularLevel:uint=0 )
{
super();
this.fillAlpha = 1;
this.light = light;
_colors = LightMaps.getFlatMapArray(lightColor,ambientColor,specularLevel);
}

/**
* Localized stuff.
*/
private static var zd:Number;
private static var x0:Number;
private static var y0:Number;
override public function drawTriangle(tri:RenderTriangle, graphics:Graphics, renderSessionData:RenderSessionData, altBitmap:BitmapData = null, altUV:Matrix = null):void
{
var face3D:Triangle3D = tri.triangle;
lightMatrix = Matrix3D(lightMatrices[face3D.instance]);
zd = face3D.faceNormal.x * lightMatrix.n31 + face3D.faceNormal.y * lightMatrix.n32 + face3D.faceNormal.z * lightMatrix.n33;

if(zd < 0){
if(doubleSided == false){
zd = 0;
}else{
zd = Math.abs(zd);
}

};

x0 = tri.v0.x;
y0 = tri.v0.y;
zAngle = zd*0xff;
currentColor = _colors[zAngle];

graphics.beginFill(currentColor,fillAlpha);
graphics.moveTo(x0, y0);
graphics.lineTo(tri.v1.x, tri.v1.y);
graphics.lineTo(tri.v2.x, tri.v2.y);
graphics.lineTo(x0, y0);
graphics.endFill();
renderSessionData.renderStatistics.shadedTriangles++;
}

}
}

Change log

r811 by C4RL054321 on Nov 29, 2008   Diff
Renamed arguments for consistency
Go to: 
Project members, sign in to write a code review

Older revisions

r807 by r.hauwert on Nov 24, 2008   Diff
Fixed Flatshadematerial so it works
doublesided.
r763 by C4RL054321 on Oct 23, 2008   Diff
FlatShadeMaterial and FlatShader now
implement specularLevel.
r761 by C4RL054321 on Oct 22, 2008   Diff
FlatShadeMaterial: _colors array now
protected so the material can be
extended.
All revisions of this file

File info

Size: 2160 bytes, 70 lines
Powered by Google Project Hosting