you're the best !

On 20 oct, 09:10, Li <[email protected]> wrote:
> 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]);
>         }

Reply via email to