From e065244ac75d1d0f25fd5c75cb58e714a13fe16b Mon Sep 17 00:00:00 2001 From: Jonathan Duran Date: Wed, 14 Mar 2012 08:59:17 -0700 Subject: Squashed commit of the following: merge master into timeline Signed-off-by: Jonathan Duran --- js/helper-classes/backup-delete/GLBrushStroke.js | 174 ++++++++++++++++++++- js/helper-classes/backup-delete/GLCircle.js | 3 +- js/helper-classes/backup-delete/GLGeomObj.js | 46 ++++++ js/helper-classes/backup-delete/GLRectangle.js | 2 + js/helper-classes/backup-delete/GLSubpath.js | 147 ++++++++++++++--- js/helper-classes/backup-delete/GLWorld.js | 71 +++++---- .../backup-delete/Materials/BumpMetalMaterial.js | 39 +++-- .../backup-delete/Materials/DeformMaterial.js | 2 +- .../backup-delete/Materials/FlatMaterial.js | 34 ++-- .../backup-delete/Materials/FlyMaterial.js | 2 +- .../backup-delete/Materials/JuliaMaterial.js | 2 +- .../Materials/KeleidoscopeMaterial.js | 2 +- .../Materials/LinearGradientMaterial.js | 2 +- .../backup-delete/Materials/MandelMaterial.js | 2 +- .../backup-delete/Materials/PlasmaMaterial.js | 2 +- .../backup-delete/Materials/PulseMaterial.js | 5 +- .../backup-delete/Materials/RadialBlurMaterial.js | 2 +- .../Materials/RadialGradientMaterial.js | 6 +- .../Materials/ReliefTunnelMaterial.js | 2 +- .../Materials/SquareTunnelMaterial.js | 2 +- .../backup-delete/Materials/StarMaterial.js | 2 +- .../backup-delete/Materials/TaperMaterial.js | 4 +- .../backup-delete/Materials/TunnelMaterial.js | 2 +- .../backup-delete/Materials/TwistMaterial.js | 2 +- .../backup-delete/Materials/TwistVertMaterial.js | 2 +- .../backup-delete/Materials/UberMaterial.js | 73 ++++++++- .../backup-delete/Materials/WaterMaterial.js | 4 +- .../backup-delete/Materials/ZInvertMaterial.js | 2 +- 28 files changed, 526 insertions(+), 112 deletions(-) (limited to 'js/helper-classes/backup-delete') diff --git a/js/helper-classes/backup-delete/GLBrushStroke.js b/js/helper-classes/backup-delete/GLBrushStroke.js index 5d773c2d..26c922a3 100755 --- a/js/helper-classes/backup-delete/GLBrushStroke.js +++ b/js/helper-classes/backup-delete/GLBrushStroke.js @@ -31,6 +31,8 @@ function GLBrushStroke() { //stroke information this._strokeWidth = 0.0; this._strokeColor = [0.4, 0.4, 0.4, 1.0]; + this._secondStrokeColor = this._strokeColor; + this._strokeHardness = 100; this._strokeMaterial; this._strokeStyle = "Solid"; @@ -39,7 +41,7 @@ function GLBrushStroke() { this._WETNESS_FACTOR = 0.25; //prevent extremely long paths that can take a long time to render - this._MAX_ALLOWED_SAMPLES = 500; + this._MAX_ALLOWED_SAMPLES = 5000; //drawing context this._world = null; @@ -79,7 +81,7 @@ function GLBrushStroke() { //add the point only if it is some epsilon away from the previous point var numPoints = this._Points.length; if (numPoints>0) { - var threshold = this._WETNESS_FACTOR*this._strokeWidth; + var threshold = 1;//this._WETNESS_FACTOR*this._strokeWidth; var prevPt = this._Points[numPoints-1]; var diffPt = [prevPt[0]-pt[0], prevPt[1]-pt[1]]; var diffPtMag = Math.sqrt(diffPt[0]*diffPt[0] + diffPt[1]*diffPt[1]); @@ -106,6 +108,8 @@ function GLBrushStroke() { this.setStrokeMaterial = function (m) { this._strokeMaterial = m; } this.getStrokeColor = function () { return this._strokeColor; } this.setStrokeColor = function (c) { this._strokeColor = c; } + this.setSecondStrokeColor = function(c){this._secondStrokeColor=c;} + this.setStrokeHardness = function(h){this._strokeHardness=h;} this.getStrokeStyle = function () { return this._strokeStyle; } this.setStrokeStyle = function (s) { this._strokeStyle = s; } @@ -133,13 +137,14 @@ function GLBrushStroke() { this._Points[i][2]+=tz; } } - + this.computeMetaGeometry = function(){ if (this._dirty){ var numPoints = this._Points.length; //**** add samples to the path if needed...linear interpolation for now - if (numPoints>1) { + //if (numPoints>1) { + if (0){ var threshold = this._WETNESS_FACTOR*this._strokeWidth; var prevPt = this._Points[0]; var prevIndex = 0; @@ -171,6 +176,44 @@ function GLBrushStroke() { } } + //**** add samples to the long sections of the path --- Catmull-Rom spline interpolation + if (numPoints>1) { + var numInsertedPoints = 0; + var threshold = 5;//0.25*this._strokeWidth; //this determines whether a segment between two sample is too long + var prevPt = this._Points[0]; + for (var i=1;ithreshold){ + //build the control polygon for the Catmull-Rom spline (prev. 2 points and next 2 points) + var prev = (i===1) ? i-1 : i-2; + var next = (i===numPoints-1) ? i : i+1; + var ctrlPts = [this._Points[prev], this._Points[i-1], this._Points[i], this._Points[next]]; + //insert points along the prev. to current point + var numNewPoints = Math.floor(distance/threshold); + for (var j=0;j this._MAX_ALLOWED_SAMPLES){ + console.log("leaving the resampling because numPoints is greater than limit:"+this._MAX_ALLOWED_SAMPLES); + break; + } + } + console.log("Inserted "+numInsertedPoints+" additional CatmullRom points"); + } // *** compute the bounding box ********* this._BBoxMin = [Infinity, Infinity, Infinity]; this._BBoxMax = [-Infinity, -Infinity, -Infinity]; @@ -331,7 +374,109 @@ function GLBrushStroke() { } */ + /* + //build the stamp for the brush stroke + //todo get this directly from the UI + var t=0; + var numTraces = this._strokeWidth; + var halfNumTraces = numTraces/2; + var startPos = [-this._strokeWidth/2,0]; + var brushStamp = []; + + //build an angled (calligraphic) brush stamp + var deltaDisplacement = [1,1];//[this._strokeWidth/numTraces, 0]; //a horizontal line brush + for (t=0;tx || this._BBoxMin[1]>y || this._BBoxMin[2]>z){ + return false; + } + if (this._BBoxMax[0]=0 && this._selectedAnchorIndex=0 && selAnchorIndex === -1) { + var distSq = this._Anchors[this._selectedAnchorIndex].getPrevDistanceSq(pickX, pickY, pickZ); + if (distSq < minDistance && distSq < radSq){ + selAnchorIndex = this._selectedAnchorIndex; + minDistance = distSq; + } else { + //check the next for this anchor point + distSq = this._Anchors[this._selectedAnchorIndex].getNextDistanceSq(pickX, pickY, pickZ); + if (distSq= 0) + //var index = importStr.indexOf( "scenedata: " ); + var index = importStr.indexOf( "webGL: " ); + this._useWebGL = (index >= 0) + if (this._useWebGL) { - var rdgeStr = importStr.substr( index+11 ); - var endIndex = rdgeStr.indexOf( "endscene\n" ); - if (endIndex < 0) throw new Error( "ill-formed WebGL data" ); - var len = endIndex - index + 11; - rdgeStr = rdgeStr.substr( 0, endIndex ); - - this.myScene.importJSON( rdgeStr ); + // start RDGE + rdgeStarted = true; + var id = this._canvas.getAttribute( "data-RDGE-id" ); + this._canvas.rdgeid = id; + g_Engine.registerCanvas(this._canvas, this); + RDGEStart( this._canvas ); + this._canvas.task.stop() } - else - { - // load the material library - importStr = MaterialsLibrary.import( importStr ); - // import the objects - this.importObjects( importStr, this._rootNode ); + this.importObjects( importStr, this._rootNode ); + + if (!this._useWebGL) + { + // render using canvas 2D + this.render(); } } diff --git a/js/helper-classes/backup-delete/Materials/BumpMetalMaterial.js b/js/helper-classes/backup-delete/Materials/BumpMetalMaterial.js index a7a3724e..52332ab8 100755 --- a/js/helper-classes/backup-delete/Materials/BumpMetalMaterial.js +++ b/js/helper-classes/backup-delete/Materials/BumpMetalMaterial.js @@ -65,7 +65,7 @@ function BumpMetalMaterial() this.setProperty = function( prop, value ) { // every material should do something with the "color" property - if (prop === "color") prop = "lightDiff"; + if (prop === "color") return; //prop = "lightDiff"; // make sure we have legitimate imput var ok = this.validateProperty( prop, value ); @@ -97,22 +97,27 @@ function BumpMetalMaterial() this.init = function( world ) { // save the world - if (world) this.setWorld( world ); - - // set up the shader - this._shader = new jshader(); - this._shader.def = bumpMetalMaterialDef; - this._shader.init(); - this._shader.default.u_light0Diff.set( this.getLightDiff() ); - - // set up the material node - this._materialNode = createMaterialNode( this.getShaderName() ); - this._materialNode.setShader(this._shader); - - // set some image maps - this.updateTexture(1); - this.updateTexture(2); - this.updateTexture(3); + if (world) + { + this.setWorld( world ); + + // set up the shader + this._shader = new jshader(); + this._shader.def = bumpMetalMaterialDef; + this._shader.init(); + this._shader.default.u_light0Diff.set( this.getLightDiff() ); + + // set up the material node + this._materialNode = createMaterialNode( this.getShaderName() + "_" + world.generateUniqueNodeID() ); + this._materialNode.setShader(this._shader); + + // set some image maps + this.updateTexture(1); + this.updateTexture(2); + this.updateTexture(3); + } + else + throw new Error( "GLWorld not supplied to material initialization" ); }; this.updateTexture = function( index ) diff --git a/js/helper-classes/backup-delete/Materials/DeformMaterial.js b/js/helper-classes/backup-delete/Materials/DeformMaterial.js index ddc97383..b7101227 100644 --- a/js/helper-classes/backup-delete/Materials/DeformMaterial.js +++ b/js/helper-classes/backup-delete/Materials/DeformMaterial.js @@ -71,7 +71,7 @@ function DeformMaterial() this._shader.init(); // set up the material node - this._materialNode = createMaterialNode("deformMaterial"); + this._materialNode = createMaterialNode("deformMaterial_" + world.generateUniqueNodeID()); this._materialNode.setShader(this._shader); this._time = 0; diff --git a/js/helper-classes/backup-delete/Materials/FlatMaterial.js b/js/helper-classes/backup-delete/Materials/FlatMaterial.js index 570e7f9e..eb8970b8 100755 --- a/js/helper-classes/backup-delete/Materials/FlatMaterial.js +++ b/js/helper-classes/backup-delete/Materials/FlatMaterial.js @@ -40,19 +40,27 @@ function FlatMaterial() // duplcate method requirde this.dup = function() { return new FlatMaterial(); } ; - this.init = function() + this.init = function( world ) { - // set up the shader - this._shader = new jshader(); - this._shader.def = flatShaderDef; - this._shader.init(); + // save the world + if (world) + { + this.setWorld( world ); + + // set up the shader + this._shader = new jshader(); + this._shader.def = flatShaderDef; + this._shader.init(); - // set the defaults - this._shader.colorMe.color.set( this.getColor() ); + // set the defaults + this._shader.colorMe.color.set( this.getColor() ); - // set up the material node - this._materialNode = createMaterialNode("flatMaterial"); - this._materialNode.setShader(this._shader); + // set up the material node + this._materialNode = createMaterialNode("flatMaterial_" + world.generateUniqueNodeID() ); + this._materialNode.setShader(this._shader); + } + else + throw new Error( "GLWorld not supplied to material initialization" ); }; @@ -83,11 +91,7 @@ function FlatMaterial() // this function should be overridden by subclasses var exportStr = "material: " + this.getShaderName() + "\n"; exportStr += "name: " + this.getName() + "\n"; - - if (this._shader) - exportStr += "color: " + String(this._shader.colorMe.color) + "\n"; - else - exportStr += "color: " + this.getColor() + "\n"; + exportStr += "color: " + String(this._propValues["color"]) + "\n"; exportStr += "endMaterial\n"; return exportStr; diff --git a/js/helper-classes/backup-delete/Materials/FlyMaterial.js b/js/helper-classes/backup-delete/Materials/FlyMaterial.js index 4a44e2e5..a70b53e8 100644 --- a/js/helper-classes/backup-delete/Materials/FlyMaterial.js +++ b/js/helper-classes/backup-delete/Materials/FlyMaterial.js @@ -71,7 +71,7 @@ function FlyMaterial() this._shader.init(); // set up the material node - this._materialNode = createMaterialNode("flyMaterial"); + this._materialNode = createMaterialNode("flyMaterial_" + world.generateUniqueNodeID()); this._materialNode.setShader(this._shader); this._time = 0; diff --git a/js/helper-classes/backup-delete/Materials/JuliaMaterial.js b/js/helper-classes/backup-delete/Materials/JuliaMaterial.js index f95263f4..9b5d588c 100644 --- a/js/helper-classes/backup-delete/Materials/JuliaMaterial.js +++ b/js/helper-classes/backup-delete/Materials/JuliaMaterial.js @@ -73,7 +73,7 @@ function JuliaMaterial() this._shader.init(); // set up the material node - this._materialNode = createMaterialNode("juliaMaterial"); + this._materialNode = createMaterialNode("juliaMaterial_" + world.generateUniqueNodeID()); this._materialNode.setShader(this._shader); this._time = 0; diff --git a/js/helper-classes/backup-delete/Materials/KeleidoscopeMaterial.js b/js/helper-classes/backup-delete/Materials/KeleidoscopeMaterial.js index 1547aca9..af7ce97c 100644 --- a/js/helper-classes/backup-delete/Materials/KeleidoscopeMaterial.js +++ b/js/helper-classes/backup-delete/Materials/KeleidoscopeMaterial.js @@ -71,7 +71,7 @@ function KeleidoscopeMaterial() this._shader.init(); // set up the material node - this._materialNode = createMaterialNode("keleidoscopeMaterial"); + this._materialNode = createMaterialNode("keleidoscopeMaterial_" + world.generateUniqueNodeID()); this._materialNode.setShader(this._shader); this._time = 0; diff --git a/js/helper-classes/backup-delete/Materials/LinearGradientMaterial.js b/js/helper-classes/backup-delete/Materials/LinearGradientMaterial.js index 7fe2be0c..2f900894 100755 --- a/js/helper-classes/backup-delete/Materials/LinearGradientMaterial.js +++ b/js/helper-classes/backup-delete/Materials/LinearGradientMaterial.js @@ -159,7 +159,7 @@ function LinearGradientMaterial() this._shader.init(); // set up the material node - this._materialNode = createMaterialNode( this.getShaderName() ); + this._materialNode = createMaterialNode( this.getShaderName() + world.generateUniqueNodeID() ); this._materialNode.setShader(this._shader); // send the current values to the shader diff --git a/js/helper-classes/backup-delete/Materials/MandelMaterial.js b/js/helper-classes/backup-delete/Materials/MandelMaterial.js index 25b08404..df732ed2 100644 --- a/js/helper-classes/backup-delete/Materials/MandelMaterial.js +++ b/js/helper-classes/backup-delete/Materials/MandelMaterial.js @@ -74,7 +74,7 @@ function MandelMaterial() this._shader.init(); // set up the material node - this._materialNode = createMaterialNode("mandelMaterial"); + this._materialNode = createMaterialNode("mandelMaterial_" + world.generateUniqueNodeID()); this._materialNode.setShader(this._shader); this._time = 0; diff --git a/js/helper-classes/backup-delete/Materials/PlasmaMaterial.js b/js/helper-classes/backup-delete/Materials/PlasmaMaterial.js index a65f3a33..4e60df9f 100644 --- a/js/helper-classes/backup-delete/Materials/PlasmaMaterial.js +++ b/js/helper-classes/backup-delete/Materials/PlasmaMaterial.js @@ -74,7 +74,7 @@ function PlasmaMaterial() this.setProperty( "color", [this._time, 0, 0, 1] ); // set up the material node - this._materialNode = createMaterialNode("plasmaMaterial"); + this._materialNode = createMaterialNode("plasmaMaterial_" + world.generateUniqueNodeID()); this._materialNode.setShader(this._shader); } diff --git a/js/helper-classes/backup-delete/Materials/PulseMaterial.js b/js/helper-classes/backup-delete/Materials/PulseMaterial.js index d76b9966..e55798b7 100644 --- a/js/helper-classes/backup-delete/Materials/PulseMaterial.js +++ b/js/helper-classes/backup-delete/Materials/PulseMaterial.js @@ -105,7 +105,7 @@ function PulseMaterial() this._shader.init(); // set up the material node - this._materialNode = createMaterialNode("pulseMaterial"); + this._materialNode = createMaterialNode("pulseMaterial_" + world.generateUniqueNodeID()); this._materialNode.setShader(this._shader); this._time = 0; @@ -185,6 +185,9 @@ function PulseMaterial() // every material needs the base type and instance name var exportStr = "material: " + this.getShaderName() + "\n"; exportStr += "name: " + this.getName() + "\n"; + + var texMapName = this._propValues[this._propNames[0]]; + exportStr += "texture: " + texMapName + "\n"; // every material needs to terminate like this exportStr += "endMaterial\n"; diff --git a/js/helper-classes/backup-delete/Materials/RadialBlurMaterial.js b/js/helper-classes/backup-delete/Materials/RadialBlurMaterial.js index a5fb134c..471ff3c3 100644 --- a/js/helper-classes/backup-delete/Materials/RadialBlurMaterial.js +++ b/js/helper-classes/backup-delete/Materials/RadialBlurMaterial.js @@ -103,7 +103,7 @@ function RadialBlurMaterial() this._shader.init(); // set up the material node - this._materialNode = createMaterialNode("radialBlurMaterial"); + this._materialNode = createMaterialNode("radialBlurMaterial_" + world.generateUniqueNodeID()); this._materialNode.setShader(this._shader); this._time = 0; diff --git a/js/helper-classes/backup-delete/Materials/RadialGradientMaterial.js b/js/helper-classes/backup-delete/Materials/RadialGradientMaterial.js index 12842798..45b260ef 100755 --- a/js/helper-classes/backup-delete/Materials/RadialGradientMaterial.js +++ b/js/helper-classes/backup-delete/Materials/RadialGradientMaterial.js @@ -146,15 +146,17 @@ function RadialGradientMaterial() // duplcate method requirde this.dup = function() { return new RadialGradientMaterial(); } - this.init = function() + this.init = function( world ) { + this.setWorld( world ); + // set up the shader this._shader = new jshader(); this._shader.def = radialGradientMaterialDef; this._shader.init(); // set up the material node - this._materialNode = createMaterialNode("radialGradientMaterial"); + this._materialNode = createMaterialNode("radialGradientMaterial_" + world.generateUniqueNodeID()); this._materialNode.setShader(this._shader); // set the shader values in the shader diff --git a/js/helper-classes/backup-delete/Materials/ReliefTunnelMaterial.js b/js/helper-classes/backup-delete/Materials/ReliefTunnelMaterial.js index 6540c3e9..ba938806 100644 --- a/js/helper-classes/backup-delete/Materials/ReliefTunnelMaterial.js +++ b/js/helper-classes/backup-delete/Materials/ReliefTunnelMaterial.js @@ -71,7 +71,7 @@ function ReliefTunnelMaterial() this._shader.init(); // set up the material node - this._materialNode = createMaterialNode("reliefTunnelMaterial"); + this._materialNode = createMaterialNode("reliefTunnelMaterial_" + world.generateUniqueNodeID()); this._materialNode.setShader(this._shader); this._time = 0; diff --git a/js/helper-classes/backup-delete/Materials/SquareTunnelMaterial.js b/js/helper-classes/backup-delete/Materials/SquareTunnelMaterial.js index 8238b651..3a8afd18 100644 --- a/js/helper-classes/backup-delete/Materials/SquareTunnelMaterial.js +++ b/js/helper-classes/backup-delete/Materials/SquareTunnelMaterial.js @@ -71,7 +71,7 @@ function SquareTunnelMaterial() this._shader.init(); // set up the material node - this._materialNode = createMaterialNode("squareTunnelMaterial"); + this._materialNode = createMaterialNode("squareTunnelMaterial_" + world.generateUniqueNodeID()); this._materialNode.setShader(this._shader); this._time = 0; diff --git a/js/helper-classes/backup-delete/Materials/StarMaterial.js b/js/helper-classes/backup-delete/Materials/StarMaterial.js index a5f188a1..ea8e4edb 100644 --- a/js/helper-classes/backup-delete/Materials/StarMaterial.js +++ b/js/helper-classes/backup-delete/Materials/StarMaterial.js @@ -71,7 +71,7 @@ function StarMaterial() this._shader.init(); // set up the material node - this._materialNode = createMaterialNode("starMaterial"); + this._materialNode = createMaterialNode("starMaterial_" + world.generateUniqueNodeID()); this._materialNode.setShader(this._shader); this._time = 0; diff --git a/js/helper-classes/backup-delete/Materials/TaperMaterial.js b/js/helper-classes/backup-delete/Materials/TaperMaterial.js index e8cc7a49..eea3f699 100644 --- a/js/helper-classes/backup-delete/Materials/TaperMaterial.js +++ b/js/helper-classes/backup-delete/Materials/TaperMaterial.js @@ -42,7 +42,7 @@ function TaperMaterial() // duplcate method requirde this.dup = function() { return new TaperMaterial(); } - this.init = function() + this.init = function( world ) { // set up the shader this._shader = new jshader(); @@ -53,7 +53,7 @@ function TaperMaterial() this._shader.colorMe.color.set( this.getColor() ); // set up the material node - this._materialNode = createMaterialNode("taperMaterial"); + this._materialNode = createMaterialNode("taperMaterial_" + world.generateUniqueNodeID()); this._materialNode.setShader(this._shader); // initialize the taper properties diff --git a/js/helper-classes/backup-delete/Materials/TunnelMaterial.js b/js/helper-classes/backup-delete/Materials/TunnelMaterial.js index 853a6a8d..ab69fec0 100644 --- a/js/helper-classes/backup-delete/Materials/TunnelMaterial.js +++ b/js/helper-classes/backup-delete/Materials/TunnelMaterial.js @@ -71,7 +71,7 @@ function TunnelMaterial() this._shader.init(); // set up the material node - this._materialNode = createMaterialNode("tunnelMaterial"); + this._materialNode = createMaterialNode("tunnelMaterial_" + world.generateUniqueNodeID()); this._materialNode.setShader(this._shader); this._time = 0; diff --git a/js/helper-classes/backup-delete/Materials/TwistMaterial.js b/js/helper-classes/backup-delete/Materials/TwistMaterial.js index b113965b..a52440e9 100644 --- a/js/helper-classes/backup-delete/Materials/TwistMaterial.js +++ b/js/helper-classes/backup-delete/Materials/TwistMaterial.js @@ -71,7 +71,7 @@ function TwistMaterial() this._shader.init(); // set up the material node - this._materialNode = createMaterialNode("twistMaterial"); + this._materialNode = createMaterialNode("twistMaterial_" + world.generateUniqueNodeID()); this._materialNode.setShader(this._shader); this._time = 0; diff --git a/js/helper-classes/backup-delete/Materials/TwistVertMaterial.js b/js/helper-classes/backup-delete/Materials/TwistVertMaterial.js index 853e895c..dd49555c 100644 --- a/js/helper-classes/backup-delete/Materials/TwistVertMaterial.js +++ b/js/helper-classes/backup-delete/Materials/TwistVertMaterial.js @@ -57,7 +57,7 @@ function TwistVertMaterial() this._shader.twistMe.color.set( this.getColor() ); // set up the material node - this._materialNode = createMaterialNode("twistVertMaterial"); + this._materialNode = createMaterialNode("twistVertMaterial_" + world.generateUniqueNodeID()); this._materialNode.setShader(this._shader); // initialize the twist vert properties diff --git a/js/helper-classes/backup-delete/Materials/UberMaterial.js b/js/helper-classes/backup-delete/Materials/UberMaterial.js index c7855c95..1652b4c9 100755 --- a/js/helper-classes/backup-delete/Materials/UberMaterial.js +++ b/js/helper-classes/backup-delete/Materials/UberMaterial.js @@ -30,6 +30,8 @@ function UberMaterial() this._specularPower = 32.0; this._environmentAmount = 0.2; // 0 .. 1 + this._MAX_LIGHTS = 4; + // set the default maps this._diffuseMapOb = { 'texture' : 'assets/images/rocky-diffuse.jpg', 'wrap' : 'REPEAT' }; this._normalMapOb = { 'texture' : 'assets/images/rocky-normal.jpg', 'wrap' : 'REPEAT' }; @@ -424,10 +426,79 @@ function UberMaterial() this._shader = this.buildUberShader( this._ubershaderCaps ); // set up the material node - this._materialNode = createMaterialNode("uberMaterial"); + this._materialNode = createMaterialNode("uberMaterial_" + world.generateUniqueNodeID()); this._materialNode.setShader(this._shader); }; + this.import = function( importStr ) + { + // limit the key searches to this material + var endKey = "endMaterial\n"; + var index = importStr.indexOf( endKey ); + index += endKey.length; + importStr = importStr.substr( index ); + } + + this.export = function() + { + // every material needs the base type and instance name + var exportStr = "material: " + this.getShaderName() + "\n"; + exportStr += "name: " + this.getName() + "\n"; + + var caps = this._ubershaderCaps; + + // export the material properties + if (typeof caps.material != 'undefined') + { + exportStr += "material: true\n"; + exportStr += "ambientColor: " + caps.material.ambientColor + "\n"; + exportStr += "diffuseColor: " + caps.material.diffuseColor + "\n"; + exportStr += "specularColor: " + caps.material.specularColor + "\n"; + exportStr += "specularPower: " + caps.material.specularPower + "\n"; + } + + if (typeof caps.lighting != 'undefined') + { + var light = caps.lighting['light' + i]; + var t; + for (var i=0; i