diff options
Diffstat (limited to 'js/lib/rdge/materials/water-material.js')
-rw-r--r-- | js/lib/rdge/materials/water-material.js | 387 |
1 files changed, 96 insertions, 291 deletions
diff --git a/js/lib/rdge/materials/water-material.js b/js/lib/rdge/materials/water-material.js index 8dbb3233..3e63ddb6 100644 --- a/js/lib/rdge/materials/water-material.js +++ b/js/lib/rdge/materials/water-material.js | |||
@@ -11,81 +11,49 @@ var Texture = require("js/lib/rdge/texture").Texture; | |||
11 | // Class GLMaterial | 11 | // Class GLMaterial |
12 | // RDGE representation of a material. | 12 | // RDGE representation of a material. |
13 | /////////////////////////////////////////////////////////////////////// | 13 | /////////////////////////////////////////////////////////////////////// |
14 | var WaterMaterial = function WaterMaterial() { | 14 | var WaterMaterial = function WaterMaterial() |
15 | /////////////////////////////////////////////////////////////////////// | 15 | { |
16 | // Instance variables | 16 | /////////////////////////////////////////////////////////////////////// |
17 | /////////////////////////////////////////////////////////////////////// | 17 | // Instance variables |
18 | this._name = "WaterMaterial"; | 18 | /////////////////////////////////////////////////////////////////////// |
19 | this._shaderName = "water"; | 19 | this._name = "WaterMaterial"; |
20 | 20 | this._shaderName = "water"; | |
21 | this._texMap = 'assets/images/rocky-normal.jpg'; | 21 | |
22 | //this._texMap = 'assets/images/powderblue.png'; | 22 | this._defaultTexMap = 'assets/images/rocky-normal.jpg'; |
23 | 23 | ||
24 | this._time = 0.0; | 24 | this._time = 0.0; |
25 | this._dTime = 0.01; | 25 | this._dTime = 0.01; |
26 | this._emboss = 0.3; | 26 | |
27 | this._delta = 20.0; | 27 | this.isAnimated = function() { return true; }; |
28 | this._intensity = 3.0; | 28 | this.getShaderDef = function() { return waterMaterialDef; }; |
29 | 29 | ||
30 | this._speed = 0.2; | 30 | /////////////////////////////////////////////////////////////////////// |
31 | 31 | // Properties | |
32 | /////////////////////////////////////////////////////////////////////// | 32 | /////////////////////////////////////////////////////////////////////// |
33 | // Properties | 33 | // all defined in parent PulseMaterial.js |
34 | /////////////////////////////////////////////////////////////////////// | 34 | // load the local default value |
35 | // all defined in parent PulseMaterial.js | 35 | this._propNames = ["u_tex0", "u_emboss", "u_delta", "u_intensity", "u_speed"]; |
36 | // load the local default value | ||
37 | //this._propValues = []; | ||
38 | //this._propValues[this._propNames[0]] = this._texMap.slice(0); | ||
39 | this._propNames = ["texmap", "emboss", "delta", "intensity", "speed"]; | ||
40 | this._propLabels = ["Texture map", "Emboss", "Delta", "Intensity", "Speed"]; | 36 | this._propLabels = ["Texture map", "Emboss", "Delta", "Intensity", "Speed"]; |
41 | this._propTypes = ["file", "float", "float", "float", "float"]; | 37 | this._propTypes = ["file", "float", "float", "float", "float"]; |
42 | 38 | ||
43 | this._propValues = []; | 39 | var u_tex_index = 0, |
44 | this._propValues[ this._propNames[0] ] = this._texMap.slice(0); | 40 | u_emboss_index = 1, |
45 | this._propValues[ this._propNames[1] ] = this._emboss; | 41 | u_delta_index = 2, |
46 | this._propValues[ this._propNames[2] ] = this._delta; | 42 | u_intensity_index = 3, |
47 | this._propValues[ this._propNames[3] ] = this._intensity; | 43 | u_speed_index = 4; |
48 | this._propValues[ this._propNames[4] ] = this._speed; | ||
49 | |||
50 | /////////////////////////////////////////////////////////////////////// | ||
51 | // Methods | ||
52 | /////////////////////////////////////////////////////////////////////// | ||
53 | |||
54 | this.setProperty = function( prop, value ) { | ||
55 | // make sure we have legitimate imput | ||
56 | var ok = this.validateProperty( prop, value ); | ||
57 | if (!ok) { | ||
58 | console.log( "invalid property in Water Material:" + prop + " : " + value ); | ||
59 | } | ||
60 | |||
61 | switch (prop) | ||
62 | { | ||
63 | case "texmap": | ||
64 | this.setTextureMap(value); | ||
65 | break; | ||
66 | |||
67 | case "emboss": | ||
68 | this.setEmboss( value ); | ||
69 | break; | ||
70 | |||
71 | case "delta": | ||
72 | this.setDelta( value ); | ||
73 | break; | ||
74 | |||
75 | case "intensity": | ||
76 | this.setIntensity( value ); | ||
77 | break; | ||
78 | 44 | ||
79 | case "speed": | 45 | this._propValues = []; |
80 | this.setSpeed( value ); | 46 | this._propValues[ this._propNames[u_tex_index ] ] = this._defaultTexMap.slice(0); |
81 | break; | 47 | this._propValues[ this._propNames[u_emboss_index ] ] = 0.3; |
48 | this._propValues[ this._propNames[u_delta_index ] ] = 20.0; | ||
49 | this._propValues[ this._propNames[u_intensity_index ] ] = 3.0; | ||
50 | this._propValues[ this._propNames[u_speed_index ] ] = 0.2; | ||
82 | 51 | ||
83 | case "color": | 52 | /////////////////////////////////////////////////////////////////////// |
84 | break; | 53 | // Methods |
85 | } | 54 | /////////////////////////////////////////////////////////////////////// |
86 | }; | ||
87 | 55 | ||
88 | this.init = function (world) { | 56 | this.init = function (world) { |
89 | // save the world | 57 | // save the world |
90 | if (world) this.setWorld(world); | 58 | if (world) this.setWorld(world); |
91 | 59 | ||
@@ -99,119 +67,14 @@ var WaterMaterial = function WaterMaterial() { | |||
99 | this._materialNode.setShader(this._shader); | 67 | this._materialNode.setShader(this._shader); |
100 | 68 | ||
101 | this._time = 0; | 69 | this._time = 0; |
102 | if (this._shader && this._shader['default']) { | 70 | if (this._shader && this._shader['default']) |
103 | this._shader['default'].u_time.set([this._time]); | 71 | this._shader['default'].u_time.set([this._time]); |
104 | 72 | ||
105 | this._shader['default'].u_emboss.set( [this._emboss] ); | ||
106 | this._shader['default'].u_delta.set( [this._delta] ); | ||
107 | this._shader['default'].u_intensity.set( [this._intensity] ); | ||
108 | this._shader['default'].u_speed.set( [this._speed] ); | ||
109 | } | ||
110 | |||
111 | var texMapName = this._propValues[this._propNames[0]]; | ||
112 | this._glTex = new Texture( world, texMapName ); | ||
113 | |||
114 | // set the shader values in the shader | 73 | // set the shader values in the shader |
115 | this.updateTexture(); | 74 | this.setShaderValues(); |
116 | this.setResolution([world.getViewportWidth(), world.getViewportHeight()]); | 75 | this.setResolution([world.getViewportWidth(), world.getViewportHeight()]); |
117 | this.update(0); | 76 | this.update(0); |
118 | }; | 77 | }; |
119 | |||
120 | this.setTextureMap = function( texMapName ) | ||
121 | { | ||
122 | this._texMap = texMapName.slice(); | ||
123 | this._propValues[ this._propNames[0] ] = this._texMap.slice(0); | ||
124 | |||
125 | this._glTex = new Texture( this.getWorld(), texMapName ); | ||
126 | this.updateTexture(); | ||
127 | } | ||
128 | |||
129 | this.updateTexture = function() { | ||
130 | |||
131 | var texMapName = this._propValues[this._propNames[0]]; | ||
132 | this._glTex = new Texture( this.getWorld(), texMapName ); | ||
133 | |||
134 | var material = this._materialNode; | ||
135 | if (material) { | ||
136 | var technique = material.shaderProgram['default']; | ||
137 | var renderer = RDGE.globals.engine.getContext().renderer; | ||
138 | if (renderer && technique) { | ||
139 | var wrap = 'REPEAT', mips = true; | ||
140 | var tex; | ||
141 | if (this._glTex) | ||
142 | { | ||
143 | if (this._glTex.isAnimated()) | ||
144 | this._glTex.render(); | ||
145 | tex = this._glTex.getTexture(); | ||
146 | } | ||
147 | |||
148 | if (tex) { | ||
149 | technique.u_tex0.set( tex ); | ||
150 | } | ||
151 | } | ||
152 | } | ||
153 | }; | ||
154 | |||
155 | this.setEmboss = function( value ) | ||
156 | { | ||
157 | this._emboss = value; | ||
158 | this._propValues[ "emboss" ] = value; | ||
159 | |||
160 | var material = this._materialNode; | ||
161 | if (material) { | ||
162 | var technique = material.shaderProgram['default']; | ||
163 | var renderer = RDGE.globals.engine.getContext().renderer; | ||
164 | if (renderer && technique) { | ||
165 | technique.u_emboss.set( [value] ); | ||
166 | } | ||
167 | } | ||
168 | } | ||
169 | |||
170 | this.setIntensity = function( value ) | ||
171 | { | ||
172 | this._intensity = value; | ||
173 | this._propValues[ "intensity" ] = value; | ||
174 | |||
175 | var material = this._materialNode; | ||
176 | if (material) { | ||
177 | var technique = material.shaderProgram['default']; | ||
178 | var renderer = RDGE.globals.engine.getContext().renderer; | ||
179 | if (renderer && technique) { | ||
180 | technique.u_intensity.set( [value] ); | ||
181 | console.log( "setting intensity to: " + value ); | ||
182 | } | ||
183 | } | ||
184 | } | ||
185 | |||
186 | this.setDelta = function( value ) | ||
187 | { | ||
188 | this._delta = value; | ||
189 | this._propValues[ "delta" ] = value; | ||
190 | |||
191 | var material = this._materialNode; | ||
192 | if (material) { | ||
193 | var technique = material.shaderProgram['default']; | ||
194 | var renderer = RDGE.globals.engine.getContext().renderer; | ||
195 | if (renderer && technique) { | ||
196 | technique.u_delta.set( [value] ); | ||
197 | } | ||
198 | } | < |