aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhwc4872012-04-10 10:12:49 -0700
committerhwc4872012-04-10 10:12:49 -0700
commitc1a6cacf364d79cbf23b41e7089a1a6d39afea85 (patch)
treec900a4f6063da1be1c7febb66ce8021def739ea1
parent5b878fdfaa696c1a01afa191c1d65c0ccb006b65 (diff)
downloadninja-c1a6cacf364d79cbf23b41e7089a1a6d39afea85.tar.gz
Cloud material
-rw-r--r--assets/shaders/Cloud.frag.glsl23
-rw-r--r--assets/shaders/Cloud.vert.glsl42
-rwxr-xr-xjs/lib/geom/rectangle.js30
-rw-r--r--js/lib/rdge/materials/cloud-material.js122
-rwxr-xr-xjs/models/materials-model.js3
5 files changed, 179 insertions, 41 deletions
diff --git a/assets/shaders/Cloud.frag.glsl b/assets/shaders/Cloud.frag.glsl
new file mode 100644
index 00000000..522e17bb
--- /dev/null
+++ b/assets/shaders/Cloud.frag.glsl
@@ -0,0 +1,23 @@
1/* <copyright>
2This file contains proprietary software owned by Motorola Mobility, Inc.<br/>
3No rights, expressed or implied, whatsoever to this software are provided by Motorola Mobility, Inc. hereunder.<br/>
4(c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved.
5</copyright> */
6
7
8#ifdef GL_ES
9precision highp float;
10#endif
11
12uniform sampler2D u_tex0;
13uniform float u_surfaceAlpha;
14
15varying vec4 v_Colors;
16varying vec2 v_texCoord0;
17
18
19void main()
20{
21 gl_FragColor = texture2D(u_tex0, v_texCoord0) * u_surfaceAlpha;
22}
23 \ No newline at end of file
diff --git a/assets/shaders/Cloud.vert.glsl b/assets/shaders/Cloud.vert.glsl
new file mode 100644
index 00000000..fbd7f40b
--- /dev/null
+++ b/assets/shaders/Cloud.vert.glsl
@@ -0,0 +1,42 @@
1/* <copyright>
2This file contains proprietary software owned by Motorola Mobility, Inc.<br/>
3No rights, expressed or implied, whatsoever to this software are provided by Motorola Mobility, Inc. hereunder.<br/>
4(c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved.
5</copyright> */
6
7
8#ifdef GL_ES
9precision highp float;
10#endif
11
12// attributes
13attribute vec3 a_pos;
14attribute vec2 texcoord;
15
16// uniforms
17uniform float u_time;
18uniform float u_zmin;
19uniform float u_zmax;
20uniform float u_surfaceAlpha;
21
22// matrix uniforms
23uniform mat4 u_mvMatrix;
24uniform mat4 u_projMatrix;
25uniform mat4 u_worldMatrix;
26
27// varying
28varying vec2 v_texCoord0;
29
30// constants
31const float zSpeed = 1.0;
32
33
34void main()
35{
36 // Transform position
37 vec4 pos = a_pos;
38 pos.z += u+time*zSpeed;
39 gl_Position = u_projMatrix * u_mvMatrix * pos;
40
41 v_texCoord0 = texcoord;
42} \ No newline at end of file
diff --git a/js/lib/geom/rectangle.js b/js/lib/geom/rectangle.js
index 51947ff1..f41c27f6 100755
--- a/js/lib/geom/rectangle.js
+++ b/js/lib/geom/rectangle.js
@@ -1280,11 +1280,41 @@ RectangleGeometry.pushIndices = RectangleFill.pushIndices;
1280RectangleGeometry.getVertex = RectangleFill.getVertex; 1280RectangleGeometry.getVertex = RectangleFill.getVertex;
1281RectangleGeometry.getUV = RectangleFill.getUV; 1281RectangleGeometry.getUV = RectangleFill.getUV;
1282 1282
1283RectangleGeometry.init = function()
1284{
1285 this.vertices = [];
1286 this.normals = [];
1287 this.uvs = [];
1288 this.indices = [];
1289}
1290
1291RectangleGeometry.addQuad = function( verts, normals, uvs )
1292{
1293 for (var i=0; i<4; i++)
1294 {
1295 RectangleGeometry.pushVertex( verts[i][0], verts[i][1], verts[i][2]);
1296 RectangleGeometry.pushNormal( normals[i] );
1297 RectangleGeometry.pushUV( uvs[i] );
1298 }
1299
1300 RectangleGeometry.pushIndices( 0, 1, 2 );
1301 RectangleGeometry.pushIndices( 2, 3, 0 );
1302}
1303
1304RectangleGeometry.buildPrimitive = function()
1305{
1306 var nVertices = this.vertices.length;
1307 return ShapePrimitive.create(this.vertices, this.normals, this.uvs, this.indices, g_Engine.getContext().renderer.TRIANGLES, nVertices);
1308}
1309
1310
1311
1283 1312
1284Rectangle.prototype = new GeomObj(); 1313Rectangle.prototype = new GeomObj();
1285 1314
1286if (typeof exports === "object") { 1315if (typeof exports === "object") {
1287 exports.Rectangle = Rectangle; 1316 exports.Rectangle = Rectangle;
1317 exports.RectangleGeometry = RectangleGeometry;
1288} 1318}
1289 1319
1290 1320
diff --git a/js/lib/rdge/materials/cloud-material.js b/js/lib/rdge/materials/cloud-material.js
index f7f4c6bb..198f7cfa 100644
--- a/js/lib/rdge/materials/cloud-material.js
+++ b/js/lib/rdge/materials/cloud-material.js
@@ -4,8 +4,11 @@
4 (c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved. 4 (c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved.
5 </copyright> */ 5 </copyright> */
6 6
7var MaterialParser = require("js/lib/rdge/materials/material-parser").MaterialParser; 7var MaterialParser = require("js/lib/rdge/materials/material-parser").MaterialParser;
8var Material = require("js/lib/rdge/materials/material").Material; 8var Material = require("js/lib/rdge/materials/material").Material;
9var GLWorld = require("js/lib/drawing/world").World;
10var Texture = require("js/lib/rdge/texture").Texture;
11
9/////////////////////////////////////////////////////////////////////// 12///////////////////////////////////////////////////////////////////////
10// Class GLMaterial 13// Class GLMaterial
11// RDGE representation of a material. 14// RDGE representation of a material.
@@ -20,9 +23,19 @@ var CloudMaterial = function CloudMaterial() {
20 this._texMap = 'assets/images/cloud2.jpg'; 23 this._texMap = 'assets/images/cloud2.jpg';
21 this._diffuseColor = [0.5, 0.5, 0.5, 0.5]; 24 this._diffuseColor = [0.5, 0.5, 0.5, 0.5];
22 25
26 // base size of cloud polygons. Random adjustments made to each quad
27 this._cloudSize = 40;
28
23 this._time = 0.0; 29 this._time = 0.0;
24 this._dTime = 0.01; 30 this._dTime = 0.01;
25 31
32 // parameter initial values
33 this._time = 0.0;
34 this._surfaceAlpha = 0.5;
35 this._zmin = 0.1;
36 this._zmax = 10.0;
37
38
26 /////////////////////////////////////////////////////////////////////// 39 ///////////////////////////////////////////////////////////////////////
27 // Property Accessors 40 // Property Accessors
28 /////////////////////////////////////////////////////////////////////// 41 ///////////////////////////////////////////////////////////////////////
@@ -32,9 +45,6 @@ var CloudMaterial = function CloudMaterial() {
32 this.getTextureMap = function() { return this._propValues[this._propNames[0]] ? this._propValues[this._propNames[0]].slice() : null }; 45 this.getTextureMap = function() { return this._propValues[this._propNames[0]] ? this._propValues[this._propNames[0]].slice() : null };
33 this.setTextureMap = function(m) { this._propValues[this._propNames[0]] = m ? m.slice(0) : null; this.updateTexture(); }; 46 this.setTextureMap = function(m) { this._propValues[this._propNames[0]] = m ? m.slice(0) : null; this.updateTexture(); };
34 47
35 this.setDiffuseColor = function(c) { this._propValues[this._propNames[1]] = c.slice(0); this.updateColor(); };
36 this.getDiffuseColor = function() { return this._propValues[this._propNames[1]] ? this._propValues[this._propNames[1]].slice() : null; };
37
38 this.isAnimated = function() { return true; }; 48 this.isAnimated = function() { return true; };
39 49
40 /////////////////////////////////////////////////////////////////////// 50 ///////////////////////////////////////////////////////////////////////
@@ -64,10 +74,6 @@ var CloudMaterial = function CloudMaterial() {
64 this.setTextureMap(value); 74 this.setTextureMap(value);
65 break; 75 break;
66 76
67 case "diffusecolor":
68 this.setDiffuseColor( value );
69 break;
70
71 case "color": 77 case "color":
72 break; 78 break;
73 } 79 }
@@ -100,6 +106,8 @@ var CloudMaterial = function CloudMaterial() {
100 106
101 this.init = function( world ) 107 this.init = function( world )
102 { 108 {
109 var GLWorld = require("js/lib/drawing/world").World;
110
103 // save the world 111 // save the world
104 if (world) this.setWorld( world ); 112 if (world) this.setWorld( world );
105 113
@@ -107,6 +115,18 @@ var CloudMaterial = function CloudMaterial() {
107 // the cloud material runs a little faster 115 // the cloud material runs a little faster
108 this._dTime = 0.01; 116 this._dTime = 0.01;
109 117
118 // create a canvas to render into
119 var doc = world.getCanvas().ownerDocument;
120 var canvasID = "__canvas__";
121 this._srcCanvas = doc.createElement(canvasID);
122
123 // build a world to do the rendering
124 this._srcWorld = new GLWorld( this._srcCanvas, true );
125 var srcWorld = this._srcWorld;
126
127 // build the geometry
128 var prim = this.buildGeometry();
129
110 // set up the shader 130 // set up the shader
111 this._shader = new jshader(); 131 this._shader = new jshader();
112 this._shader.def = cloudMaterialDef; 132 this._shader.def = cloudMaterialDef;
@@ -116,31 +136,34 @@ var CloudMaterial = function CloudMaterial() {
116 this._materialNode = createMaterialNode("cloudMaterial" + "_" + world.generateUniqueNodeID()); 136 this._materialNode = createMaterialNode("cloudMaterial" + "_" + world.generateUniqueNodeID());
117 this._materialNode.setShader(this._shader); 137 this._materialNode.setShader(this._shader);
118 138
139 // initialize the shader uniforms
119 this._time = 0; 140 this._time = 0;
120 if (this._shader && this._shader['default']) { 141 if (this._shader && this._shader['default']) {