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,107 @@
1
+ /**
2
+ * Custom node which captures images of the scene canvas
3
+ *
4
+ * Usage example:
5
+ *
6
+ * someNode.addNode({
7
+ * type: "canvas/capture",
8
+ *
9
+ * // Optional image format, "jpeg" (default), "png" or "bmp"
10
+ * format: "jpeg",
11
+ *
12
+ * // Optional image result size, defaults to current size of canvas at time of capture
13
+ * width: 300,
14
+ * height: 400
15
+ * });
16
+ *
17
+ * scene.getNode("myCanvasCapture",
18
+ * function (myCanvasCapture) {
19
+ *
20
+ * // Subscribe to captured image
21
+ * myCanvasCapture.on("image",
22
+ * function (data) {
23
+ * var src = data.src; // Data URL
24
+ * var width = data.width; // Width of image
25
+ * var height = data.height; // Height of image
26
+ * });
27
+ *
28
+ * // Do capture
29
+ * myCanvasCapture.capture({
30
+ *
31
+ * // Optional dimensions of desired image, falls back on node config,
32
+ * // or if not specified there, the current size of canvas
33
+ * width: 500,
34
+ * height: 400,
35
+ *
36
+ * // Optional format - falls back on node config,
37
+ * // or if not specified there, "jpeg"
38
+ * format: "jpeg"
39
+ * });
40
+ */
41
+ require([
42
+
43
+ // This prefix routes to the 3rd-party libs directory containing resources used by plugins
44
+ "scenejsPluginDeps/canvas2image"
45
+ ],
46
+ function () {
47
+
48
+ SceneJS.Types.addType("canvas/capture", {
49
+
50
+ construct:function (params) {
51
+ this._format = params.format ? supportedFormat(params.format) : "jpeg";
52
+ this._width = params.width;
53
+ this._height = params.height;
54
+ },
55
+
56
+ capture:function (params) {
57
+
58
+ params = params || {};
59
+
60
+ var scene = this.getScene();
61
+ scene.renderFrame({ force:true }); // HACK - need to fix need for this in SceneJS
62
+ var canvas = scene.getCanvas();
63
+
64
+ var width = params.width || this._width || canvas.width;
65
+ var height = params.height || this._height || canvas.height;
66
+
67
+ var image;
68
+
69
+ var format = params.format ? this._supportedFormat(params.format) : this._format;
70
+
71
+ switch (format) {
72
+ case "jpeg":
73
+ image = Canvas2Image.saveAsJPEG(canvas, true, width, height);
74
+ break;
75
+
76
+ case "png":
77
+ image = Canvas2Image.saveAsPNG(canvas, true, width, height);
78
+ break;
79
+
80
+ case "bmp":
81
+ image = Canvas2Image.saveAsBMP(canvas, true, width, height);
82
+ break;
83
+
84
+ default:
85
+ this.log("error", "format unsupported: " + format);
86
+ return;
87
+ }
88
+
89
+ this.publish("image", {
90
+ src:image.src,
91
+ format:format,
92
+ width:width,
93
+ height:height
94
+ });
95
+ },
96
+
97
+ _supportedFormat:function (format) {
98
+ if (format != "jpeg" && format != "png" && format != "bmp") {
99
+ this.log("error", "unsupported format for canvas/capture node: " + format
100
+ + " - supported types are 'jpeg', 'bmp' and 'png' - falling back on 'jpeg'");
101
+ return "jpeg";
102
+ }
103
+ return format;
104
+ }
105
+ });
106
+
107
+ });
@@ -0,0 +1,30 @@
1
+ SceneJS.Types.addType("demos/color", {
2
+
3
+ construct:function (params) {
4
+
5
+ this._material = this.addNode({
6
+ type:"material",
7
+
8
+ // Custom node types are responsible for attaching any child nodes that
9
+ // are specified in their properties
10
+ nodes:params.nodes
11
+ });
12
+
13
+ // Set initial color, if provided
14
+ if (params.color) {
15
+ this.setColor(params.color);
16
+ }
17
+ },
18
+
19
+ setColor:function (color) {
20
+ this._material.setColor(color);
21
+ },
22
+
23
+ getColor:function () {
24
+ return this._material.getColor();
25
+ },
26
+
27
+ destruct:function () {
28
+ // Not used
29
+ }
30
+ });
@@ -0,0 +1,52 @@
1
+ /**
2
+ * A red teapot node type with attributes for position and size.
3
+ * Demonstrates how to expose settable attributes on a custom node type.
4
+ */
5
+ SceneJS.Types.addType("demos/redTeapot", {
6
+
7
+ construct:function (params) {
8
+
9
+ // Create child nodes
10
+
11
+ this._translate = this.addNode({
12
+ type:"translate"
13
+ });
14
+
15
+ this._scale = this._translate.addNode({
16
+ type:"scale",
17
+ x:1, y:1, z:1,
18
+ nodes:[
19
+ {
20
+ type:"material",
21
+ color:{ r:1.0, g:0.6, b:0.6 },
22
+ nodes:[
23
+ {
24
+ type:"geometry",
25
+ source:{
26
+ type:"teapot"
27
+ }
28
+ }
29
+ ]
30
+ }
31
+ ]
32
+ });
33
+
34
+ // Set initial position and size, if provided
35
+ if (params.pos) {
36
+ this.setPos(params.pos);
37
+ }
38
+ if (params.size) {
39
+ this.setSize(params.size);
40
+ }
41
+ },
42
+
43
+ // Sets position of teapot
44
+ setPos:function (pos) {
45
+ this._translate.setXYZ(pos);
46
+ },
47
+
48
+ // Sets size of teapot
49
+ setSize:function (size) {
50
+ this._scale.setXYZ(size);
51
+ }
52
+ });
@@ -0,0 +1,43 @@
1
+ /**
2
+ * A spinning teapot node type.
3
+ * Demonstrates how to hook the type into the scene animation loop for autonomous animation.
4
+ */
5
+ SceneJS.Types.addType("demos/spinningTeapot", {
6
+
7
+ construct:function (params) {
8
+
9
+ // Create child nodes
10
+ var rotate = this.addNode({
11
+ type:"rotate",
12
+ y:1,
13
+ angle:0,
14
+ nodes:[
15
+ {
16
+ type:"material",
17
+ color:{ r:0.6, g:1.0, b:0.6 },
18
+ nodes:[
19
+ {
20
+ type:"geometry",
21
+ source:{
22
+ type:"teapot"
23
+ }
24
+ }
25
+ ]
26
+ }
27
+ ]
28
+ });
29
+
30
+ // Spin the teapot within the scene animation loop
31
+ var angle = 0;
32
+ this._tick = this.getScene().on("tick",
33
+ function () {
34
+ rotate.setAngle(angle);
35
+ angle += 0.1;
36
+ });
37
+ },
38
+
39
+ // Node destructor, unsubscribes from scene tick
40
+ destruct:function () {
41
+ this.getScene().off(this._tick);
42
+ }
43
+ });
@@ -0,0 +1,36 @@
1
+ SceneJS.Types.addType("effects/crt", {
2
+
3
+ construct:function (params) {
4
+
5
+ this._shader = this.addNode({
6
+ type:"shader",
7
+
8
+ shaders:[
9
+
10
+ {
11
+ stage:"fragment",
12
+ code:"vec4 myPixelColorFunc(vec4 color) {\n\
13
+ float m = mod(gl_FragCoord.y, 4.0);\n\
14
+ if (m < 1.5) {\n\
15
+ color = vec4(0.0, 0.0, 0.0, 1.0);\n\
16
+ } else if (m < 2.0) {\n\
17
+ color = vec4(0.2, 0.2, 0.2, 1.0);\n\
18
+ } else if (m < 2.5) {\n\
19
+ color = vec4(0.2, 0.2, 0.2, 1.0);\n\
20
+ }\n\
21
+ return color;\n\
22
+ }",
23
+
24
+ hooks:{
25
+ pixelColor:"myPixelColorFunc"
26
+ }
27
+ }
28
+ ],
29
+ nodes:params.nodes
30
+ });
31
+ },
32
+
33
+ destruct:function () {
34
+ // Not used
35
+ }
36
+ });
@@ -0,0 +1,159 @@
1
+ SceneJS.Types.addType("effects/fog", {
2
+
3
+ construct:function (params) {
4
+
5
+ // Holds params for custom shader node
6
+ this._shaderParams = {
7
+ fogMode:1.0, // 0.0 disabled, 1.0 linear, 2.0 exponential, 3.0 quadratic, 4.0 constant
8
+ fogDensity:0.05, // Fog density in range of [0.0..1.0]
9
+ fogStart:0.0, // Nearest point of fog in view space (receeding Z-axis is positive)
10
+ fogEnd:10000.0, // Furthest point of fog in view space
11
+ fogColor:[0.6, 0.0, 0.0] // Colour of fog - the colour that objects blend into
12
+ };
13
+
14
+ // Custom shader node
15
+ this._shader = this.addNode({
16
+ type:"shader",
17
+ coreId:"effects/fog",
18
+
19
+ shaders:[
20
+
21
+ {
22
+ stage:"fragment",
23
+ code:[
24
+
25
+ /* Parameter uniforms
26
+ */
27
+ "uniform float fogMode;",
28
+ "uniform float fogDensity;",
29
+ "uniform float fogStart;",
30
+ "uniform float fogEnd;",
31
+ "uniform vec3 fogColor;",
32
+
33
+ /* Collected view-space fragment position
34
+ */
35
+ "vec4 _viewPos;",
36
+
37
+ /* Collects view-space fragment position
38
+ */
39
+ "void fogViewPosFunc(vec4 viewPos) {",
40
+ " _viewPos = viewPos;",
41
+ "}",
42
+
43
+ /* Modifies fragment colour
44
+ */
45
+ "vec4 fogPixelColorFunc(vec4 color) {",
46
+ " if (fogMode != 0.0) {", // not "disabled"
47
+ " float fogFactor = (1.0 - fogDensity);",
48
+ " if (fogMode != 4.0) {", // not "constant"
49
+ " if (fogMode == 1.0) {", // "linear"
50
+ " fogFactor *= clamp(pow(max((fogEnd - length(- _viewPos.xyz)) / " +
51
+ " (fogStart - fogEnd), 0.0), 2.0), 0.0, 1.0);",
52
+ " } else {", // "exp" or "exp2"
53
+ " fogFactor *= clamp((fogStart - length(- _viewPos.xyz)) / (fogStart - fogEnd), 0.0, 1.0);",
54
+ " }",
55
+ " }",
56
+ " return color * (fogFactor + vec4(fogColor, 1.0)) * (1.0 - fogFactor);",
57
+ " }",
58
+ " return color;",
59
+ "}"
60
+ ],
61
+
62
+ /* Bind our functions to hooks
63
+ */
64
+ hooks:{
65
+ viewPos:"fogViewPosFunc",
66
+ pixelColor:"fogPixelColorFunc"
67
+ }
68
+ }
69
+ ],
70
+
71
+ // Declare parameters and set default values
72
+ params:this._shaderParams,
73
+
74
+ nodes:params.nodes
75
+ });
76
+
77
+ if (params.mode != undefined) {
78
+ this.setMode(params.mode);
79
+ }
80
+ if (params.density != undefined) {
81
+ this.setDensity(params.density);
82
+ }
83
+ if (params.start != undefined) {
84
+ this.setStart(params.start);
85
+ }
86
+ if (params.end != undefined) {
87
+ this.setEnd(params.end);
88
+ }
89
+ if (params.color != undefined) {
90
+ this.setColor(params.color);
91
+ }
92
+ },
93
+
94
+ setMode:function (mode) {
95
+ switch (mode) {
96
+ case "disabled":
97
+ this._shaderParams.fogMode = 0;
98
+ break;
99
+ case "linear":
100
+ this._shaderParams.fogMode = 1;
101
+ break;
102
+ case "exp":
103
+ this._shaderParams.fogMode = 2;
104
+ break;
105
+ case "exp2":
106
+ this._shaderParams.fogMode = 3;
107
+ break;
108
+ case "constant":
109
+ this._shaderParams.fogMode = 4;
110
+ break;
111
+ }
112
+ this._shader.setParams(this._shaderParams);
113
+ },
114
+
115
+ getMode:function () {
116
+ return ["disabled", "linear", "exp", "exp2", "constant"][this._shaderParams.fogMode]; // TODO: optimize
117
+ },
118
+
119
+ setDensity:function (density) {
120
+ this._shaderParams.fogDensity = density;
121
+ this._shader.setParams(this._shaderParams);
122
+ },
123
+
124
+ getDensity:function () {
125
+ return this._shaderParams.fogDensity;
126
+ },
127
+
128
+ setStart:function (start) {
129
+ this._shaderParams.fogStart = start;
130
+ this._shader.setParams(this._shaderParams);
131
+ },
132
+
133
+ getStart:function () {
134
+ return this._shaderParams.fogStart;
135
+ },
136
+
137
+ setEnd:function (end) {
138
+ this._shaderParams.fogEnd = end;
139
+ this._shader.setParams(this._shaderParams);
140
+ },
141
+
142
+ getEnd:function () {
143
+ return this._shaderParams.fogEnd;
144
+ },
145
+
146
+ setColor:function (color) {
147
+ this._shaderParams.fogColor = [color.r || 0, color.g || 0, color.b || 0 ];
148
+ this._shader.setParams(this._shaderParams);
149
+ },
150
+
151
+ getColor:function () {
152
+ var color = this._shaderParams.fogColor;
153
+ return { r:color[0], g:color[1], b:color[2] };
154
+ },
155
+
156
+ destruct:function () {
157
+ // Not used
158
+ }
159
+ });
@@ -0,0 +1,50 @@
1
+ SceneJS.Types.addType("effects/snowyPeaks", {
2
+
3
+ construct:function (params) {
4
+
5
+ var altitude = params.altitude || 0;
6
+
7
+ this._shader = this.addNode({
8
+ type:"shader",
9
+ shaders:[
10
+ {
11
+ stage:"fragment",
12
+ code:[
13
+ "float posY = 0.0;",
14
+ "vec4 myWorldPosFunc(vec4 pos){",
15
+ " posY=pos.y;",
16
+ " return pos;",
17
+ "}",
18
+
19
+ "uniform float altitude;",
20
+ "vec3 myMaterialBaseColorFunc(vec3 color) {",
21
+ " if (posY > altitude) {",
22
+ " color = vec3(1.0, 1.0, 1.0);",
23
+ " }",
24
+ " return color;",
25
+ "}"
26
+ ],
27
+ hooks:{
28
+ materialBaseColor:"myMaterialBaseColorFunc",
29
+ worldPos:"myWorldPosFunc"
30
+ }
31
+ }
32
+ ],
33
+ params:{
34
+ altitude:altitude
35
+ },
36
+ nodes:params.nodes
37
+ });
38
+ },
39
+
40
+ setAltitude:function (altitude) {
41
+ this._shader.setParams({
42
+ altitude:altitude
43
+ });
44
+ },
45
+
46
+ destruct:function () {
47
+ // Not used
48
+ }
49
+ })
50
+ ;