scenejs_on_rails 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (117) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +5 -5
  3. data/app/controllers/scenejs_controller.rb +53 -0
  4. data/app/views/scenejs/get_scenejs_data.html.erb +3 -0
  5. data/lib/scenejs_on_rails.rb +1 -1
  6. data/lib/scenejs_on_rails/rails.rb +5 -0
  7. data/lib/scenejs_on_rails/version.rb +1 -1
  8. data/vendor/assets/javascripts/scenejs.js +17307 -0
  9. data/vendor/assets/javascripts/scenejs_extras/gui.js +478 -0
  10. data/vendor/assets/javascripts/scenejs_extras/gui/README.md +4 -0
  11. data/vendor/assets/javascripts/scenejs_extras/gui/dat.gui.min.js +94 -0
  12. data/vendor/assets/javascripts/scenejs_extras/gui/gui.js +385 -0
  13. data/vendor/assets/javascripts/scenejs_lib/cityBuilder.js +457 -0
  14. data/vendor/assets/javascripts/scenejs_lib/dat.gui.min.js +94 -0
  15. data/vendor/assets/javascripts/scenejs_lib/gl-matrix-min.js +28 -0
  16. data/vendor/assets/javascripts/scenejs_lib/gl-matrix.js +4078 -0
  17. data/vendor/assets/javascripts/scenejs_lib/require.js +36 -0
  18. data/vendor/assets/javascripts/scenejs_lib/requireConfig.js +18 -0
  19. data/vendor/assets/javascripts/scenejs_lib/requireWrapperEnd.js +1 -0
  20. data/vendor/assets/javascripts/scenejs_lib/requireWrapperStart.js +2 -0
  21. data/vendor/assets/javascripts/scenejs_lib/stats.min.js +6 -0
  22. data/vendor/assets/javascripts/scenejs_lib/sylvester.js +1 -0
  23. data/vendor/assets/javascripts/scenejs_lib/webgl-debug-utils.js +839 -0
  24. data/vendor/assets/javascripts/scenejs_plugins/geometry/boundary.js +59 -0
  25. data/vendor/assets/javascripts/scenejs_plugins/geometry/box.js +72 -0
  26. data/vendor/assets/javascripts/scenejs_plugins/geometry/plane.js +126 -0
  27. data/vendor/assets/javascripts/scenejs_plugins/geometry/quad.js +37 -0
  28. data/vendor/assets/javascripts/scenejs_plugins/geometry/skybox.js +86 -0
  29. data/vendor/assets/javascripts/scenejs_plugins/geometry/sphere.js +82 -0
  30. data/vendor/assets/javascripts/scenejs_plugins/geometry/teapot.js +5853 -0
  31. data/vendor/assets/javascripts/scenejs_plugins/geometry/torus.js +139 -0
  32. data/vendor/assets/javascripts/scenejs_plugins/geometry/vectorText.js +1499 -0
  33. data/vendor/assets/javascripts/scenejs_plugins/geometry/wobblyBox.js +44 -0
  34. data/vendor/assets/javascripts/scenejs_plugins/lib/canvas2image.js +198 -0
  35. data/vendor/assets/javascripts/scenejs_plugins/lib/frustum/frustumCullEngine.js +810 -0
  36. data/vendor/assets/javascripts/scenejs_plugins/lib/frustum/frustumCullSystem.js +185 -0
  37. data/vendor/assets/javascripts/scenejs_plugins/lib/frustum/frustumCullSystemPool.js +174 -0
  38. data/vendor/assets/javascripts/scenejs_plugins/lib/frustum/frustumCullWorker.js +142 -0
  39. data/vendor/assets/javascripts/scenejs_plugins/lib/gl-matrix-min.js +28 -0
  40. data/vendor/assets/javascripts/scenejs_plugins/lib/jquery-1.8.3.min.js +2 -0
  41. data/vendor/assets/javascripts/scenejs_plugins/lib/k3d.js +1029 -0
  42. data/vendor/assets/javascripts/scenejs_plugins/lib/physics/jiglib.all.min.js +3 -0
  43. data/vendor/assets/javascripts/scenejs_plugins/lib/physics/physics.js +223 -0
  44. data/vendor/assets/javascripts/scenejs_plugins/lib/physics/worker.js +330 -0
  45. data/vendor/assets/javascripts/scenejs_plugins/node/alpha/orbitTracking.js +295 -0
  46. data/vendor/assets/javascripts/scenejs_plugins/node/alpha/orbitTrackingTarget.js +43 -0
  47. data/vendor/assets/javascripts/scenejs_plugins/node/backgrounds/gradient.js +148 -0
  48. data/vendor/assets/javascripts/scenejs_plugins/node/cameras/orbit.js +172 -0
  49. data/vendor/assets/javascripts/scenejs_plugins/node/cameras/pickFlyOrbit.js +409 -0
  50. data/vendor/assets/javascripts/scenejs_plugins/node/canvas/capture.js +107 -0
  51. data/vendor/assets/javascripts/scenejs_plugins/node/demos/color.js +30 -0
  52. data/vendor/assets/javascripts/scenejs_plugins/node/demos/redTeapot.js +52 -0
  53. data/vendor/assets/javascripts/scenejs_plugins/node/demos/spinningTeapot.js +43 -0
  54. data/vendor/assets/javascripts/scenejs_plugins/node/effects/crt.js +36 -0
  55. data/vendor/assets/javascripts/scenejs_plugins/node/effects/fog.js +159 -0
  56. data/vendor/assets/javascripts/scenejs_plugins/node/effects/snowyPeaks.js +50 -0
  57. data/vendor/assets/javascripts/scenejs_plugins/node/effects/wobble.js +42 -0
  58. data/vendor/assets/javascripts/scenejs_plugins/node/effects/xray.js +126 -0
  59. data/vendor/assets/javascripts/scenejs_plugins/node/frustum/body.js +112 -0
  60. data/vendor/assets/javascripts/scenejs_plugins/node/frustum/cull.js +42 -0
  61. data/vendor/assets/javascripts/scenejs_plugins/node/frustum/lod.js +125 -0
  62. data/vendor/assets/javascripts/scenejs_plugins/node/heightmaps/custom.js +185 -0
  63. data/vendor/assets/javascripts/scenejs_plugins/node/import/3ds.js +91 -0
  64. data/vendor/assets/javascripts/scenejs_plugins/node/import/md2.js +139 -0
  65. data/vendor/assets/javascripts/scenejs_plugins/node/import/obj.js +100 -0
  66. data/vendor/assets/javascripts/scenejs_plugins/node/objects/buildings/building.js +352 -0
  67. data/vendor/assets/javascripts/scenejs_plugins/node/objects/buildings/building/HighRiseGlass.jpg +0 -0
  68. data/vendor/assets/javascripts/scenejs_plugins/node/objects/buildings/building/HighRiseGlassSpecular.jpg +0 -0
  69. data/vendor/assets/javascripts/scenejs_plugins/node/objects/buildings/building/highrise-windows.jpg +0 -0
  70. data/vendor/assets/javascripts/scenejs_plugins/node/objects/buildings/building/pixelcity_windows7.jpg +0 -0
  71. data/vendor/assets/javascripts/scenejs_plugins/node/objects/buildings/city.js +26 -0
  72. data/vendor/assets/javascripts/scenejs_plugins/node/objects/plants/ghostTree.js +387 -0
  73. data/vendor/assets/javascripts/scenejs_plugins/node/objects/space/planets/earth.js +168 -0
  74. data/vendor/assets/javascripts/scenejs_plugins/node/objects/space/planets/earth/earth-lights.gif +0 -0
  75. data/vendor/assets/javascripts/scenejs_plugins/node/objects/space/planets/earth/earth-specular.gif +0 -0
  76. data/vendor/assets/javascripts/scenejs_plugins/node/objects/space/planets/earth/earth-specular.jpg +0 -0
  77. data/vendor/assets/javascripts/scenejs_plugins/node/objects/space/planets/earth/earth.jpg +0 -0
  78. data/vendor/assets/javascripts/scenejs_plugins/node/objects/space/planets/earth/earthbump.jpg +0 -0
  79. data/vendor/assets/javascripts/scenejs_plugins/node/objects/space/planets/earth/earthclouds.jpg +0 -0
  80. data/vendor/assets/javascripts/scenejs_plugins/node/objects/toys/drinkingBird.js +632 -0
  81. data/vendor/assets/javascripts/scenejs_plugins/node/objects/vehicles/tank.js +77670 -0
  82. data/vendor/assets/javascripts/scenejs_plugins/node/objects/vehicles/tank.js~ +77636 -0
  83. data/vendor/assets/javascripts/scenejs_plugins/node/physics/body.js +85 -0
  84. data/vendor/assets/javascripts/scenejs_plugins/node/physics/box.js +30 -0
  85. data/vendor/assets/javascripts/scenejs_plugins/node/physics/material.js +35 -0
  86. data/vendor/assets/javascripts/scenejs_plugins/node/physics/plane.js +47 -0
  87. data/vendor/assets/javascripts/scenejs_plugins/node/physics/sphere.js +32 -0
  88. data/vendor/assets/javascripts/scenejs_plugins/node/physics/system.js +44 -0
  89. data/vendor/assets/javascripts/scenejs_plugins/node/physics/teapot.js +29 -0
  90. data/vendor/assets/javascripts/scenejs_plugins/node/prims/boundary.js +73 -0
  91. data/vendor/assets/javascripts/scenejs_plugins/node/prims/box.js +87 -0
  92. data/vendor/assets/javascripts/scenejs_plugins/node/prims/cylinder.js +186 -0
  93. data/vendor/assets/javascripts/scenejs_plugins/node/prims/grid.js +47 -0
  94. data/vendor/assets/javascripts/scenejs_plugins/node/prims/plane.js +137 -0
  95. data/vendor/assets/javascripts/scenejs_plugins/node/prims/quad.js +43 -0
  96. data/vendor/assets/javascripts/scenejs_plugins/node/prims/sphere.js +107 -0
  97. data/vendor/assets/javascripts/scenejs_plugins/node/prims/teapot.js +5846 -0
  98. data/vendor/assets/javascripts/scenejs_plugins/node/prims/torus.js +149 -0
  99. data/vendor/assets/javascripts/scenejs_plugins/node/prims/vectorText.js +1508 -0
  100. data/vendor/assets/javascripts/scenejs_plugins/node/skyboxes/clouds.js +19 -0
  101. data/vendor/assets/javascripts/scenejs_plugins/node/skyboxes/cloudySea.js +19 -0
  102. data/vendor/assets/javascripts/scenejs_plugins/node/skyboxes/custom.js +150 -0
  103. data/vendor/assets/javascripts/scenejs_plugins/node/skyboxes/grimmNight.js +19 -0
  104. data/vendor/assets/javascripts/scenejs_plugins/node/skyboxes/interstellarClouds.js +19 -0
  105. data/vendor/assets/javascripts/scenejs_plugins/node/skyboxes/miramarClouds.js +19 -0
  106. data/vendor/assets/javascripts/scenejs_plugins/node/skyboxes/stormyDays.js +19 -0
  107. data/vendor/assets/javascripts/scenejs_plugins/node/skyboxes/textures/clouds.jpg +0 -0
  108. data/vendor/assets/javascripts/scenejs_plugins/node/skyboxes/textures/cloudySea.jpg +0 -0
  109. data/vendor/assets/javascripts/scenejs_plugins/node/skyboxes/textures/grimmNight.jpg +0 -0
  110. data/vendor/assets/javascripts/scenejs_plugins/node/skyboxes/textures/interstellarClouds.jpg +0 -0
  111. data/vendor/assets/javascripts/scenejs_plugins/node/skyboxes/textures/miramarClouds.jpg +0 -0
  112. data/vendor/assets/javascripts/scenejs_plugins/node/skyboxes/textures/stormyDays.jpg +0 -0
  113. data/vendor/assets/javascripts/scenejs_plugins/node/skyboxes/textures/violentDays.jpg +0 -0
  114. data/vendor/assets/javascripts/scenejs_plugins/node/skyboxes/violentDays.js +19 -0
  115. data/vendor/assets/javascripts/scenejs_plugins/texture/image.js +67 -0
  116. data/vendor/assets/javascripts/scenejs_plugins/texture/video.js +105 -0
  117. metadata +113 -1
@@ -0,0 +1,42 @@
1
+ SceneJS.Types.addType("effects/wobble", {
2
+
3
+ construct:function (params) {
4
+
5
+ var shader = this.addNode({
6
+ type:"shader",
7
+ shaders:[
8
+ {
9
+ stage:"vertex",
10
+ code:"uniform float time;\n\
11
+ vec4 myWorldPosFunc(vec4 pos){\n\
12
+ pos.x=pos.x+sin(pos.x*5.0+time+10.0)*0.1;\n\
13
+ pos.y=pos.y+sin(pos.y*5.0+time+10.0)*0.1;\n\
14
+ pos.z=pos.z+sin(pos.z*5.0+time+10.0)*0.1;\n\
15
+ return pos;\n\
16
+ }\n",
17
+ hooks:{
18
+ worldPos:"myWorldPosFunc"
19
+ }
20
+ }
21
+ ],
22
+ params:{
23
+ time:0.5
24
+ },
25
+ nodes:params.nodes
26
+ });
27
+
28
+ var time = 0;
29
+
30
+ this._tick = this.getScene().on("tick",
31
+ function () {
32
+ shader.setParams({
33
+ time:time
34
+ });
35
+ time += 0.1;
36
+ });
37
+ },
38
+
39
+ destruct:function () {
40
+ this.getScene().off(this._tick);
41
+ }
42
+ });
@@ -0,0 +1,126 @@
1
+ SceneJS.Types.addType("effects/xray", {
2
+
3
+ construct:function (params) {
4
+
5
+ this._shader = this.addNode({
6
+ type:"shader",
7
+
8
+ shaders:[
9
+ {
10
+ "stage":"fragment",
11
+ "code":[
12
+ "uniform bool xrayEnabled;",
13
+ "uniform float xrayOpacity;",
14
+ "uniform bool xrayMonochrome;",
15
+
16
+ "vec3 myworldNormal = vec3(0.0, 0.0, 1.0);",
17
+ "vec3 myworldEyeVec = vec3(0.0, 0.0, -1.0);",
18
+
19
+ "void myWorldNormalFunc(vec3 vec) {",
20
+ " myworldNormal = vec;",
21
+ "}",
22
+
23
+ "void myWorldEyeVecFunc(vec3 vec) {",
24
+ " myworldEyeVec = vec;",
25
+ "}",
26
+
27
+ "vec4 myPixelColorFunc(vec4 color) {",
28
+ " if (xrayEnabled && xrayOpacity < 1.0) {",
29
+ " if (xrayMonochrome) {",
30
+ " color = vec4(0.2, 0.2, 0.3, (xrayOpacity + 0.9 - abs(dot(myworldNormal, myworldEyeVec))));",
31
+ " } else {",
32
+ " color.a = (xrayOpacity + 0.9 - abs(dot(myworldNormal, myworldEyeVec)));",
33
+ " }",
34
+ " }",
35
+ " return color;",
36
+ "}"
37
+ ],
38
+
39
+ hooks:{
40
+ worldNormal:"myWorldNormalFunc",
41
+ worldEyeVec:"myWorldEyeVecFunc",
42
+ pixelColor:"myPixelColorFunc"
43
+ }
44
+ }
45
+ ],
46
+ params:{
47
+ xrayEnabled:true,
48
+ xrayOpacity:0.4,
49
+ xrayMonochrome:false
50
+ }
51
+ });
52
+
53
+ // Enable transparency with a flag
54
+ this._flags = this._shader.addNode({
55
+ type:"flags",
56
+ flags:{
57
+ transparent:true,
58
+ backfaces:false
59
+ },
60
+
61
+ // Child nodes that will receive the x-ray effect
62
+ nodes:params.nodes
63
+ });
64
+
65
+ this.setEnabled(params.enabled != undefined ? params.enabled : true);
66
+ this.setOpacity(params.opacity != undefined ? params.opacity : 0.4);
67
+ this.setMonochrome(params.monochrome != undefined ? params.monochrome : false);
68
+ },
69
+
70
+ /**
71
+ * Enables or disables the X-Ray effect
72
+ * @param {Boolean} enabled
73
+ */
74
+ setEnabled:function (enabled) {
75
+ this._enabled = enabled;
76
+ this._shader.setParams({ xrayEnabled:enabled });
77
+ this._flags.setTransparent(enabled);
78
+ },
79
+
80
+ /**
81
+ * Gets whether the X-Ray effect is enabled or not
82
+ * @return {Boolean}
83
+ */
84
+ getEnabled:function () {
85
+ return !!this._enabled;
86
+ },
87
+
88
+ /**
89
+ * Sets the degree of opacity for X-Ray effect, with 0 being fully transparent and 1 being fully opaque
90
+ * @param {Number} opacity
91
+ */
92
+ setOpacity:function (opacity) {
93
+ this._opacity = opacity;
94
+ this._shader.setParams({ xrayOpacity:opacity });
95
+ },
96
+
97
+ /**
98
+ * Gets the degree of opacity
99
+ * @return {Number}
100
+ */
101
+ getOpacity:function () {
102
+ return this._opacity;
103
+ },
104
+
105
+ /**
106
+ * Sets whether the X-Ray effect is monochrome or not
107
+ * @param {Boolean} monochrome
108
+ */
109
+ setMonochrome:function (monochrome) {
110
+ this._monochrome = monochrome;
111
+ this._shader.setParams({ xrayMonochrome:monochrome });
112
+ },
113
+
114
+ /**
115
+ * Gets whether the X-Ray effect is monochrome or not
116
+ * @return {Boolean}
117
+ */
118
+ getMonochrome:function () {
119
+ return !!this._monochrome;
120
+ },
121
+
122
+ destruct:function () {
123
+ // Not used
124
+ }
125
+ })
126
+ ;
@@ -0,0 +1,112 @@
1
+ require([
2
+ // Prefix routes to plugin support libs
3
+ "scenejsPluginDeps/frustum/frustumCullSystemPool"
4
+ ],
5
+ function (pool) {
6
+
7
+ SceneJS.Types.addType("frustum/body", {
8
+
9
+ construct:function (params) {
10
+
11
+ // Frustum culling and projected canvas size enabled by default
12
+ this._frustumCull = params.frustumCull != undefined ? params.frustumCull : true;
13
+ this._detailCull = params.detailCull != undefined ? params.detailCull : true;
14
+
15
+ var shape = params.shape || "box";
16
+
17
+ switch (shape) {
18
+ case "box":
19
+ this._bodyCfg = {
20
+ shape:shape,
21
+ min:params.min || [0, 0, 0],
22
+ max:params.max || [0, 0, 0],
23
+ frustumCull:this._frustumCull,
24
+ detailCull:this._detailCull
25
+ };
26
+ if (params.showBoundary) {
27
+ this.addNode({
28
+ type:"prims/boundary",
29
+ min:params.min || [0, 0, 0],
30
+ max:params.max || [0, 0, 0],
31
+ wire:true
32
+ });
33
+ }
34
+ break;
35
+
36
+ // case "sphere":
37
+ // this._bodyCfg = {
38
+ // shape:"sphere",
39
+ // center:params.center || [0, 0, 0],
40
+ // radius:params.radius || 1.0
41
+ // };
42
+ // break;
43
+
44
+ default:
45
+ this.log("error", "Unsupported value for attribute 'shape'");
46
+ }
47
+
48
+ if (params.nodes) {
49
+ this.addNodes(params.nodes);
50
+ }
51
+ },
52
+
53
+ preCompile:function () {
54
+
55
+ // This node might have been relocated in the scene graph
56
+ // and therefore inherits new view and projection transforms,
57
+ // so we'll release any existing system just in case.
58
+
59
+ this._putBody();
60
+ this._getBody();
61
+ },
62
+
63
+ _putBody:function () {
64
+ if (this._bodyId) {
65
+ this._system.removeBody(this._bodyId);
66
+ this._bodyId = null;
67
+ }
68
+ if (this._system) {
69
+ pool.putSystem(this._system);
70
+ this._system = null;
71
+ }
72
+ },
73
+
74
+ _getBody:function () {
75
+ try {
76
+ this._system = pool.getSystem(this);
77
+ var self = this;
78
+ this._bodyId = this._system.createBody(this._bodyCfg,
79
+ function (intersect, canvasSize) { // Body update handler
80
+
81
+ // Not that much overhead in relaying status
82
+ // updates via pub/sub because they only happen sparsely,
83
+ // ie. for bodies whose status actually changes
84
+
85
+ if (self._frustumCull) { // Frustum culling switching enabled
86
+ self.publish("intersect", intersect);
87
+ }
88
+
89
+ if (self._detailCull) { // LOD switching enabled
90
+ self.publish("canvasSize", canvasSize);
91
+ }
92
+
93
+ // self.log(" intersect = " + intersect + ", canvasSize = " + canvasSize);
94
+ });
95
+ } catch (e) {
96
+ this.log("Error : " + e);
97
+ if (this._system) {
98
+ pool.putSystem(this._system);
99
+ this._system = null;
100
+ }
101
+ }
102
+ },
103
+
104
+ postCompile:function () {
105
+ // Not used
106
+ },
107
+
108
+ destruct:function () {
109
+ this._putBody();
110
+ }
111
+ });
112
+ });
@@ -0,0 +1,42 @@
1
+ SceneJS.Types.addType("frustum/cull", {
2
+
3
+ construct:function (params) {
4
+
5
+ var self = this;
6
+
7
+ this.addNode({
8
+ type:"frustum/body",
9
+ shape:params.shape,
10
+ min:params.min,
11
+ max:params.max,
12
+ showBoundary:params.showBoundary,
13
+ frustumCull: params.frustumCull ? params.frustumCull : true, // Enable frustum culling?
14
+ detailCull: false // Don't need LOD switching
15
+ },
16
+ function (body) {
17
+ if (params.nodes) {
18
+ self.addNode({
19
+ type:"enable",
20
+ enabled:false,
21
+ nodes:params.nodes
22
+ },
23
+ function (enable) {
24
+ body.on("intersect",
25
+ function (intersect) {
26
+ switch (intersect) {
27
+ case 0: // Completely outside frustum
28
+ enable.setEnabled(false);
29
+ break;
30
+ case 1: // Partially inside frustum
31
+ enable.setEnabled(true);
32
+ break;
33
+ case 2: // Completely inside frustum
34
+ enable.setEnabled(true);
35
+ break;
36
+ }
37
+ });
38
+ });
39
+ }
40
+ });
41
+ }
42
+ });
@@ -0,0 +1,125 @@
1
+ SceneJS.Types.addType("frustum/lod", {
2
+
3
+ construct:function (params) {
4
+
5
+ var self = this;
6
+
7
+ var sizes = params.sizes;
8
+ if (!sizes) {
9
+ this.log("error", "mandatory attribute missing: 'sizes'");
10
+ return;
11
+ }
12
+
13
+ var nodes = params.nodes;
14
+ if (!nodes) {
15
+ this.log("error", "mandatory attribute missing: 'nodes'");
16
+ return;
17
+ }
18
+
19
+ if (sizes.length != nodes.length) {
20
+ this.log("error", "invalid attribute(s): 'sizes' and 'nodes' should be arrays of equal length");
21
+ return;
22
+ }
23
+
24
+ for (var i = 0, len = sizes.length; i < len; i++) {
25
+ if (sizes[i] <= 0) {
26
+ this.log("error", "invalid attribute: values in 'sizes' should be greater than zero");
27
+ return;
28
+ }
29
+ if (i > 0) {
30
+ if (sizes[i] <= sizes[i - 1]) {
31
+ this.log("error", "invalid attribute: values in 'sizes' should be in ascending order");
32
+ return;
33
+ }
34
+ }
35
+ }
36
+
37
+ this.addNode({
38
+ type:"frustum/body",
39
+ shape:params.shape,
40
+ min:params.min,
41
+ max:params.max,
42
+ showBoundary:params.showBoundary,
43
+ frustumCull: params.frustumCull ? params.frustumCull : true, // Enable frustum culling?
44
+ detailCull:true // Enable detail culling information (default)
45
+ },
46
+ function (body) {
47
+ if (params.nodes) {
48
+ var childNodes = [];
49
+ for (var i = 0, len = params.nodes.length; i < len; i++) {
50
+ childNodes.push(self.addNode({
51
+ type:"enable",
52
+ enabled:false,
53
+ nodes:[
54
+ params.nodes[i]
55
+ ]
56
+ }));
57
+ }
58
+
59
+ // The currently active child node
60
+ var currentNode;
61
+
62
+ // If frustum culling is not disabled by
63
+ // params.frustumCull, then we'll get notification
64
+ // whenever the boundaries intersection status
65
+ // changes with respect to the view frustum.
66
+
67
+ body.on("intersect",
68
+ function (intersect) {
69
+ if (currentNode) {
70
+ switch (intersect) {
71
+ case 0: // Completely outside frustum
72
+ currentNode.setEnabled(false);
73
+ break;
74
+ case 1: // Partially inside frustum
75
+ currentNode.setEnabled(true);
76
+ break;
77
+ case 2: // Completely inside frustum
78
+ currentNode.setEnabled(true);
79
+ break;
80
+ }
81
+ }
82
+ });
83
+
84
+ // If frustum culling is not disabled by params.frustumCull,
85
+ // then we'll get notifications of change in projected canvas
86
+ // size for the boundary as long as the "intersect" notification
87
+ // reported that the boundary is not outside the view frustum.
88
+
89
+ // If frustum culling is disabled. then we'll get
90
+ // notification of canvas size changes regardless of
91
+ // whether the boundary is outside the frustum of not.
92
+
93
+ body.on("canvasSize",
94
+ function (canvasSize) {
95
+
96
+ if (currentNode) {
97
+
98
+ // We only get a 2d size update when the size has changed,
99
+ // so its safe to say we'll not be immediately re-enabling
100
+ // the currently enabled child node. No need to avoid
101
+ // any redundant re-enabling or disabling here.
102
+
103
+ currentNode.setEnabled(false);
104
+ }
105
+ //
106
+ if (canvasSize == -1) {
107
+ // All Culled
108
+ return;
109
+ }
110
+
111
+ // Enable the appropriate child, if any,
112
+ // for the boundary's projected 2D size
113
+
114
+ for (var i = sizes.length - 1; i >= 0; i--) {
115
+ if (canvasSize >= sizes[i]) {
116
+ currentNode = childNodes[i];
117
+ currentNode.setEnabled(true);
118
+ return;
119
+ }
120
+ }
121
+ });
122
+ }
123
+ });
124
+ }
125
+ });