code: void setPerspShadowMatrix(Matrix4f modelMtx, GVRLight light)
      {
          GVRPerspectiveCamera camera = (GVRPerspectiveCamera) getCamera();
  
          if (camera == null)
          {
              return;
          }
          float angle = light.getFloat("outer_cone_angle");
          float near = camera.getNearClippingDistance();
          float far = camera.getFarClippingDistance();
  
          angle = (float) Math.acos(angle) * 2.0f;
          modelMtx.invert();
          modelMtx.get(mTempMtx);
          camera.setViewMatrix(mTempMtx);
          camera.setFovY((float) Math.toDegrees(angle));
          mShadowMatrix.setPerspective(angle, 1.0f, near, far);
          mShadowMatrix.mul(modelMtx);
          sBiasMatrix.mul(mShadowMatrix, mShadowMatrix);
          mShadowMatrix.getColumn(0, mTemp);
          light.setVec4("sm0", mTemp.x, mTemp.y, mTemp.z, mTemp.w);
          mShadowMatrix.getColumn(1, mTemp);
          light.setVec4("sm1", mTemp.x, mTemp.y, mTemp.z, mTemp.w);
          mShadowMatrix.getColumn(2, mTemp);
          light.setVec4("sm2", mTemp.x, mTemp.y, mTemp.z, mTemp.w);
          mShadowMatrix.getColumn(3, mTemp);
          light.setVec4("sm3", mTemp.x, mTemp.y, mTemp.z, mTemp.w);
      }
docs: Sets the shadow matrix for the spot light from the input model/view
  matrix and the shadow camera projection matrix.
  @param modelMtx  light model transform (to world coordinates)
  @param light     spot light component to update