more versions added

This commit is contained in:
Tubix
2024-10-05 12:11:16 +01:00
parent 413f563f33
commit c32c7e8c34
7661 changed files with 1343635 additions and 0 deletions

View File

@@ -0,0 +1,65 @@
K 25
svn:wc:ra_dav:version-url
V 109
/!svn/ver/154/platform/clients/fp9/libraries/Alternativa3D/branches/2.0/com/alternativagame/engine3d/material
END
HelperMaterial.as
K 25
svn:wc:ra_dav:version-url
V 127
/!svn/ver/154/platform/clients/fp9/libraries/Alternativa3D/branches/2.0/com/alternativagame/engine3d/material/HelperMaterial.as
END
Material.as
K 25
svn:wc:ra_dav:version-url
V 121
/!svn/ver/154/platform/clients/fp9/libraries/Alternativa3D/branches/2.0/com/alternativagame/engine3d/material/Material.as
END
TextureMaterial.as
K 25
svn:wc:ra_dav:version-url
V 128
/!svn/ver/154/platform/clients/fp9/libraries/Alternativa3D/branches/2.0/com/alternativagame/engine3d/material/TextureMaterial.as
END
Hit.as
K 25
svn:wc:ra_dav:version-url
V 116
/!svn/ver/154/platform/clients/fp9/libraries/Alternativa3D/branches/2.0/com/alternativagame/engine3d/material/Hit.as
END
FillMaterial.as
K 25
svn:wc:ra_dav:version-url
V 125
/!svn/ver/154/platform/clients/fp9/libraries/Alternativa3D/branches/2.0/com/alternativagame/engine3d/material/FillMaterial.as
END
ObjectMaterial.as
K 25
svn:wc:ra_dav:version-url
V 127
/!svn/ver/154/platform/clients/fp9/libraries/Alternativa3D/branches/2.0/com/alternativagame/engine3d/material/ObjectMaterial.as
END
SpriteMaterial.as
K 25
svn:wc:ra_dav:version-url
V 127
/!svn/ver/154/platform/clients/fp9/libraries/Alternativa3D/branches/2.0/com/alternativagame/engine3d/material/SpriteMaterial.as
END
WireMaterial.as
K 25
svn:wc:ra_dav:version-url
V 125
/!svn/ver/154/platform/clients/fp9/libraries/Alternativa3D/branches/2.0/com/alternativagame/engine3d/material/WireMaterial.as
END
PolygonMaterial.as
K 25
svn:wc:ra_dav:version-url
V 128
/!svn/ver/154/platform/clients/fp9/libraries/Alternativa3D/branches/2.0/com/alternativagame/engine3d/material/PolygonMaterial.as
END
SpritePhase.as
K 25
svn:wc:ra_dav:version-url
V 124
/!svn/ver/154/platform/clients/fp9/libraries/Alternativa3D/branches/2.0/com/alternativagame/engine3d/material/SpritePhase.as
END

View File

@@ -0,0 +1,148 @@
8
dir
46043
http://svndev.alternativaplatform.com/platform/clients/fp9/libraries/Alternativa3D/branches/2.0/com/alternativagame/engine3d/material
http://svndev.alternativaplatform.com
2008-08-25T13:05:49.549299Z
154
int
svn:special svn:externals svn:needs-lock
d9e2387a-1f3e-40e2-b57f-9df5970a2fa5
HelperMaterial.as
file
2010-10-28T04:34:04.000000Z
d7d8be858db9e57e34b271b088279ff1
2008-08-25T13:05:49.549299Z
154
int
Material.as
file
2010-10-28T04:34:04.000000Z
c9d48a2cc61f6b802a0d8119e4a43e3e
2008-08-25T13:05:49.549299Z
154
int
TextureMaterial.as
file
2010-10-28T04:34:04.000000Z
db1c1757075341b32fa63173f97714f7
2008-08-25T13:05:49.549299Z
154
int
Hit.as
file
2010-10-28T04:34:04.000000Z
2b42963f326ef68c0aa3fe1fb6de5fa0
2008-08-25T13:05:49.549299Z
154
int
FillMaterial.as
file
2010-10-28T04:34:04.000000Z
c89150d47576ca2c7478ae0200b12215
2008-08-25T13:05:49.549299Z
154
int
ObjectMaterial.as
file
2010-10-28T04:34:04.000000Z
14d5f2b73bc1c620499cf213edf2d6c2
2008-08-25T13:05:49.549299Z
154
int
SpriteMaterial.as
file
2010-10-28T04:34:04.000000Z
23b7814c94cf9a6a92e522c0d1dc60d9
2008-08-25T13:05:49.549299Z
154
int
WireMaterial.as
file
2010-10-28T04:34:04.000000Z
25a8f37607fb392bceb3c84d533279c7
2008-08-25T13:05:49.549299Z
154
int
PolygonMaterial.as
file
2010-10-28T04:34:04.000000Z
a95823ced8c29dac440bc000593c517d
2008-08-25T13:05:49.549299Z
154
int
SpritePhase.as
file
2010-10-28T04:34:04.000000Z
db52856a883993329978d783c1c820d7
2008-08-25T13:05:49.549299Z
154
int

View File

@@ -0,0 +1,33 @@
package com.alternativagame.engine3d.material {
import com.alternativagame.type.RGB;
public class FillMaterial extends PolygonMaterial {
// Цвет при отсутствии текстуры
public var color:RGB;
// Цвет самосвечения материала
public var selfIllumination:RGB = new RGB();
public function FillMaterial(color:RGB = null, twoSided:Boolean = false) {
this.color = (color == null) ? new RGB(0x7F7F7F) : color;
this.twoSided = twoSided;
}
// Клон
override public function clone():Material {
var res:FillMaterial = new FillMaterial();
cloneParams(res);
return res;
}
// Клонировать параметры
override protected function cloneParams(material:*):void {
var mat:FillMaterial = FillMaterial(material);
super.cloneParams(mat);
mat.color = color.clone();
mat.selfIllumination = selfIllumination.clone();
}
}
}

View File

@@ -0,0 +1,52 @@
package com.alternativagame.engine3d.material {
import com.alternativagame.type.RGB;
public class HelperMaterial extends ObjectMaterial {
// Показывать подпись
public var text:Boolean;
// Цвет подписи
public var textColor:RGB = new RGB(0xFFFFFF);
// Показывать связь с родителем
public var link:Boolean;
// Показывать тело объекта
public var body:Boolean;
// Показывать вспомогательную графику объекта
public var gizmo:Boolean;
// Цвет тела объекта
public var bodyColor:RGB = new RGB(0xCCCCCC);
public function HelperMaterial(text:Boolean = true, link:Boolean = true, gizmo:Boolean = true, body:Boolean = true) {
this.text = text;
this.link = link;
this.gizmo = gizmo;
this.body = body;
}
// Клон
override public function clone():Material {
var res:HelperMaterial = new HelperMaterial();
cloneParams(res);
return res;
}
// Клонировать параметры
override protected function cloneParams(material:*):void {
var mat:HelperMaterial = HelperMaterial(material);
super.cloneParams(mat);
mat.text = text;
mat.textColor = textColor.clone();
mat.body = body;
mat.gizmo = gizmo;
mat.bodyColor = bodyColor.clone();
mat.link = link;
}
}
}

View File

@@ -0,0 +1,40 @@
package com.alternativagame.engine3d.material {
import flash.geom.Point;
import com.alternativagame.engine3d.Math3D;
public final class Hit {
static public function ngon(n:uint, radiusX:Number, radiusY:Number = -1, offsetX:Number = 0, offsetY:Number = 0, angle:Number = 0):Array {
var res:Array = new Array();
n = (n < 3) ? 3 : n;
radiusY = (radiusY < 0) ? radiusX : radiusY;
angle = Math3D.toRadian(angle);
var sin:Number = Math.sin(angle);
var cos:Number = Math.cos(angle);
var a:Number = (Math.PI+Math.PI) / n;
for (var i:uint = 0; i < n; i++) {
var x:Number = offsetX + Math.sin(a*i)*radiusX;
var y:Number = offsetY - Math.cos(a*i)*radiusY;
var cx:Number = x*cos - y*sin;
var cy:Number = y*cos + x*sin;
res.push(new Point(cx, cy));
}
return res;
}
static public function rectangle(width:Number, height:Number, offsetX:Number = 0, offsetY:Number = 0):Array {
var res:Array = new Array();
var hw:Number = width/2;
var hh:Number = height/2;
res.push(new Point(offsetX - hw, offsetY - hh));
res.push(new Point(offsetX + hw, offsetY - hh));
res.push(new Point(offsetX + hw, offsetY + hh));
res.push(new Point(offsetX - hw, offsetY + hh));
return res;
}
}
}

View File

@@ -0,0 +1,31 @@
package com.alternativagame.engine3d.material {
public class Material {
// Прозрачность материала
public var alpha:Number = 1;
// Метод наложения
public var blendMode:String = "normal";
// Смещение глубины
public var depthOffset:Number = 0;
// Клон
public function clone():Material {
var res:Material = new Material();
cloneParams(res);
return res;
}
// Клонировать параметры
protected function cloneParams(material:*):void {
var mat:Material = Material(material);
mat.alpha = alpha;
mat.blendMode = blendMode;
mat.depthOffset = depthOffset;
}
}
}

View File

@@ -0,0 +1,22 @@
package com.alternativagame.engine3d.material {
public class ObjectMaterial extends Material {
// Массив точек хит-области
public var hit:Array = new Array();
// Клон
override public function clone():Material {
var res:ObjectMaterial = new ObjectMaterial();
cloneParams(res);
return res;
}
// Клонировать параметры
override protected function cloneParams(material:*):void {
var mat:ObjectMaterial = ObjectMaterial(material);
super.cloneParams(mat);
mat.hit = hit;
}
}
}

View File

@@ -0,0 +1,23 @@
package com.alternativagame.engine3d.material {
public class PolygonMaterial extends Material {
// Двусторонний материал
public var twoSided:Boolean;
// Клон
override public function clone():Material {
var res:PolygonMaterial = new PolygonMaterial();
cloneParams(res);
return res;
}
// Клонировать параметры
override protected function cloneParams(material:*):void {
var mat:PolygonMaterial = PolygonMaterial(material);
super.cloneParams(mat);
mat.twoSided = twoSided;
}
}
}

View File

@@ -0,0 +1,105 @@
package com.alternativagame.engine3d.material {
import com.alternativagame.engine3d.Math3D;
import com.alternativagame.type.RGB;
import flash.display.BitmapData;
import flash.geom.Point;
public class SpriteMaterial extends ObjectMaterial {
// Массив фаз
private var states:Array = new Array();
// Сглаженность
public var smoothing:Boolean;
// Цвет самосвечения материала
public var selfIllumination:RGB = new RGB();
// Флаги искажения спрайта
public var scale:Boolean;
public var rotate:Boolean;
public function SpriteMaterial(smoothing:Boolean = false, scale:Boolean = false, rotate:Boolean = false) {
this.smoothing = smoothing;
this.scale = scale;
this.rotate = rotate;
}
public function setPhase(bitmapData:BitmapData, pivot:Point = null, state:String = "default", pitch:Number = 0, yaw:Number = 0):void {
// Добавляем состояние, если надо
if (states[state] == undefined) {
states[state] = new Array();
}
states[state].push(new SpritePhase(bitmapData, pivot, pitch, yaw));
}
// Возвращает фазу
public function getPhase(state:String = "default", pitch:Number = 0, yaw:Number = 0):SpritePhase {
var res:SpritePhase = null;
// Проверка на наличие состояние
if (states[state] != undefined) {
var phases:Array = states[state];
var num:uint = phases.length;
var i:uint;
var phase:SpritePhase;
var resPitch:Number;
var currentDiff:Number;
// Находим ближайший pitch
var minDiff:Number = Number.MAX_VALUE;
for (i = 0; i < num; i++) {
phase = phases[i];
currentDiff = Math.abs(phase.pitch - pitch);
if (currentDiff < minDiff) {
minDiff = currentDiff;
resPitch = phase.pitch;
}
}
// Находим ближайший yaw и сохраняем результат
minDiff = Number.MAX_VALUE;
for (i = 0; i < num; i++) {
phase = phases[i];
if (phase.pitch == resPitch) {
currentDiff = Math.abs(Math3D.deltaAngle(phase.yaw, yaw));
if (currentDiff < minDiff) {
minDiff = currentDiff;
res = phase;
}
}
}
}
return res;
}
// Клон
override public function clone():Material {
var res:SpriteMaterial = new SpriteMaterial();
cloneParams(res);
return res;
}
// Клонировать параметры
override protected function cloneParams(material:*):void {
var mat:SpriteMaterial = SpriteMaterial(material);
super.cloneParams(mat);
mat.smoothing = smoothing;
mat.selfIllumination = selfIllumination.clone();
mat.scale = scale;
mat.rotate = rotate;
for (var state:String in states) {
for (var i:uint = 0; i < states[state].length; i++) {
var phase:SpritePhase = states[state][i];
mat.setPhase(phase.bitmapData, phase.pivot.clone(), state, phase.pitch, phase.yaw);
}
}
}
}
}

View File

@@ -0,0 +1,68 @@
package com.alternativagame.engine3d.material {
import flash.display.BitmapData;
import flash.geom.Point;
import com.alternativagame.engine3d.Matrix3D;
import com.alternativagame.engine3d.Math3D;
public class SpritePhase {
// Битмапа фазы
public var bitmapData:BitmapData;
// Точка привязки битмапы
private var _pivot:Point;
private var _transform:Matrix3D;
private var _pitch:Number;
private var _yaw:Number;
public function SpritePhase(bitmapData:BitmapData, pivot:Point, pitch:Number, yaw:Number) {
this.bitmapData = bitmapData;
_pivot = (pivot == null) ? new Point(bitmapData.width / 2, bitmapData.height / 2) : pivot;
// Проверка углов
pitch = Math3D.limitAngle(pitch);
if (pitch < 0) {
if (pitch < -90) {
pitch = -180 - pitch;
yaw += 180;
}
} else {
if (pitch > 90) {
pitch = 180 - pitch;
yaw += 180;
}
}
yaw = Math3D.limitAngle(yaw);
// Сохраняем углы
_pitch = pitch;
_yaw = yaw;
// Формируем матрицу трансформации фазы
_transform = new Matrix3D();
Math3D.translateMatrix(_transform, -_pivot.x, 0, _pivot.y);
Math3D.rotateXMatrix(_transform, -_pitch);
Math3D.rotateZMatrix(_transform, -_yaw);
}
public function get transform():Matrix3D {
return _transform;
}
public function get pitch():Number {
return _pitch;
}
public function get yaw():Number {
return _yaw;
}
public function get pivot():Point {
return _pivot;
}
}
}

View File

@@ -0,0 +1,36 @@
package com.alternativagame.engine3d.material {
import com.alternativagame.type.RGB;
import flash.display.BitmapData;
public final class TextureMaterial extends FillMaterial {
// Текстура
public var texture:BitmapData = null;
// Сглаженность
public var smoothing:Boolean;
public function TextureMaterial(texture:BitmapData = null, smoothing:Boolean = true, color:RGB = null, twoSided:Boolean = false) {
super(color, twoSided);
this.texture = texture;
this.smoothing = smoothing;
}
// Клон
override public function clone():Material {
var res:TextureMaterial = new TextureMaterial();
cloneParams(res);
return res;
}
// Клонировать параметры
override protected function cloneParams(material:*):void {
var mat:TextureMaterial = TextureMaterial(material);
super.cloneParams(mat);
mat.texture = texture;
mat.smoothing = smoothing;
}
}
}

View File

@@ -0,0 +1,35 @@
package com.alternativagame.engine3d.material {
import com.alternativagame.type.RGB;
public class WireMaterial extends PolygonMaterial {
// Цвет рёбер
public var color:RGB;
// Толщина рёбер
public var thickness:Number;
public function WireMaterial(color:RGB = null, thickness:Number = 1, twoSided:Boolean = false) {
this.color = (color == null) ? new RGB(0xFFFFFF) : color;
this.thickness = thickness;
this.twoSided = twoSided;
}
// Клон
override public function clone():Material {
var res:WireMaterial = new WireMaterial();
cloneParams(res);
return res;
}
// Клонировать параметры
override protected function cloneParams(material:*):void {
var mat:WireMaterial = WireMaterial(material);
super.cloneParams(mat);
mat.color = color.clone();
mat.thickness = thickness;
}
}
}

View File

@@ -0,0 +1,33 @@
package com.alternativagame.engine3d.material {
import com.alternativagame.type.RGB;
public class FillMaterial extends PolygonMaterial {
// Цвет при отсутствии текстуры
public var color:RGB;
// Цвет самосвечения материала
public var selfIllumination:RGB = new RGB();
public function FillMaterial(color:RGB = null, twoSided:Boolean = false) {
this.color = (color == null) ? new RGB(0x7F7F7F) : color;
this.twoSided = twoSided;
}
// Клон
override public function clone():Material {
var res:FillMaterial = new FillMaterial();
cloneParams(res);
return res;
}
// Клонировать параметры
override protected function cloneParams(material:*):void {
var mat:FillMaterial = FillMaterial(material);
super.cloneParams(mat);
mat.color = color.clone();
mat.selfIllumination = selfIllumination.clone();
}
}
}

View File

@@ -0,0 +1,52 @@
package com.alternativagame.engine3d.material {
import com.alternativagame.type.RGB;
public class HelperMaterial extends ObjectMaterial {
// Показывать подпись
public var text:Boolean;
// Цвет подписи
public var textColor:RGB = new RGB(0xFFFFFF);
// Показывать связь с родителем
public var link:Boolean;
// Показывать тело объекта
public var body:Boolean;
// Показывать вспомогательную графику объекта
public var gizmo:Boolean;
// Цвет тела объекта
public var bodyColor:RGB = new RGB(0xCCCCCC);
public function HelperMaterial(text:Boolean = true, link:Boolean = true, gizmo:Boolean = true, body:Boolean = true) {
this.text = text;
this.link = link;
this.gizmo = gizmo;
this.body = body;
}
// Клон
override public function clone():Material {
var res:HelperMaterial = new HelperMaterial();
cloneParams(res);
return res;
}
// Клонировать параметры
override protected function cloneParams(material:*):void {
var mat:HelperMaterial = HelperMaterial(material);
super.cloneParams(mat);
mat.text = text;
mat.textColor = textColor.clone();
mat.body = body;
mat.gizmo = gizmo;
mat.bodyColor = bodyColor.clone();
mat.link = link;
}
}
}

View File

@@ -0,0 +1,40 @@
package com.alternativagame.engine3d.material {
import flash.geom.Point;
import com.alternativagame.engine3d.Math3D;
public final class Hit {
static public function ngon(n:uint, radiusX:Number, radiusY:Number = -1, offsetX:Number = 0, offsetY:Number = 0, angle:Number = 0):Array {
var res:Array = new Array();
n = (n < 3) ? 3 : n;
radiusY = (radiusY < 0) ? radiusX : radiusY;
angle = Math3D.toRadian(angle);
var sin:Number = Math.sin(angle);
var cos:Number = Math.cos(angle);
var a:Number = (Math.PI+Math.PI) / n;
for (var i:uint = 0; i < n; i++) {
var x:Number = offsetX + Math.sin(a*i)*radiusX;
var y:Number = offsetY - Math.cos(a*i)*radiusY;
var cx:Number = x*cos - y*sin;
var cy:Number = y*cos + x*sin;
res.push(new Point(cx, cy));
}
return res;
}
static public function rectangle(width:Number, height:Number, offsetX:Number = 0, offsetY:Number = 0):Array {
var res:Array = new Array();
var hw:Number = width/2;
var hh:Number = height/2;
res.push(new Point(offsetX - hw, offsetY - hh));
res.push(new Point(offsetX + hw, offsetY - hh));
res.push(new Point(offsetX + hw, offsetY + hh));
res.push(new Point(offsetX - hw, offsetY + hh));
return res;
}
}
}

View File

@@ -0,0 +1,31 @@
package com.alternativagame.engine3d.material {
public class Material {
// Прозрачность материала
public var alpha:Number = 1;
// Метод наложения
public var blendMode:String = "normal";
// Смещение глубины
public var depthOffset:Number = 0;
// Клон
public function clone():Material {
var res:Material = new Material();
cloneParams(res);
return res;
}
// Клонировать параметры
protected function cloneParams(material:*):void {
var mat:Material = Material(material);
mat.alpha = alpha;
mat.blendMode = blendMode;
mat.depthOffset = depthOffset;
}
}
}

View File

@@ -0,0 +1,22 @@
package com.alternativagame.engine3d.material {
public class ObjectMaterial extends Material {
// Массив точек хит-области
public var hit:Array = new Array();
// Клон
override public function clone():Material {
var res:ObjectMaterial = new ObjectMaterial();
cloneParams(res);
return res;
}
// Клонировать параметры
override protected function cloneParams(material:*):void {
var mat:ObjectMaterial = ObjectMaterial(material);
super.cloneParams(mat);
mat.hit = hit;
}
}
}

View File

@@ -0,0 +1,23 @@
package com.alternativagame.engine3d.material {
public class PolygonMaterial extends Material {
// Двусторонний материал
public var twoSided:Boolean;
// Клон
override public function clone():Material {
var res:PolygonMaterial = new PolygonMaterial();
cloneParams(res);
return res;
}
// Клонировать параметры
override protected function cloneParams(material:*):void {
var mat:PolygonMaterial = PolygonMaterial(material);
super.cloneParams(mat);
mat.twoSided = twoSided;
}
}
}

View File

@@ -0,0 +1,105 @@
package com.alternativagame.engine3d.material {
import com.alternativagame.engine3d.Math3D;
import com.alternativagame.type.RGB;
import flash.display.BitmapData;
import flash.geom.Point;
public class SpriteMaterial extends ObjectMaterial {
// Массив фаз
private var states:Array = new Array();
// Сглаженность
public var smoothing:Boolean;
// Цвет самосвечения материала
public var selfIllumination:RGB = new RGB();
// Флаги искажения спрайта
public var scale:Boolean;
public var rotate:Boolean;
public function SpriteMaterial(smoothing:Boolean = false, scale:Boolean = false, rotate:Boolean = false) {
this.smoothing = smoothing;
this.scale = scale;
this.rotate = rotate;
}
public function setPhase(bitmapData:BitmapData, pivot:Point = null, state:String = "default", pitch:Number = 0, yaw:Number = 0):void {
// Добавляем состояние, если надо
if (states[state] == undefined) {
states[state] = new Array();
}
states[state].push(new SpritePhase(bitmapData, pivot, pitch, yaw));
}
// Возвращает фазу
public function getPhase(state:String = "default", pitch:Number = 0, yaw:Number = 0):SpritePhase {
var res:SpritePhase = null;
// Проверка на наличие состояние
if (states[state] != undefined) {
var phases:Array = states[state];
var num:uint = phases.length;
var i:uint;
var phase:SpritePhase;
var resPitch:Number;
var currentDiff:Number;
// Находим ближайший pitch
var minDiff:Number = Number.MAX_VALUE;
for (i = 0; i < num; i++) {
phase = phases[i];
currentDiff = Math.abs(phase.pitch - pitch);
if (currentDiff < minDiff) {
minDiff = currentDiff;
resPitch = phase.pitch;
}
}
// Находим ближайший yaw и сохраняем результат
minDiff = Number.MAX_VALUE;
for (i = 0; i < num; i++) {
phase = phases[i];
if (phase.pitch == resPitch) {
currentDiff = Math.abs(Math3D.deltaAngle(phase.yaw, yaw));
if (currentDiff < minDiff) {
minDiff = currentDiff;
res = phase;
}
}
}
}
return res;
}
// Клон
override public function clone():Material {
var res:SpriteMaterial = new SpriteMaterial();
cloneParams(res);
return res;
}
// Клонировать параметры
override protected function cloneParams(material:*):void {
var mat:SpriteMaterial = SpriteMaterial(material);
super.cloneParams(mat);
mat.smoothing = smoothing;
mat.selfIllumination = selfIllumination.clone();
mat.scale = scale;
mat.rotate = rotate;
for (var state:String in states) {
for (var i:uint = 0; i < states[state].length; i++) {
var phase:SpritePhase = states[state][i];
mat.setPhase(phase.bitmapData, phase.pivot.clone(), state, phase.pitch, phase.yaw);
}
}
}
}
}

View File

@@ -0,0 +1,68 @@
package com.alternativagame.engine3d.material {
import flash.display.BitmapData;
import flash.geom.Point;
import com.alternativagame.engine3d.Matrix3D;
import com.alternativagame.engine3d.Math3D;
public class SpritePhase {
// Битмапа фазы
public var bitmapData:BitmapData;
// Точка привязки битмапы
private var _pivot:Point;
private var _transform:Matrix3D;
private var _pitch:Number;
private var _yaw:Number;
public function SpritePhase(bitmapData:BitmapData, pivot:Point, pitch:Number, yaw:Number) {
this.bitmapData = bitmapData;
_pivot = (pivot == null) ? new Point(bitmapData.width / 2, bitmapData.height / 2) : pivot;
// Проверка углов
pitch = Math3D.limitAngle(pitch);
if (pitch < 0) {
if (pitch < -90) {
pitch = -180 - pitch;
yaw += 180;
}
} else {
if (pitch > 90) {
pitch = 180 - pitch;
yaw += 180;
}
}
yaw = Math3D.limitAngle(yaw);
// Сохраняем углы
_pitch = pitch;
_yaw = yaw;
// Формируем матрицу трансформации фазы
_transform = new Matrix3D();
Math3D.translateMatrix(_transform, -_pivot.x, 0, _pivot.y);
Math3D.rotateXMatrix(_transform, -_pitch);
Math3D.rotateZMatrix(_transform, -_yaw);
}
public function get transform():Matrix3D {
return _transform;
}
public function get pitch():Number {
return _pitch;
}
public function get yaw():Number {
return _yaw;
}
public function get pivot():Point {
return _pivot;
}
}
}

View File

@@ -0,0 +1,36 @@
package com.alternativagame.engine3d.material {
import com.alternativagame.type.RGB;
import flash.display.BitmapData;
public final class TextureMaterial extends FillMaterial {
// Текстура
public var texture:BitmapData = null;
// Сглаженность
public var smoothing:Boolean;
public function TextureMaterial(texture:BitmapData = null, smoothing:Boolean = true, color:RGB = null, twoSided:Boolean = false) {
super(color, twoSided);
this.texture = texture;
this.smoothing = smoothing;
}
// Клон
override public function clone():Material {
var res:TextureMaterial = new TextureMaterial();
cloneParams(res);
return res;
}
// Клонировать параметры
override protected function cloneParams(material:*):void {
var mat:TextureMaterial = TextureMaterial(material);
super.cloneParams(mat);
mat.texture = texture;
mat.smoothing = smoothing;
}
}
}

View File

@@ -0,0 +1,35 @@
package com.alternativagame.engine3d.material {
import com.alternativagame.type.RGB;
public class WireMaterial extends PolygonMaterial {
// Цвет рёбер
public var color:RGB;
// Толщина рёбер
public var thickness:Number;
public function WireMaterial(color:RGB = null, thickness:Number = 1, twoSided:Boolean = false) {
this.color = (color == null) ? new RGB(0xFFFFFF) : color;
this.thickness = thickness;
this.twoSided = twoSided;
}
// Клон
override public function clone():Material {
var res:WireMaterial = new WireMaterial();
cloneParams(res);
return res;
}
// Клонировать параметры
override protected function cloneParams(material:*):void {
var mat:WireMaterial = WireMaterial(material);
super.cloneParams(mat);
mat.color = color.clone();
mat.thickness = thickness;
}
}
}