Alright, here is an ugly patch for you. I'll try to get a proper fix as soon
as possible.
Results look like this:
http://www.lidev.com.ar/demos/away3d/dirlights_pfix1/
On the mean time, replace these methods in DirectionalLight.as:
public function setDiffuseTransform(source:Object3D):void
{
if (!diffuseTransform[source])
diffuseTransform[source] = new MatrixAway3D();
// UGLY PATCH BY Li (REVIEW!!)
-----------------------------------
direction.x = _light.x - source.scenePosition.x;
direction.y = _light.y - source.scenePosition.y;
direction.z = _light.z - source.scenePosition.z;
direction.normalize();
nx = direction.x;
ny = direction.y;
mod = Math.sqrt(nx*nx + ny*ny);
transform.rotationMatrix(ny/mod, -nx/mod, 0,
-Math.acos(-direction.z));
//clearTransform();
//
---------------------------------------------------------------
diffuseTransform[source].multiply3x3(transform,
source.sceneTransform);
diffuseTransform[source].normalize(diffuseTransform[source]);
}
public function setSpecularTransform(source:Object3D, view:View3D):void
{
//find halfway matrix between camera and direction matricies
cameraTransform = view.camera.transform;
cameraDirection.x = -cameraTransform.sxz;
cameraDirection.y = -cameraTransform.syz;
cameraDirection.z = -cameraTransform.szz;
// UGLY PATCH BY Li (REVIEW!!)
-----------------------------------
var applDirection:Number3D = new Number3D(_light.x -
source.scenePosition.x,
_light.y -
source.scenePosition.y,
_light.z -
source.scenePosition.z);
applDirection.normalize();
//
---------------------------------------------------------------
halfVector.add(cameraDirection, applDirection);
halfVector.normalize();
nx = halfVector.x;
ny = halfVector.y;
mod = Math.sqrt(nx*nx + ny*ny);
halfTransform.rotationMatrix(-ny/mod, nx/mod, 0,
Math.acos(-halfVector.z));
if(!specularTransform[source][view])
specularTransform[source][view] = new MatrixAway3D();
specularTransform[source][view].multiply4x4(halfTransform,
source.sceneTransform);
specularTransform[source][view].normalize(specularTransform[source][view]);
}