/src/away3d/core/traverse/ShadowCasterCollector.as

http://github.com/away3d/away3d-core-fp11 · ActionScript · 79 lines · 55 code · 9 blank · 15 comment · 2 complexity · ee5833fa54ca001a4487c03d1622e8bd MD5 · raw file

  1. package away3d.core.traverse
  2. {
  3. import away3d.arcane;
  4. import away3d.core.base.IRenderable;
  5. import away3d.core.data.RenderableListItem;
  6. import away3d.entities.Entity;
  7. import away3d.lights.DirectionalLight;
  8. import away3d.lights.LightBase;
  9. import away3d.lights.LightProbe;
  10. import away3d.lights.PointLight;
  11. import away3d.materials.MaterialBase;
  12. import flash.geom.Vector3D;
  13. use namespace arcane;
  14. /**
  15. * The EntityCollector class is a traverser for scene partitions that collects all scene graph entities that are
  16. * considered potientially visible.
  17. *
  18. * @see away3d.partition.Partition3D
  19. * @see away3d.partition.Entity
  20. */
  21. public class ShadowCasterCollector extends EntityCollector
  22. {
  23. /**
  24. * Creates a new EntityCollector object.
  25. */
  26. public function ShadowCasterCollector()
  27. {
  28. super();
  29. }
  30. /**
  31. * Adds an IRenderable object to the potentially visible objects.
  32. * @param renderable The IRenderable object to add.
  33. */
  34. override public function applyRenderable(renderable:IRenderable):void
  35. {
  36. // the test for material is temporary, you SHOULD be hammered with errors if you try to render anything without a material
  37. var material:MaterialBase = renderable.material;
  38. var entity:Entity = renderable.sourceEntity;
  39. if (renderable.castsShadows && material) {
  40. var item:RenderableListItem = _renderableListItemPool.getItem();
  41. item.renderable = renderable;
  42. item.next = _opaqueRenderableHead;
  43. item.cascaded = false;
  44. var entityScenePos:Vector3D = entity.scenePosition;
  45. var dx:Number = _entryPoint.x - entityScenePos.x;
  46. var dy:Number = _entryPoint.y - entityScenePos.y;
  47. var dz:Number = _entryPoint.z - entityScenePos.z;
  48. item.zIndex = dx*_cameraForward.x + dy*_cameraForward.y + dz*_cameraForward.z;
  49. item.renderSceneTransform = renderable.getRenderSceneTransform(_camera);
  50. item.renderOrderId = material._depthPassId;
  51. _opaqueRenderableHead = item;
  52. }
  53. }
  54. override public function applyUnknownLight(light:LightBase):void
  55. {
  56. }
  57. override public function applyDirectionalLight(light:DirectionalLight):void
  58. {
  59. }
  60. override public function applyPointLight(light:PointLight):void
  61. {
  62. }
  63. override public function applyLightProbe(light:LightProbe):void
  64. {
  65. }
  66. override public function applySkyBox(renderable:IRenderable):void
  67. {
  68. }
  69. }
  70. }