diff options
Diffstat (limited to 'js/helper-classes/RDGE/Materials/FlatMaterial.js')
-rw-r--r-- | js/helper-classes/RDGE/Materials/FlatMaterial.js | 98 |
1 files changed, 55 insertions, 43 deletions
diff --git a/js/helper-classes/RDGE/Materials/FlatMaterial.js b/js/helper-classes/RDGE/Materials/FlatMaterial.js index 5177a8a0..570e7f9e 100644 --- a/js/helper-classes/RDGE/Materials/FlatMaterial.js +++ b/js/helper-classes/RDGE/Materials/FlatMaterial.js | |||
@@ -26,14 +26,19 @@ function FlatMaterial() | |||
26 | /////////////////////////////////////////////////////////////////////// | 26 | /////////////////////////////////////////////////////////////////////// |
27 | // Property Accessors | 27 | // Property Accessors |
28 | /////////////////////////////////////////////////////////////////////// | 28 | /////////////////////////////////////////////////////////////////////// |
29 | this.getColor = function() { return this._color; } | 29 | this.getColor = function() { return this._color; }; |
30 | this.getShaderName = function() { return this._shaderName; } | 30 | this.getShaderName = function() { return this._shaderName; }; |
31 | |||
32 | this.isAnimated = function() { return false; }; | ||
33 | this.hasVertexDeformation = function() { return true; }; | ||
34 | this._hasVertexDeformation = true; | ||
35 | this._vertexDeformationTolerance = 0.2; | ||
31 | 36 | ||
32 | //////////////////////////////////s///////////////////////////////////// | 37 | //////////////////////////////////s///////////////////////////////////// |
33 | // Methods | 38 | // Methods |
34 | /////////////////////////////////////////////////////////////////////// | 39 | /////////////////////////////////////////////////////////////////////// |
35 | // duplcate method requirde | 40 | // duplcate method requirde |
36 | this.dup = function() { return new FlatMaterial(); } | 41 | this.dup = function() { return new FlatMaterial(); } ; |
37 | 42 | ||
38 | this.init = function() | 43 | this.init = function() |
39 | { | 44 | { |
@@ -48,7 +53,7 @@ function FlatMaterial() | |||
48 | // set up the material node | 53 | // set up the material node |
49 | this._materialNode = createMaterialNode("flatMaterial"); | 54 | this._materialNode = createMaterialNode("flatMaterial"); |
50 | this._materialNode.setShader(this._shader); | 55 | this._materialNode.setShader(this._shader); |
51 | } | 56 | }; |
52 | 57 | ||
53 | 58 | ||
54 | /////////////////////////////////////////////////////////////////////// | 59 | /////////////////////////////////////////////////////////////////////// |
@@ -63,20 +68,21 @@ function FlatMaterial() | |||
63 | 68 | ||
64 | this.setProperty = function( prop, value ) | 69 | this.setProperty = function( prop, value ) |
65 | { | 70 | { |
66 | // make sure we have legitimate imput | 71 | // make sure we have legitimate input |
67 | if (this.validateProperty( prop, value )) | 72 | if (this.validateProperty( prop, value )) |
68 | { | 73 | { |
69 | this._color = value.slice(0); | 74 | this._propValues[prop] = value; |
70 | this._shader.colorMe[prop].set(value); | 75 | if (this._shader && this._shader.colorMe) |
76 | this._shader.colorMe[prop].set(value); | ||
71 | } | 77 | } |
72 | } | 78 | }; |
73 | /////////////////////////////////////////////////////////////////////// | 79 | /////////////////////////////////////////////////////////////////////// |
74 | 80 | ||
75 | this.export = function() | 81 | this.export = function() |
76 | { | 82 | { |
77 | // this function should be overridden by subclasses | 83 | // this function should be overridden by subclasses |
78 | var exportStr = "material: " + this.getShaderName() + "\n"; | 84 | var exportStr = "material: " + this.getShaderName() + "\n"; |
79 | exportStr = "name: " + this.getName() + "\n"; | 85 | exportStr += "name: " + this.getName() + "\n"; |
80 | 86 | ||
81 | if (this._shader) | 87 | if (this._shader) |
82 | exportStr += "color: " + String(this._shader.colorMe.color) + "\n"; | 88 | exportStr += "color: " + String(this._shader.colorMe.color) + "\n"; |
@@ -85,25 +91,40 @@ function FlatMaterial() | |||
85 | exportStr += "endMaterial\n"; | 91 | exportStr += "endMaterial\n"; |
86 | 92 | ||
87 | return exportStr; | 93 | return exportStr; |
88 | } | 94 | }; |
89 | 95 | ||
90 | this.import = function( importStr ) | 96 | this.import = function( importStr ) |
97 | { | ||
98 | var pu = new ParseUtils( importStr ); | ||
99 | var material = pu.nextValue( "material: " ); | ||
100 | if (material != this.getShaderName()) throw new Error( "ill-formed material" ); | ||
101 | this.setName( pu.nextValue( "name: ") ); | ||
102 | |||
103 | var rtnStr; | ||
104 | try | ||
105 | { | ||
106 | var color = eval( "[" + pu.nextValue( "color: " ) + "]" ); | ||
107 | |||
108 | this.setProperty( "color", color); | ||
109 | |||
110 | var endKey = "endMaterial\n"; | ||
111 | var index = importStr.indexOf( endKey ); | ||
112 | index += endKey.length; | ||
113 | rtnStr = importStr.substr( index ); | ||
114 | } | ||
115 | catch (e) | ||
116 | { | ||
117 | throw new Error( "could not import material: " + importStr ); | ||
118 | } | ||
119 | |||
120 | return rtnStr; | ||
121 | }; | ||
122 | |||
123 | this.update = function( time ) | ||
91 | { | 124 | { |
92 | var pu = new ParseUtils( importStr ); | 125 | }; |
93 | var material = pu.nextValue( "material: " ); | ||
94 | if (material != this.getShaderName()) throw new Error( "ill-formed material" ); | ||
95 | this.setName( pu.nextValue( "material: ") ); | ||
96 | var color = pu.nextValue( "color: " ); | ||
97 | |||
98 | var endKey = "endMaterial\n"; | ||
99 | var index = importStr.indexOf( endKey ) + endKey.len; | ||
100 | var rtnStr = importStr.substr( index ); | ||
101 | return rtnStr; | ||
102 | } | ||
103 | } | ||
104 | 126 | ||
105 | // used to create unique names | 127 | } |
106 | var flatMaterialCounter = 0; | ||
107 | 128 | ||
108 | /////////////////////////////////////////////////////////////////////////////////////// | 129 | /////////////////////////////////////////////////////////////////////////////////////// |
109 | // RDGE shader | 130 | // RDGE shader |
@@ -112,37 +133,28 @@ var flatMaterialCounter = 0; | |||
112 | flatShaderDef = | 133 | flatShaderDef = |
113 | { | 134 | { |
114 | 'shaders': { // shader files | 135 | 'shaders': { // shader files |
115 | 'defaultVShader': "\ | 136 | 'defaultVShader':"assets/shaders/Basic.vert.glsl", |
116 | uniform mat4 u_mvMatrix;\ | 137 | 'defaultFShader':"assets/shaders/Basic.frag.glsl" |
117 | uniform mat4 u_projMatrix;\ | ||
118 | attribute vec3 a_pos;\ | ||
119 | void main() {\ | ||
120 | gl_Position = u_projMatrix * u_mvMatrix * vec4(a_pos,1.0);\ | ||
121 | }", | ||
122 | 'defaultFShader': "\ | ||
123 | precision highp float;\ | ||
124 | uniform vec4 color;\ | ||
125 | void main() {\ | ||
126 | gl_FragColor = color;\ | ||
127 | }", | ||
128 | }, | 138 | }, |
129 | 'techniques': { // rendering control | 139 | 'techniques': { // rendering control |
130 | 'colorMe':[ // simple color pass | 140 | 'colorMe':[ // simple color pass |
131 | { | 141 | { |
132 | 'vshader' : 'defaultVShader', | 142 | 'vshader' : 'defaultVShader', |
133 | 'fshader' : 'defaultFShader', | 143 | 'fshader' : 'defaultFShader', |
134 | 144 | ||
135 | // attributes | 145 | // attributes |
136 | 'attributes' : | 146 | 'attributes' : |
137 | { | 147 | { |
138 | 'a_pos' : { 'type' : 'vec3' } // only using position for this shader | 148 | 'vert' : { 'type' : 'vec3' }, |
149 | 'normal' : { 'type' : 'vec3' }, | ||
150 | 'texcoord' : { 'type' : 'vec2' } | ||
139 | }, | 151 | }, |
140 | // attributes | 152 | // attributes |
141 | 'params' : | 153 | 'params' : |
142 | { | 154 | { |
143 | 'color' : { 'type' : 'vec4' } | 155 | 'color' : { 'type' : 'vec4' } |
144 | }, | 156 | } |
145 | }, | 157 | } |
146 | ] | 158 | ] |
147 | } | 159 | } |
148 | }; | 160 | }; |