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]); > }
