Files
alternativa3d-archive/Alternativa3D2/2.0/com/alternativagame/engine3d/object/light/Direct3D.as
2024-10-05 12:11:16 +01:00

51 lines
1.6 KiB
ActionScript

package com.alternativagame.engine3d.object.light {
import com.alternativagame.engine3d.Math3D;
import com.alternativagame.engine3d.engine3d;
import com.alternativagame.engine3d.material.HelperMaterial;
import com.alternativagame.engine3d.material.Material;
import com.alternativagame.engine3d.object.Object3D;
import com.alternativagame.engine3d.skin.DirectSkin;
import com.alternativagame.engine3d.skin.Skin;
import com.alternativagame.type.RGB;
import com.alternativagame.type.Vector;
use namespace engine3d;
public class Direct3D extends Light3D {
use namespace engine3d;
// Текущая нормаль освещения в пространстве камеры
engine3d var canvasVector:Vector;
public function Direct3D(color:RGB = null, material:HelperMaterial = null) {
super(color, material);
}
// Обновиться после трансформации
override protected function updateTransform():void {
super.updateTransform();
// Сохраняем нормаль
canvasVector = new Vector(transform.b, transform.f, transform.j);
Math3D.normalize(canvasVector);
}
override protected function createSkin():Skin {
return new DirectSkin(this);
}
// Освещение в заданной точке
override engine3d function getLightColor(coords:Vector, normal:Vector):RGB {
return calculateLightColor(normal, canvasVector);
}
// Клон
override public function clone():Object3D {
var res:Direct3D = new Direct3D();
cloneParams(res);
return res;
}
}
}