aboutsummaryrefslogtreecommitdiff
path: root/js/helper-classes/RDGE/Materials/BumpMetalMaterial.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/helper-classes/RDGE/Materials/BumpMetalMaterial.js')
-rw-r--r--js/helper-classes/RDGE/Materials/BumpMetalMaterial.js106
1 files changed, 69 insertions, 37 deletions
diff --git a/js/helper-classes/RDGE/Materials/BumpMetalMaterial.js b/js/helper-classes/RDGE/Materials/BumpMetalMaterial.js
index 0aa3ee78..a7a3724e 100644
--- a/js/helper-classes/RDGE/Materials/BumpMetalMaterial.js
+++ b/js/helper-classes/RDGE/Materials/BumpMetalMaterial.js
@@ -22,44 +22,43 @@ function BumpMetalMaterial()
22 this._shaderName = "bumpMetal"; 22 this._shaderName = "bumpMetal";
23 23
24 this._lightDiff = [0.3, 0.3, 0.3, 1.0]; 24 this._lightDiff = [0.3, 0.3, 0.3, 1.0];
25 this._diffuseTexture = "metal"; 25 this._diffuseTexture = "assets/images/metal.png";
26 this._specularTexture = "silver"; 26 this._specularTexture = "assets/images/silver.png";
27 this._normalTexture = "normalMap"; 27 this._normalTexture = "assets/images/normalMap.png";
28 28
29 /////////////////////////////////////////////////////////////////////// 29 ///////////////////////////////////////////////////////////////////////
30 // Property Accessors 30 // Property Accessors
31 /////////////////////////////////////////////////////////////////////// 31 ///////////////////////////////////////////////////////////////////////
32 this.getName = function() { return this._name; } 32 this.getName = function() { return this._name; };
33 this.getShaderName = function() { return this._shaderName; } 33 this.getShaderName = function() { return this._shaderName; };
34 34
35 this.getLightDiff = function() { return this._lightDiff; } 35 this.getLightDiff = function() { return this._lightDiff; };
36 this.setLightDiff = function(ld) { this._lightDiff = ld; 36 this.setLightDiff = function(ld) { this._lightDiff = ld;
37 if (this._shader && this._shader.default) 37 if (this._shader && this._shader.default)
38 this._shader.default.u_light0Diff.set( ld ); } 38 this._shader.default.u_light0Diff.set( ld ); };
39 39
40 this.getDiffuseTexture = function() { return this._diffuseTexture; } 40 this.getDiffuseTexture = function() { return this._propValues[this._propNames[1]] ? this._propValues[this._propNames[1]].slice() : null };
41 this.setDiffuseTexture = function(dt) { this._diffuseTexture = dt; 41 this.setDiffuseTexture = function(m) { this._propValues[this._propNames[1]] = m ? m.slice(0) : null; this.updateTexture(1); };
42 if (this._materialNode) this._materialNode.setDiffuseTexture( dt ); }
43 42
44 this.getSpecularTexture = function() { return this._specularTexture; } 43 this.getNormalTexture = function() { return this._propValues[this._propNames[2]] ? this._propValues[this._propNames[2]].slice() : null };
45 this.setSpecularTexture = function(st) { this._specularTexture = st; 44 this.setNormalTexture = function(m) { this._propValues[this._propNames[2]] = m ? m.slice(0) : null; this.updateTexture(2); };
46 if (this._materialNode) this._materialNode.setSpecularTexture( st ); }
47 45
48 this.getNormalTexture = function() { return this._normalTexture; } 46 this.getSpecularTexture = function() { return this._propValues[this._propNames[3]] ? this._propValues[this._propNames[3]].slice() : null };
49 this.setNormalTexture = function(nt) { this._normalTexture = nt; 47 this.setSpecularTexture = function(m) { this._propValues[this._propNames[3]] = m ? m.slice(0) : null; this.updateTexture(3); };
50 if (this._materialNode) this._materialNode.setNormalTexture( nt ); } 48
49 this.isAnimated = function() { return true; };
51 50
52 /////////////////////////////////////////////////////////////////////// 51 ///////////////////////////////////////////////////////////////////////
53 // Material Property Accessors 52 // Material Property Accessors
54 /////////////////////////////////////////////////////////////////////// 53 ///////////////////////////////////////////////////////////////////////
55 this._propNames = ["lightDiff", "diffuseMap", "normalMap", "specularMap"]; 54 this._propNames = ["lightDiff", "diffuseTexture", "normalMap", "specularTexture"];
56 this._propLabels = ["Diffuse Color", "Diffuse Map", "Bump Map", "Specular Map"]; 55 this._propLabels = ["Diffuse Color", "Diffuse Map", "Bump Map", "Specular Map"];
57 this._propTypes = ["color", "file", "file", "file"]; 56 this._propTypes = ["color", "file", "file", "file"];
58 this._propValues = []; 57 this._propValues = [];
59 58
60 this._propValues[ this._propNames[0] ] = this._lightDiff.slice(0); 59 this._propValues[ this._propNames[0] ] = this._lightDiff.slice(0);
61 this._propValues[ this._propNames[1] ] = this._diffuseTexture.slice(0); 60 this._propValues[ this._propNames[1] ] = this._diffuseTexture.slice(0);
62 this._propValues[ this._propNames[2] ] = this._specularTexture.slice(0); 61 this._propValues[ this._propNames[2] ] = this._normalTexture.slice(0);
63 this._propValues[ this._propNames[3] ] = this._specularTexture.slice(0); 62 this._propValues[ this._propNames[3] ] = this._specularTexture.slice(0);
64 63
65 // TODO - shader techniques are not all named the same, i.e., FlatMaterial uses "colorMe" and BrickMaterial uses "default" 64 // TODO - shader techniques are not all named the same, i.e., FlatMaterial uses "colorMe" and BrickMaterial uses "default"
@@ -87,16 +86,19 @@ function BumpMetalMaterial()
87 console.log( "invalid property to Bump Metal Material: " + prop + ", value: " + value ); 86 console.log( "invalid property to Bump Metal Material: " + prop + ", value: " + value );
88 break; 87 break;
89 } 88 }
90 } 89 };
91 90
92 /////////////////////////////////////////////////////////////////////// 91 ///////////////////////////////////////////////////////////////////////
93 // Methods 92 // Methods
94 /////////////////////////////////////////////////////////////////////// 93 ///////////////////////////////////////////////////////////////////////
95 // duplcate method requirde 94 // duplcate method requirde
96 this.dup = function() { return new BumpMetalMaterial(); } 95 this.dup = function() { return new BumpMetalMaterial(); };
97 96
98 this.init = function() 97 this.init = function( world )
99 { 98 {
99 // save the world
100 if (world) this.setWorld( world );
101
100 // set up the shader 102 // set up the shader
101 this._shader = new jshader(); 103 this._shader = new jshader();
102 this._shader.def = bumpMetalMaterialDef; 104 this._shader.def = bumpMetalMaterialDef;
@@ -108,10 +110,37 @@ function BumpMetalMaterial()
108 this._materialNode.setShader(this._shader); 110 this._materialNode.setShader(this._shader);
109 111
110 // set some image maps 112 // set some image maps
111 this._materialNode.setDiffuseTexture( this.getDiffuseTexture() ); 113 this.updateTexture(1);
112 this._materialNode.setSpecTexture( this.getSpecularTexture() ); 114 this.updateTexture(2);
113 this._materialNode.setNormalTexture( this.getNormalTexture() ); 115 this.updateTexture(3);
114 } 116 };
117
118 this.updateTexture = function( index )
119 {
120 var material = this._materialNode;
121 if (material)
122 {
123 var technique = material.shaderProgram.default;
124 var renderer = g_Engine.getContext().renderer;
125 if (renderer && technique)
126 {
127 var texMapName = this._propValues[this._propNames[index]];
128 var wrap = 'REPEAT', mips = true;
129 var tex = this.loadTexture( texMapName, wrap, mips );
130
131 if (tex)
132 {
133 switch (index)
134 {
135 case 1: technique.u_colMap.set( tex ); break;
136 case 2: technique.u_normalMap.set( tex ); break;
137 case 3: technique.u_glowMap.set( tex ); break;
138 default: console.log( "invalid map index in BumpMetalMaterial, " + index );
139 }
140 }
141 }
142 }
143 };
115 144
116 this.export = function() 145 this.export = function()
117 { 146 {
@@ -122,13 +151,13 @@ function BumpMetalMaterial()
122 exportStr += "lightDiff: " + this.getLightDiff() + "\n"; 151 exportStr += "lightDiff: " + this.getLightDiff() + "\n";
123 exportStr += "diffuseTexture: " + this.getDiffuseTexture() + "\n"; 152 exportStr += "diffuseTexture: " + this.getDiffuseTexture() + "\n";
124 exportStr += "specularTexture: " + this.getSpecularTexture() + "\n"; 153 exportStr += "specularTexture: " + this.getSpecularTexture() + "\n";
125 exportStr += "normalTexture: " + this.getNormalTexture() + "\n"; 154 exportStr += "normalMap: " + this.getNormalTexture() + "\n";
126 155
127 // every material needs to terminate like this 156 // every material needs to terminate like this
128 exportStr += "endMaterial\n"; 157 exportStr += "endMaterial\n";
129 158
130 return exportStr; 159 return exportStr;
131 } 160 };
132 161
133 this.import = function( importStr ) 162 this.import = function( importStr )
134 { 163 {
@@ -143,12 +172,12 @@ function BumpMetalMaterial()
143 var lightDiff = eval( "[" + pu.nextValue( "lightDiff: " ) + "]" ), 172 var lightDiff = eval( "[" + pu.nextValue( "lightDiff: " ) + "]" ),
144 dt = pu.nextValue( "diffuseTexture: " ), 173 dt = pu.nextValue( "diffuseTexture: " ),
145 st = pu.nextValue( "specularTexture: " ), 174 st = pu.nextValue( "specularTexture: " ),
146 nt = pu.nextValue( "normalTexture: " ); 175 nt = pu.nextValue( "normalMap: " );
147 176
148 this.setProperty( "lightDiff", lightDif); 177 this.setProperty( "lightDiff", lightDiff);
149 this.setProperty( "diffuseTexture", dt ); 178 this.setProperty( "diffuseTexture", dt );
150 this.setProperty( "specularTexture", st ); 179 this.setProperty( "specularTexture", st );
151 this.setProperty( "normalTexture", nt ); 180 this.setProperty( "normalMap", nt );
152 181
153 var endKey = "endMaterial\n"; 182 var endKey = "endMaterial\n";
154 var index = importStr.indexOf( endKey ); 183 var index = importStr.indexOf( endKey );
@@ -161,7 +190,7 @@ function BumpMetalMaterial()
161 } 190 }
162 191
163 return rtnStr; 192 return rtnStr;
164 } 193 };
165} 194}
166 195
167/////////////////////////////////////////////////////////////////////////////////////// 196///////////////////////////////////////////////////////////////////////////////////////
@@ -208,7 +237,7 @@ bumpMetalShaderDef =
208 float alpha1 = max(0.0, 1.0 - ( (light1.x*light1.