home *** CD-ROM | disk | FTP | other *** search
/ Computer Active 2010 August / CA08.iso / Multimedija / shufflr.air / ShufflrClient.swf / scripts / org / papervision3d / materials / utils / LightMatrix.as next >
Encoding:
Text File  |  2010-06-23  |  3.4 KB  |  95 lines

  1. package org.papervision3d.materials.utils
  2. {
  3.    import org.papervision3d.Papervision3D;
  4.    import org.papervision3d.core.math.Matrix3D;
  5.    import org.papervision3d.core.math.Number3D;
  6.    import org.papervision3d.core.proto.LightObject3D;
  7.    import org.papervision3d.core.render.data.RenderSessionData;
  8.    import org.papervision3d.lights.PointLight3D;
  9.    import org.papervision3d.objects.DisplayObject3D;
  10.    
  11.    public class LightMatrix
  12.    {
  13.       private static var lightMatrix:Matrix3D = Matrix3D.IDENTITY;
  14.       
  15.       private static var invMatrix:Matrix3D = Matrix3D.IDENTITY;
  16.       
  17.       private static var _targetPos:Number3D = new Number3D();
  18.       
  19.       private static var _lightPos:Number3D = new Number3D();
  20.       
  21.       private static var _lightDir:Number3D = new Number3D();
  22.       
  23.       private static var _lightUp:Number3D = new Number3D();
  24.       
  25.       private static var _lightSide:Number3D = new Number3D();
  26.       
  27.       protected static var UP:Number3D = new Number3D(0,1,0);
  28.       
  29.       public function LightMatrix()
  30.       {
  31.          super();
  32.       }
  33.       
  34.       public static function getLightMatrix(param1:LightObject3D, param2:DisplayObject3D, param3:RenderSessionData, param4:Matrix3D) : Matrix3D
  35.       {
  36.          var _loc6_:Matrix3D = null;
  37.          var _loc7_:Matrix3D = null;
  38.          var _loc5_:Matrix3D = !!param4 ? param4 : Matrix3D.IDENTITY;
  39.          if(param1 == null)
  40.          {
  41.             param1 = new PointLight3D();
  42.             param1.copyPosition(param3.camera);
  43.          }
  44.          _targetPos.reset();
  45.          _lightPos.reset();
  46.          _lightDir.reset();
  47.          _lightUp.reset();
  48.          _lightSide.reset();
  49.          if(!param2)
  50.          {
  51.             return _loc5_;
  52.          }
  53.          _loc6_ = param1.transform;
  54.          _loc7_ = param2.world;
  55.          _lightPos.x = -_loc6_.n14;
  56.          _lightPos.y = -_loc6_.n24;
  57.          _lightPos.z = -_loc6_.n34;
  58.          _targetPos.x = -_loc7_.n14;
  59.          _targetPos.y = -_loc7_.n24;
  60.          _targetPos.z = -_loc7_.n34;
  61.          _lightDir.x = _targetPos.x - _lightPos.x;
  62.          _lightDir.y = _targetPos.y - _lightPos.y;
  63.          _lightDir.z = _targetPos.z - _lightPos.z;
  64.          invMatrix.calculateInverse(param2.world);
  65.          Matrix3D.multiplyVector3x3(invMatrix,_lightDir);
  66.          _lightDir.normalize();
  67.          _lightSide.x = _lightDir.y * UP.z - _lightDir.z * UP.y;
  68.          _lightSide.y = _lightDir.z * UP.x - _lightDir.x * UP.z;
  69.          _lightSide.z = _lightDir.x * UP.y - _lightDir.y * UP.x;
  70.          _lightSide.normalize();
  71.          _lightUp.x = _lightSide.y * _lightDir.z - _lightSide.z * _lightDir.y;
  72.          _lightUp.y = _lightSide.z * _lightDir.x - _lightSide.x * _lightDir.z;
  73.          _lightUp.z = _lightSide.x * _lightDir.y - _lightSide.y * _lightDir.x;
  74.          _lightUp.normalize();
  75.          if(Papervision3D.useRIGHTHANDED || param2.flipLightDirection)
  76.          {
  77.             _lightDir.x = -_lightDir.x;
  78.             _lightDir.y = -_lightDir.y;
  79.             _lightDir.z = -_lightDir.z;
  80.          }
  81.          _loc5_.n11 = _lightSide.x;
  82.          _loc5_.n12 = _lightSide.y;
  83.          _loc5_.n13 = _lightSide.z;
  84.          _loc5_.n21 = _lightUp.x;
  85.          _loc5_.n22 = _lightUp.y;
  86.          _loc5_.n23 = _lightUp.z;
  87.          _loc5_.n31 = _lightDir.x;
  88.          _loc5_.n32 = _lightDir.y;
  89.          _loc5_.n33 = _lightDir.z;
  90.          return _loc5_;
  91.       }
  92.    }
  93. }
  94.  
  95.