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.js66
1 files changed, 49 insertions, 17 deletions
diff --git a/js/helper-classes/RDGE/Materials/BumpMetalMaterial.js b/js/helper-classes/RDGE/Materials/BumpMetalMaterial.js
index 0aa3ee78..17be0cd7 100644
--- a/js/helper-classes/RDGE/Materials/BumpMetalMaterial.js
+++ b/js/helper-classes/RDGE/Materials/BumpMetalMaterial.js
@@ -22,9 +22,9 @@ 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
@@ -37,17 +37,16 @@ function BumpMetalMaterial()
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
@@ -59,7 +58,7 @@ function BumpMetalMaterial()
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"
@@ -95,8 +94,11 @@ function BumpMetalMaterial()
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,9 +110,36 @@ 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);
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 }
114 } 143 }
115 144
116 this.export = function() 145 this.export = function()
@@ -229,6 +258,9 @@ bumpMetalShaderDef =
229 { 258 {
230 'u_light0Diff' : { 'type' : 'vec4' }, 259 'u_light0Diff' : { 'type' : 'vec4' },
231 //'u_matDiffuse' : { 'type' : 'vec4' } 260 //'u_matDiffuse' : { 'type' : 'vec4' }
261 'u_colMap': { 'type' : 'tex2d' },
262 'u_normalMap': { 'type' : 'tex2d' },
263 'u_glowMap': { 'type' : 'tex2d' },
232 }, 264 },
233 265
234 // render states 266 // render states