summaryrefslogtreecommitdiffstats
path: root/o3d/samples/o3djs
diff options
context:
space:
mode:
authorgman@google.com <gman@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-06-17 06:13:42 +0000
committergman@google.com <gman@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-06-17 06:13:42 +0000
commit3d476cf047d6a463d5706f70bfdf5e3787f863ee (patch)
treea14f7c154461bcd0f130998e208f4797ff97727c /o3d/samples/o3djs
parent16782af93aa5c1fe71bdf90b1d256c410d53bd2a (diff)
downloadchromium_src-3d476cf047d6a463d5706f70bfdf5e3787f863ee.zip
chromium_src-3d476cf047d6a463d5706f70bfdf5e3787f863ee.tar.gz
chromium_src-3d476cf047d6a463d5706f70bfdf5e3787f863ee.tar.bz2
Undoing gcl bug damage
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18598 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'o3d/samples/o3djs')
-rw-r--r--o3d/samples/o3djs/base.js11
-rw-r--r--o3d/samples/o3djs/effect.js33
-rw-r--r--o3d/samples/o3djs/particles.js392
-rw-r--r--o3d/samples/o3djs/serialization.js195
-rw-r--r--o3d/samples/o3djs/simple.js336
5 files changed, 166 insertions, 801 deletions
diff --git a/o3d/samples/o3djs/base.js b/o3d/samples/o3djs/base.js
index a68214c..a1cd85f 100644
--- a/o3d/samples/o3djs/base.js
+++ b/o3d/samples/o3djs/base.js
@@ -641,17 +641,6 @@ o3djs.base.maybeDeobfuscateFunctionName_ = function(name) {
};
/**
- * Makes one class inherit from another.
- * @param {!Object} subClass Class that wants to inherit.
- * @param {!Object} superClass Class to inherit from.
- */
-o3djs.base.inherit = function(subClass, superClass) {
- var tmpClass = function() { };
- tmpClass.prototype = superClass.prototype;
- subClass.prototype = new tmpClass();
-};
-
-/**
* Parses an error stack from an exception
* @param {!Exception} excp The exception to get a stack trace from.
* @return {!Array.<string>} An array of strings of the stack trace.
diff --git a/o3d/samples/o3djs/effect.js b/o3d/samples/o3djs/effect.js
index 3031cee..d9d22c4 100644
--- a/o3d/samples/o3djs/effect.js
+++ b/o3d/samples/o3djs/effect.js
@@ -737,36 +737,3 @@ o3djs.effect.attachStandardShader = function(pack,
}
};
-/**
- * Creates the uniform parameters needed for an Effect on the given ParamObject.
- * @param {!o3d.Pack} pack Pack to create extra objects in like Samplers and
- * ParamArrays.
- * @param {!o3d.Effect} effect Effect.
- * @param {!o3d.ParamObject} paramObject ParamObject on which to create Params.
- */
-o3djs.effect.createUniformParameters = function(pack, effect, paramObject) {
- effect.createUniformParameters(paramObject);
- var infos = effect.getParameterInfo();
- for (var ii = 0; ii < infos.length; ++ii) {
- var info = infos[ii];
- if (info.sasClassName.length == 0) {
- if (info.numElements > 0) {
- var paramArray = pack.createObject('ParamArray');
- var param = paramObject.getParam(info.name);
- param.value = paramArray;
- paramArray.resize(info.numElements, info.className);
- if (info.className == 'o3d.ParamSampler') {
- for (var jj = 0; jj < info.numElements; ++jj) {
- var sampler = pack.createObject('Sampler');
- paramArray.getParam(jj).value = sampler;
- }
- }
- } else if (info.className == 'o3d.ParamSampler') {
- var sampler = pack.createObject('Sampler');
- var param = paramObject.getParam(info.name);
- param.value = sampler;
- }
- }
- }
-};
-
diff --git a/o3d/samples/o3djs/particles.js b/o3d/samples/o3djs/particles.js
index 2b95eda..075c363 100644
--- a/o3d/samples/o3djs/particles.js
+++ b/o3d/samples/o3djs/particles.js
@@ -127,7 +127,6 @@ o3djs.particles.FX_STRINGS = [
' output.colorMult = input.colorMult;\n' +
'\n' +
' float size = lerp(startSize, endSize, percentLife);\n' +
- ' size = (percentLife < 0 || percentLife > 1) ? 0 : size;\n' +
' float s = sin(spinStart + spinSpeed * localTime);\n' +
' float c = cos(spinStart + spinSpeed * localTime);\n' +
'\n' +
@@ -240,7 +239,6 @@ o3djs.particles.FX_STRINGS = [
' float3 basisZ = viewInverse[1].xyz;\n' +
'\n' +
' float size = lerp(startSize, endSize, percentLife);\n' +
- ' size = (percentLife < 0 || percentLife > 1) ? 0 : size;\n' +
' float s = sin(spinStart + spinSpeed * localTime);\n' +
' float c = cos(spinStart + spinSpeed * localTime);\n' +
'\n' +
@@ -271,18 +269,6 @@ o3djs.particles.FX_STRINGS = [
'// #o3d MatrixLoadOrder RowMajor\n'}];
/**
- * Corner values.
- * @private
- * @type {!Array.<!Array.<number>>}
- */
-o3djs.particles.CORNERS_ = [
- [-0.5, -0.5],
- [+0.5, -0.5],
- [+0.5, +0.5],
- [-0.5, +0.5]];
-
-
-/**
* Creates a particle system.
* You only need one of these to run multiple emitters of different types
* of particles.
@@ -690,42 +676,6 @@ o3djs.particles.ParticleSystem.prototype.createParticleEmitter =
};
/**
- * Creates a Trail particle emitter.
- * You can use this for jet exhaust, etc...
- * @param {!o3d.Transform} parent Transform to put emitter on.
- * @param {number} maxParticles Maximum number of particles to appear at once.
- * @param {!o3djs.particles.ParticleSpec} parameters The parameters used to
- * generate particles.
- * @param {!o3d.Texture} opt_texture The texture to use for the particles.
- * If you don't supply a texture a default is provided.
- * @param {!function(number, !o3djs.particles.ParticleSpec): void}
- * opt_perParticleParamSetter A function that is called for each particle to
- * allow it's parameters to be adjusted per particle. The number is the
- * index of the particle being created, in other words, if numParticles is
- * 20 this value will be 0 to 19. The ParticleSpec is a spec for this
- * particular particle. You can set any per particle value before returning.
- * @param {!o3d.ParamFloat} opt_clockParam A ParamFloat to be the clock for
- * the emitter.
- * @return {!o3djs.particles.Trail} A Trail object.
- */
-o3djs.particles.ParticleSystem.prototype.createTrail = function(
- parent,
- maxParticles,
- parameters,
- opt_texture,
- opt_perParticleParamSetter,
- opt_clockParam) {
- return new o3djs.particles.Trail(
- this,
- parent,
- maxParticles,
- parameters,
- opt_texture,
- opt_perParticleParamSetter,
- opt_clockParam);
-};
-
-/**
* A ParticleEmitter
* @constructor
* @param {!o3djs.particles.ParticleSystem} particleSystem The particle system
@@ -738,6 +688,7 @@ o3djs.particles.ParticleSystem.prototype.createTrail = function(
o3djs.particles.ParticleEmitter = function(particleSystem,
opt_texture,
opt_clockParam) {
+
opt_clockParam = opt_clockParam || particleSystem.clockParam;
var o3d = o3djs.base.o3d;
@@ -891,29 +842,23 @@ o3djs.particles.ParticleEmitter.prototype.setColorRamp = function(colorRamp) {
};
/**
- * Validates and adds missing particle parameters.
- * @param {!o3djs.particles.ParticleSpec} parameters The parameters to validate.
- */
-o3djs.particles.ParticleEmitter.prototype.validateParameters = function(
- parameters) {
- var defaults = new o3djs.particles.ParticleSpec();
- for (var key in parameters) {
- if (typeof defaults[key] === 'undefined') {
- throw 'unknown particle parameter "' + key + '"';
- }
- }
- for (var key in defaults) {
- if (typeof parameters[key] === 'undefined') {
- parameters[key] = defaults[key];
- }
- }
-};
-
-/**
- * Creates particles.
- * @private
- * @param {number} firstParticleIndex Index of first particle to create.
- * @param {number} numParticles The number of particles to create.
+ * Sets the parameters of the particle emitter.
+ *
+ * Each of these parameters are in pairs. The used to create a table
+ * of particle parameters. For each particle a specfic value is
+ * set like this
+ *
+ * particle.field = value + Math.random() - 0.5 * valueRange * 2;
+ *
+ * or in English
+ *
+ * particle.field = value plus or minus valueRange.
+ *
+ * So for example, if you wanted a value from 10 to 20 you'd pass 15 for value
+ * and 5 for valueRange because
+ *
+ * 15 + or - 5 = (10 to 20)
+ *
* @param {!o3djs.particles.ParticleSpec} parameters The parameters for the
* emitters.
* @param {!function(number, !o3djs.particles.ParticleSpec): void}
@@ -923,28 +868,42 @@ o3djs.particles.ParticleEmitter.prototype.validateParameters = function(
* 20 this value will be 0 to 19. The ParticleSpec is a spec for this
* particular particle. You can set any per particle value before returning.
*/
-o3djs.particles.ParticleEmitter.prototype.createParticles_ = function(
- firstParticleIndex,
- numParticles,
+o3djs.particles.ParticleEmitter.prototype.setParameters = function(
parameters,
opt_perParticleParamSetter) {
- var uvLifeTimeFrameStart = this.uvLifeTimeFrameStart_;
- var positionStartTime = this.positionStartTime_;
- var velocityStartSize = this.velocityStartSize_;
- var accelerationEndSize = this.accelerationEndSize_;
- var spinStartSpinSpeed = this.spinStartSpinSpeed_;
- var orientation = this.orientation_;
- var colorMults = this.colorMults_;
+ var defaults = new o3djs.particles.ParticleSpec();
+ for (var key in parameters) {
+ if (typeof defaults[key] === 'undefined') {
+ throw 'unknown particle parameter "' + key + '"';
+ }
+ defaults[key] = parameters[key];
+ }
+
+ var numParticles = defaults.numParticles;
+
+ var uvLifeTimeFrameStart = [];
+ var positionStartTime = [];
+ var velocityStartSize = [];
+ var accelerationEndSize = [];
+ var spinStartSpinSpeed = [];
+ var orientation = [];
+ var colorMults = [];
// Set the globals.
this.material.effect =
- this.particleSystem.effects[parameters.billboard ? 1 : 0];
- this.material.getParam('timeRange').value = parameters.timeRange;
- this.material.getParam('numFrames').value = parameters.numFrames;
- this.material.getParam('frameDuration').value = parameters.frameDuration;
- this.material.getParam('worldVelocity').value = parameters.worldVelocity;
+ this.particleSystem.effects[defaults.billboard ? 1 : 0];
+ this.material.getParam('timeRange').value = defaults.timeRange;
+ this.material.getParam('numFrames').value = defaults.numFrames;
+ this.material.getParam('frameDuration').value = defaults.frameDuration;
+ this.material.getParam('worldVelocity').value = defaults.worldVelocity;
this.material.getParam('worldAcceleration').value =
- parameters.worldAcceleration;
+ defaults.worldAcceleration;
+
+ var corners = [
+ [-0.5, -0.5],
+ [+0.5, -0.5],
+ [+0.5, +0.5],
+ [-0.5, +0.5]];
var random = this.particleSystem.randomFunction_;
@@ -952,7 +911,6 @@ o3djs.particles.ParticleEmitter.prototype.createParticles_ = function(
return (random() - 0.5) * range * 2;
};
- // TODO: change to not allocate.
var plusMinusVector = function(range) {
var v = [];
for (var ii = 0; ii < range.length; ++ii) {
@@ -963,106 +921,44 @@ o3djs.particles.ParticleEmitter.prototype.createParticles_ = function(
for (var ii = 0; ii < numParticles; ++ii) {
if (opt_perParticleParamSetter) {
- opt_perParticleParamSetter(ii, parameters);
+ opt_perParticleParamSetter(ii, defaults);
}
- var pLifeTime = parameters.lifeTime;
- var pStartTime = (parameters.startTime === null) ?
- (ii * parameters.lifeTime / numParticles) : parameters.startTime;
- var pFrameStart =
- parameters.frameStart + plusMinus(parameters.frameStartRange);
+ var pLifeTime = defaults.lifeTime;
+ var pStartTime = (defaults.startTime === null) ?
+ (ii * defaults.lifeTime / numParticles) : defaults.startTime;
+ var pFrameStart = defaults.frameStart + plusMinus(defaults.frameStartRange);
var pPosition = o3djs.math.addVector(
- parameters.position, plusMinusVector(parameters.positionRange));
+ defaults.position, plusMinusVector(defaults.positionRange));
var pVelocity = o3djs.math.addVector(
- parameters.velocity, plusMinusVector(parameters.velocityRange));
+ defaults.velocity, plusMinusVector(defaults.velocityRange));
var pAcceleration = o3djs.math.addVector(
- parameters.acceleration,
- plusMinusVector(parameters.accelerationRange));
+ defaults.acceleration, plusMinusVector(defaults.accelerationRange));
var pColorMult = o3djs.math.addVector(
- parameters.colorMult, plusMinusVector(parameters.colorMultRange));
- var pSpinStart =
- parameters.spinStart + plusMinus(parameters.spinStartRange);
- var pSpinSpeed =
- parameters.spinSpeed + plusMinus(parameters.spinSpeedRange);
- var pStartSize =
- parameters.startSize + plusMinus(parameters.startSizeRange);
- var pEndSize = parameters.endSize + plusMinus(parameters.endSizeRange);
- var pOrientation = parameters.orientation;
+ defaults.colorMult, plusMinusVector(defaults.colorMultRange));
+ var pSpinStart = defaults.spinStart + plusMinus(defaults.spinStartRange);
+ var pSpinSpeed = defaults.spinSpeed + plusMinus(defaults.spinSpeedRange);
+ var pStartSize = defaults.startSize + plusMinus(defaults.startSizeRange);
+ var pEndSize = defaults.endSize + plusMinus(defaults.endSizeRange);
+ var pOrientation = defaults.orientation;
// make each corner of the particle.
for (var jj = 0; jj < 4; ++jj) {
- var offset0 = (ii * 4 + jj) * 4;
- var offset1 = offset0 + 1;
- var offset2 = offset0 + 2;
- var offset3 = offset0 + 3;
-
- uvLifeTimeFrameStart[offset0] = o3djs.particles.CORNERS_[jj][0];
- uvLifeTimeFrameStart[offset1] = o3djs.particles.CORNERS_[jj][1];
- uvLifeTimeFrameStart[offset2] = pLifeTime;
- uvLifeTimeFrameStart[offset3] = pFrameStart;
-
- positionStartTime[offset0] = pPosition[0];
- positionStartTime[offset1] = pPosition[1];
- positionStartTime[offset2] = pPosition[2];
- positionStartTime[offset3] = pStartTime;
-
- velocityStartSize[offset0] = pVelocity[0];
- velocityStartSize[offset1] = pVelocity[1];
- velocityStartSize[offset2] = pVelocity[2];
- velocityStartSize[offset3] = pStartSize;
-
- accelerationEndSize[offset0] = pAcceleration[0];
- accelerationEndSize[offset1] = pAcceleration[1];
- accelerationEndSize[offset2] = pAcceleration[2];
- accelerationEndSize[offset3] = pEndSize;
-
- spinStartSpinSpeed[offset0] = pSpinStart;
- spinStartSpinSpeed[offset1] = pSpinSpeed;
- spinStartSpinSpeed[offset2] = 0;
- spinStartSpinSpeed[offset3] = 0;
-
- orientation[offset0] = pOrientation[0];
- orientation[offset1] = pOrientation[1];
- orientation[offset2] = pOrientation[2];
- orientation[offset3] = pOrientation[3];
-
- colorMults[offset0] = pColorMult[0];
- colorMults[offset1] = pColorMult[1];
- colorMults[offset2] = pColorMult[2];
- colorMults[offset3] = pColorMult[3];
+ uvLifeTimeFrameStart.push(corners[jj][0], corners[jj][1], pLifeTime,
+ pFrameStart);
+ positionStartTime.push(
+ pPosition[0], pPosition[1], pPosition[2], pStartTime);
+ velocityStartSize.push(
+ pVelocity[0], pVelocity[1], pVelocity[2], pStartSize);
+ accelerationEndSize.push(
+ pAcceleration[0], pAcceleration[1], pAcceleration[2], pEndSize);
+ spinStartSpinSpeed.push(pSpinStart, pSpinSpeed, 0, 0);
+ orientation.push(
+ pOrientation[0], pOrientation[1], pOrientation[2], pOrientation[3]);
+ colorMults.push(
+ pColorMult[0], pColorMult[1], pColorMult[2], pColorMult[3]);
}
}
- firstParticleIndex *= 4;
- this.uvLifeTimeFrameStartField_.setAt(
- firstParticleIndex,
- uvLifeTimeFrameStart);
- this.positionStartTimeField_.setAt(
- firstParticleIndex,
- positionStartTime);
- this.velocityStartSizeField_.setAt(
- firstParticleIndex,
- velocityStartSize);
- this.accelerationEndSizeField_.setAt(
- firstParticleIndex,
- accelerationEndSize);
- this.spinStartSpinSpeedField_.setAt(
- firstParticleIndex,
- spinStartSpinSpeed);
- this.orientationField_.setAt(
- firstParticleIndex,
- orientation);
- this.colorMultField_.setAt(
- firstParticleIndex,
- colorMults);
-};
-
-/**
- * Allocates particles.
- * @private
- * @param {number} numParticles Number of particles to allocate.
- */
-o3djs.particles.ParticleEmitter.prototype.allocateParticles_ = function(
- numParticles) {
if (this.vertexBuffer_.numElements != numParticles * 4) {
this.vertexBuffer_.allocateElements(numParticles * 4);
@@ -1074,65 +970,21 @@ o3djs.particles.ParticleEmitter.prototype.allocateParticles_ = function(
indices.push(startIndex + 0, startIndex + 2, startIndex + 3);
}
this.indexBuffer_.set(indices);
-
- // We keep these around to avoid memory allocations for trails.
- this.uvLifeTimeFrameStart_ = [];
- this.positionStartTime_ = [];
- this.velocityStartSize_ = [];
- this.accelerationEndSize_ = [];
- this.spinStartSpinSpeed_ = [];
- this.orientation_ = [];
- this.colorMults_ = [];
}
+ this.uvLifeTimeFrameStartField_.setAt(0, uvLifeTimeFrameStart);
+ this.positionStartTimeField_.setAt(0, positionStartTime);
+ this.velocityStartSizeField_.setAt(0, velocityStartSize);
+ this.accelerationEndSizeField_.setAt(0, accelerationEndSize);
+ this.spinStartSpinSpeedField_.setAt(0, spinStartSpinSpeed);
+ this.orientationField_.setAt(0, orientation);
+ this.colorMultField_.setAt(0, colorMults);
+
this.primitive_.numberPrimitives = numParticles * 2;
this.primitive_.numberVertices = numParticles * 4;
};
/**
- * Sets the parameters of the particle emitter.
- *
- * Each of these parameters are in pairs. The used to create a table
- * of particle parameters. For each particle a specfic value is
- * set like this
- *
- * particle.field = value + Math.random() - 0.5 * valueRange * 2;
- *
- * or in English
- *
- * particle.field = value plus or minus valueRange.
- *
- * So for example, if you wanted a value from 10 to 20 you'd pass 15 for value
- * and 5 for valueRange because
- *
- * 15 + or - 5 = (10 to 20)
- *
- * @param {!o3djs.particles.ParticleSpec} parameters The parameters for the
- * emitters.
- * @param {!function(number, !o3djs.particles.ParticleSpec): void}
- * opt_perParticleParamSetter A function that is called for each particle to
- * allow it's parameters to be adjusted per particle. The number is the
- * index of the particle being created, in other words, if numParticles is
- * 20 this value will be 0 to 19. The ParticleSpec is a spec for this
- * particular particle. You can set any per particle value before returning.
- */
-o3djs.particles.ParticleEmitter.prototype.setParameters = function(
- parameters,
- opt_perParticleParamSetter) {
- this.validateParameters(parameters);
-
- var numParticles = parameters.numParticles;
-
- this.allocateParticles_(numParticles);
-
- this.createParticles_(
- 0,
- numParticles,
- parameters,
- opt_perParticleParamSetter);
-};
-
-/**
* Creates a OneShot particle emitter instance.
* You can use this for dust puffs, explosions, fireworks, etc...
* @param {!o3d.Transform} opt_parent The parent for the oneshot.
@@ -1197,81 +1049,3 @@ o3djs.particles.OneShot.prototype.trigger = function(opt_position, opt_parent) {
this.transform.visible = true;
this.timeOffsetParam_.value = this.emitter_.clockParam.value;
};
-
-/**
- * A type of emitter to use for particle effects that leave trails like exhaust.
- * @constructor
- * @param {!o3djs.particles.ParticleSystem} particleSystem The particle system
- * to manage this emitter.
- * @param {!o3d.Transform} parent Transform to put emitter on.
- * @param {number} maxParticles Maximum number of particles to appear at once.
- * @param {!o3djs.particles.ParticleSpec} parameters The parameters used to
- * generate particles.
- * @param {!o3d.Texture} opt_texture The texture to use for the particles.
- * If you don't supply a texture a default is provided.
- * @param {!function(number, !o3djs.particles.ParticleSpec): void}
- * opt_perParticleParamSetter A function that is called for each particle to
- * allow it's parameters to be adjusted per particle. The number is the
- * index of the particle being created, in other words, if numParticles is
- * 20 this value will be 0 to 19. The ParticleSpec is a spec for this
- * particular particle. You can set any per particle value before returning.
- * @param {!o3d.ParamFloat} opt_clockParam A ParamFloat to be the clock for
- * the emitter.
- */
-o3djs.particles.Trail = function(
- particleSystem,
- parent,
- maxParticles,
- parameters,
- opt_texture,
- opt_perParticleParamSetter,
- opt_clockParam) {
- o3djs.particles.ParticleEmitter.call(
- this, particleSystem, opt_texture, opt_clockParam);
-
- var pack = particleSystem.pack;
-
- this.allocateParticles_(maxParticles);
- this.validateParameters(parameters);
-
- this.parameters = parameters;
- this.perParticleParamSetter = opt_perParticleParamSetter;
- this.birthIndex_ = 0;
- this.maxParticles_ = maxParticles;
-
- /**
- * Transform for OneShot.
- * @type {!o3d.Transform}
- */
- this.transform = pack.createObject('Transform');
- this.transform.addShape(this.shape);
-
- this.transform.parent = parent;
-};
-
-o3djs.base.inherit(o3djs.particles.Trail, o3djs.particles.ParticleEmitter);
-
-/**
- * Births particles from this Trail.
- * @param {!o3djs.math.Vector3} position Position to birth particles at.
- */
-o3djs.particles.Trail.prototype.birthParticles = function(position) {
- var numParticles = this.parameters.numParticles;
- this.parameters.startTime = this.clockParam.value;
- this.parameters.position = position;
- while (this.birthIndex_ + numParticles >= this.maxParticles_) {
- var numParticlesToEnd = this.maxParticles_ - this.birthIndex_;
- this.createParticles_(this.birthIndex_,
- numParticlesToEnd,
- this.parameters,
- this.perParticleParamSetter);
- numParticles -= numParticlesToEnd;
- this.birthIndex_ = 0;
- }
- this.createParticles_(this.birthIndex_,
- numParticles,
- this.parameters,
- this.perParticleParamSetter);
- this.birthIndex_ += numParticles;
-};
-
diff --git a/o3d/samples/o3djs/serialization.js b/o3d/samples/o3djs/serialization.js
index 4e00f84..a8b4ea5 100644
--- a/o3d/samples/o3djs/serialization.js
+++ b/o3d/samples/o3djs/serialization.js
@@ -65,39 +65,13 @@ o3djs.serialization.supportedVersion = 5;
*/
o3djs.serialization.Options = goog.typedef;
-o3djs.serialization.SceneInfo = function() {
- /**
- * Extra information from json file.
- * type {!Object}
- */
- // TODO: It's probably better to just put extra info in a separate file
- // in the archive. Though, maybe the code in this file should look it up
- // like look for 'extra.json' and attach it here, saving the user from
- // having to do it manually.
- this.extra = { };
-
- /**
- * The json that represents the parts the need to be created to make an
- * instance of the scene.
- * type {!Object}
- */
- this.sceneJson = { };
-
- /**
- * Objects by Id that can be reused for instancing.
- * type {!Array.<!Object>}
- */
- this.objectsById_ = [];
-};
-
/**
* A Deserializer incrementally deserializes a transform graph.
* @constructor
- * @param {!o3djs.io.archiveInfo} archiveInfo Archive to load from.
* @param {!o3d.Pack} pack The pack to deserialize into.
* @param {!Object} json An object tree conforming to the JSON rules.
*/
-o3djs.serialization.Deserializer = function(archiveInfo, pack, json) {
+o3djs.serialization.Deserializer = function(pack, json) {
/**
* The pack to deserialize into.
* @type {!o3d.Pack}
@@ -112,16 +86,9 @@ o3djs.serialization.Deserializer = function(archiveInfo, pack, json) {
/**
* The archive from which assets referenced from JSON are retreived.
- * @type {!o3djs.io.ArchiveInfo}
+ * @type {o3djs.io.ArchiveInfo}
*/
- this.archiveInfo = archiveInfo;
-
- /**
- * Array of objects by id that have already been created during a previous
- * deserialization.
- * @type {!Array.<!Object>}
- */
- this.preLoadedObjectsById = [];
+ this.archiveInfo = null;
/**
* A map from classname to a function that will create
@@ -173,12 +140,13 @@ o3djs.serialization.Deserializer = function(archiveInfo, pack, json) {
}
return object;
},
+
'o3d.Texture2D': function(deserializer, json) {
if ('o3d.uri' in json.params) {
var uri = json.params['o3d.uri'].value;
var rawData = deserializer.archiveInfo.getFileByURI(uri);
if (!rawData) {
- throw 'Could not find texture "' + uri + '" in the archive';
+ throw 'Could not find texture ' + uri + ' in the archive';
}
return deserializer.pack.createTextureFromRawData(
rawData,
@@ -200,7 +168,9 @@ o3djs.serialization.Deserializer = function(archiveInfo, pack, json) {
if (!rawData) {
throw 'Could not find texture ' + uri + ' in the archive';
}
- return deserializer.pack.createTextureFromRawData(rawData, true);
+ return deserializer.pack.createTextureFromRawData(
+ rawData,
+ true);
} else {
return deserializer.pack.createTextureCUBE(
json.custom.edgeLength,
@@ -253,13 +223,13 @@ o3djs.serialization.Deserializer = function(archiveInfo, pack, json) {
if ('custom' in json) {
for (var i = 0; i < json.custom.vertexStreams.length; ++i) {
var streamJson = json.custom.vertexStreams[i];
- var field = deserializer.getO3DObjectById(streamJson.stream.field);
+ var field = deserializer.getObjectById(streamJson.stream.field);
object.setVertexStream(streamJson.stream.semantic,
streamJson.stream.semanticIndex,
field,
streamJson.stream.startIndex);
if ('bind' in streamJson) {
- var source = deserializer.getO3DObjectById(streamJson.bind);
+ var source = deserializer.getObjectById(streamJson.bind);
object.bindStream(source,
streamJson.stream.semantic,
streamJson.stream.semanticIndex);
@@ -272,13 +242,13 @@ o3djs.serialization.Deserializer = function(archiveInfo, pack, json) {
if ('custom' in json) {
for (var i = 0; i < json.custom.vertexStreams.length; ++i) {
var streamJson = json.custom.vertexStreams[i];
- var field = deserializer.getO3DObjectById(streamJson.stream.field);
+ var field = deserializer.getObjectById(streamJson.stream.field);
object.setVertexStream(streamJson.stream.semantic,
streamJson.stream.semanticIndex,
field,
streamJson.stream.startIndex);
if ('bind' in streamJson) {
- var source = deserializer.getO3DObjectById(streamJson.bind);
+ var source = deserializer.getObjectById(streamJson.bind);
object.bindStream(source,
streamJson.stream.semantic,
streamJson.stream.semanticIndex);
@@ -303,27 +273,19 @@ o3djs.serialization.Deserializer = function(archiveInfo, pack, json) {
}
/**
- * An array of all O3D objects deserialized so far, indexed by object id. Id
- * zero means null.
+ * An array of all objects deserialized so far, indexed by object id. Id zero
+ * means null.
* @type {!Array.<(Object|undefined)>}
* @private
*/
- this.o3dObjectsById_ = [null];
-
- /**
- * An array of O3D objects deserialized so far, indexed by position in the
- * JSON.
- * @type {!Array.<Object>}
- * @private
- */
- this.o3dObjectsByIndex_ = [];
+ this.objectsById_ = [null];
/**
- * An array of all json objects by id.
+ * An array of objects deserialized so far, indexed by position in the JSON.
* @type {!Array.<Object>}
* @private
*/
- this.jsonObjectsById_ = [];
+ this.objectsByIndex_ = [];
/**
* Array of all classes present in the JSON.
@@ -331,15 +293,8 @@ o3djs.serialization.Deserializer = function(archiveInfo, pack, json) {
* @private
*/
this.classNames_ = [];
-
- // TODO: This may be too slow and need to be moved to a phase.
for (var className in json.objects) {
this.classNames_.push(className);
- var jsonObjects = json.objects[className];
- for (var jj = 0; jj < jsonObjects.length; ++jj) {
- var jsonObject = jsonObjects[jj];
- this.jsonObjectsById_[jsonObject.id] = jsonObject;
- }
}
/**
@@ -378,8 +333,8 @@ o3djs.serialization.Deserializer = function(archiveInfo, pack, json) {
* @param {number} id The id to lookup.
* @return {(Object|undefined)} The object with the given id.
*/
-o3djs.serialization.Deserializer.prototype.getO3DObjectById = function(id) {
- return this.o3dObjectsById_[id];
+o3djs.serialization.Deserializer.prototype.getObjectById = function(id) {
+ return this.objectsById_[id];
};
/**
@@ -391,7 +346,7 @@ o3djs.serialization.Deserializer.prototype.getO3DObjectById = function(id) {
*/
o3djs.serialization.Deserializer.prototype.addObject = function(
id, object) {
- this.o3dObjectsById_[id] = object;
+ this.objectsById_[id] = object;
};
/**
@@ -418,7 +373,7 @@ o3djs.serialization.Deserializer.prototype.deserializeValue = function(
var refId = valueAsObject['ref'];
if (refId !== undefined) {
- var referenced = this.getO3DObjectById(refId);
+ var referenced = this.objectsById_[refId];
if (referenced === undefined) {
throw 'Could not find object with id ' + refId + '.';
}
@@ -449,7 +404,7 @@ o3djs.serialization.Deserializer.prototype.setParamValue_ = function(
var bindId = propertyJson['bind'];
if (bindId !== undefined) {
- var referenced = this.getO3DObjectById(bindId);
+ var referenced = this.objectsById_[bindId];
if (referenced === undefined) {
throw 'Could not find output param with id ' + bindId + '.';
}
@@ -477,7 +432,7 @@ o3djs.serialization.Deserializer.prototype.createAndIdentifyParam_ =
var paramId = propertyJson['id'];
if (paramId !== undefined && param !== null) {
- this.o3dObjectsById_[paramId] = param;
+ this.objectsById_[paramId] = param;
}
};
@@ -503,7 +458,7 @@ o3djs.serialization.Deserializer.prototype.createObjectsPhase_ =
var objectJson = classJson[this.nextObjectIndex_];
var object = undefined;
if ('id' in objectJson) {
- object = this.getO3DObjectById(objectJson.id);
+ object = this.objectsById_[objectJson.id];
}
if (object === undefined) {
if (className in this.createCallbacks) {
@@ -512,9 +467,9 @@ o3djs.serialization.Deserializer.prototype.createObjectsPhase_ =
object = this.pack.createObject(className);
}
}
- this.o3dObjectsByIndex_[this.globalObjectIndex_++] = object;
+ this.objectsByIndex_[this.globalObjectIndex_++] = object;
if ('id' in objectJson) {
- this.o3dObjectsById_[objectJson.id] = object;
+ this.objectsById_[objectJson.id] = object;
}
if ('params' in objectJson) {
if ('length' in objectJson.params) {
@@ -561,7 +516,7 @@ o3djs.serialization.Deserializer.prototype.setPropertiesPhase_ = function(
return;
var objectJson = classJson[this.nextObjectIndex_];
- var object = this.o3dObjectsByIndex_[this.globalObjectIndex_++];
+ var object = this.objectsByIndex_[this.globalObjectIndex_++];
if ('properties' in objectJson) {
for (var propertyName in objectJson.properties) {
if (propertyName in object) {
@@ -691,26 +646,23 @@ o3djs.serialization.Deserializer.prototype.runBackground = function(
* called run that does a fixed amount of work and returns.
* It returns true until the transform graph is fully deserialized.
* It returns false from then on.
- * @param {!o3djs.io.archiveInfo} archiveInfo Archive to load from.
* @param {!o3d.Pack} pack The pack to create the deserialized
* objects in.
* @param {!Object} json An object tree conforming to the JSON rules.
* @return {!o3djs.serialization.Deserializer} A deserializer object.
*/
-o3djs.serialization.createDeserializer = function(archiveInfo, pack, json) {
- return new o3djs.serialization.Deserializer(archiveInfo, pack, json);
+o3djs.serialization.createDeserializer = function(pack, json) {
+ return new o3djs.serialization.Deserializer(pack, json);
};
/**
* Deserializes a transform graph.
- * @param {!o3djs.io.archiveInfo} archiveInfo Archive to load from.
* @param {!o3d.Pack} pack The pack to create the deserialized
* objects in.
* @param {!Object} json An object tree conforming to the JSON rules.
*/
-o3djs.serialization.deserialize = function(archiveInfo, pack, json) {
- var deserializer = o3djs.serialization.createDeserializer(
- archiveInfo, pack, json);
+o3djs.serialization.deserialize = function(pack, json) {
+ var deserializer = o3djs.serialization.createDeserializer(pack, json);
deserializer.run();
};
@@ -723,87 +675,6 @@ o3djs.serialization.deserialize = function(archiveInfo, pack, json) {
* @param {!o3d.Client} client An O3D client object.
* @param {!o3d.Pack} pack The pack to create the deserialized objects
* in.
- * @param {!function(!o3djs.serialization.SceneInfo, *): void} callback A
- * function that will be called when deserialization is finished. It will be
- * passed an o3djs.serialization.SceneInfo, and an exception which will be
- * null on success.
- * @param {!o3djs.serialization.Options} opt_options Options.
- */
-o3djs.serialization.deserializeArchiveForInstaning = function(archiveInfo,
- sceneJsonUri,
- client,
- pack,
- callback,
- opt_options) {
- opt_options = opt_options || { };
- var jsonFile = archiveInfo.getFileByURI(sceneJsonUri);
- if (!jsonFile) {
- throw 'Could not find ' + sceneJsonUri + ' in archive';
- }
- var parsed = eval('(' + jsonFile.stringValue + ')');
- var deserializer = o3djs.serialization.createDeserializer(
- archiveInfo, pack, parsed);
-
- var names = {
- 'o3d.VertexBuffer': true,
- 'o3d.SourceBuffer': true,
- 'o3d.IndexBuffer': true,
- 'o3d.Skin': true,
- 'o3d.Curve': true,
- 'o3d.Effect': true,
- 'o3d.Material': true,
- };
-
- var finishCallback = function(pack, exception) {
- if (!exception) {
- var objects = pack.getObjects('o3d.animSourceOwner', 'o3d.ParamObject');
- if (objects.length > 0) {
- // Rebind the output connections of the animSource to the user's param.
- if (opt_options.opt_animSource) {
- var animSource = objects[0].getParam('animSource');
- var outputConnections = animSource.outputConnections;
- for (var ii = 0; ii < outputConnections.length; ++ii) {
- outputConnections[ii].bind(opt_options.opt_animSource);
- }
- }
- // Remove special object from pack.
- for (var ii = 0; ii < objects.length; ++ii) {
- pack.removeObject(objects[ii]);
- }
- }
- }
- callback(pack, parent, exception);
- };
-
- if (opt_options.opt_async) {
- // TODO: Remove the 5. See deserializer.runBackground comments.
- deserializer.runBackground(client, pack, 5, finishCallback);
- } else {
- var exception = null;
- var errorCollector = o3djs.error.createErrorCollector(client);
- try {
- deserializer.run();
- } catch (e) {
- exception = e;
- }
- if (errorCollector.errors.length > 0) {
- exception = errorCollector.errors.join('\n') +
- (exception ? ('\n' + exception.toString()) : '');
- }
- errorCollector.finish();
- finishCallback(pack, exception);
- }
-};
-
-/**
- * Deserializes a single json object named 'scene.json' from a loaded
- * o3djs.io.ArchiveInfo.
- * @param {!o3djs.io.archiveInfo} archiveInfo Archive to load from.
- * @param {string} sceneJsonUri The relative URI of the scene JSON file within
- * the archive.
- * @param {!o3d.Client} client An O3D client object.
- * @param {!o3d.Pack} pack The pack to create the deserialized objects
- * in.
* @param {!o3d.Transform} parent Transform to parent loaded stuff from.
* @param {!function(!o3d.Pack, !o3d.Transform, *): void} callback A function
* that will be called when deserialization is finished. It will be passed
@@ -824,10 +695,10 @@ o3djs.serialization.deserializeArchive = function(archiveInfo,
throw 'Could not find ' + sceneJsonUri + ' in archive';
}
var parsed = eval('(' + jsonFile.stringValue + ')');
- var deserializer = o3djs.serialization.createDeserializer(
- archiveInfo, pack, parsed);
+ var deserializer = o3djs.serialization.createDeserializer(pack, parsed);
deserializer.addObject(parsed.o3d_rootObject_root, parent);
+ deserializer.archiveInfo = archiveInfo;
var finishCallback = function(pack, exception) {
if (!exception) {
diff --git a/o3d/samples/o3djs/simple.js b/o3d/samples/o3djs/simple.js
index 9aa0157..8bb729b 100644
--- a/o3d/samples/o3djs/simple.js
+++ b/o3d/samples/o3djs/simple.js
@@ -29,6 +29,7 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+
/**
* @fileoverview This file contains functions to make it extremely simple
* to get something on the screen in o3d. The disadvantage is it
@@ -86,8 +87,6 @@ o3djs.require('o3djs.rendergraph');
o3djs.require('o3djs.pack');
o3djs.require('o3djs.primitives');
o3djs.require('o3djs.io');
-o3djs.require('o3djs.scene');
-o3djs.require('o3djs.camera');
/**
* A Module for using o3d in a very simple way.
@@ -141,52 +140,16 @@ o3djs.simple.create = function(clientObject) {
* @param {!Element} clientObject O3D.Plugin Object.
*/
o3djs.simple.SimpleInfo = function(clientObject) {
- /**
- * The O3D Element.
- * @type {!Element}
- */
this.clientObject = clientObject;
-
- /**
- * The O3D namespace object.
- * @type {!o3d}
- */
this.o3d = clientObject.o3d;
-
- /**
- * The client object used by the SimpleInfo
- * @type {!o3d.Client}
- */
+ this.math = o3djs.math;
this.client = clientObject.client;
-
- /**
- * The main pack for this SimpleInfo.
- * @type {!o3d.Pack}
- */
this.pack = this.client.createPack();
-
- /**
- * The root transform for this SimpleInfo
- * @type {!o3d.Transform}
- */
- this.root = this.pack.createObject('Transform');
-
- /**
- * The ViewInfo created by this SimpleInfo.
- * @type {!o3d.ViewInfo}
- */
this.viewInfo = o3djs.rendergraph.createBasicView(
this.pack,
- this.root,
+ this.client.root,
this.client.renderGraphRoot);
-
-
- /**
- * The list of objects that need to have an update function called.
- * @private
- * @type {!Array.<!o3djs.simple.SimpleObject>}
- */
- this.updateObjects_ = { };
+ this.id = 0;
// Create 1 non-textured material and 1 textured material.
//
@@ -208,7 +171,7 @@ o3djs.simple.SimpleInfo = function(clientObject) {
[0, 0, 0],
'phong');
- this.nonTexturedEffect_ = material.effect;
+ this.nonTexturedEffect = material.effect;
this.pack.removeObject(material);
var material = this.pack.createObject('Material');
@@ -218,7 +181,7 @@ o3djs.simple.SimpleInfo = function(clientObject) {
[0, 0, 0],
'phong');
- this.texturedEffect_ = material.effect;
+ this.texturedEffect = material.effect;
this.pack.removeObject(material);
this.globalParamObject = this.pack.createObject('ParamObject');
@@ -232,7 +195,7 @@ o3djs.simple.SimpleInfo = function(clientObject) {
// Attempt to setup a resonable default perspective matrix.
this.zNear = 0.1;
this.zFar = 1000;
- this.fieldOfView = o3djs.math.degToRad(45);
+ this.fieldOfView = this.math.degToRad(45);
this.setPerspectiveMatrix_();
// Attempt to setup a resonable default view.
@@ -240,50 +203,22 @@ o3djs.simple.SimpleInfo = function(clientObject) {
this.cameraTarget = [0, 0, 0];
this.cameraUp = [0, 1, 0];
this.setViewMatrix_();
-
- var that = this;
-
- this.client.setRenderCallback(function(renderEvent) {
- that.onRender(renderEvent.elapsedTime);
- });
};
/**
* Creates a SimpleShape. A SimpleShape manages a transform with 1 shape that
* holds 1 primitive and 1 unique material.
* @param {!o3d.Shape} shape that holds 1 primitive and 1 unique material.
+ * @param {!o3d.Material} material assigned to shape.
* @return {!o3djs.simple.SimpleShape} the created SimpleShape.
*/
-o3djs.simple.SimpleInfo.prototype.createSimpleShape = function(shape) {
+o3djs.simple.SimpleInfo.prototype.createSimpleShape = function(shape,
+ material) {
shape.createDrawElements(this.pack, null);
var transform = this.pack.createObject('Transform');
- transform.parent = this.root;
+ transform.parent = this.client.root;
transform.addShape(shape);
- return new o3djs.simple.SimpleShape(this, transform);
-};
-
-o3djs.simple.SimpleInfo.prototype.onRender = function(elapsedTime) {
- for (var simpleObject in this.updateObjects_) {
- simpleObject.onUpdate(elapsedTime);
- }
-};
-
-/**
- * Register an object for updating. You should not call this directly.
- * @param {!o3djs.simple.SimpleObject} simpleObject SimpleObject to register.
- */
-o3djs.simple.SimpleInfo.prototype.registerObjectForUpdate =
- function (simpleObject) {
- this.updateObjects_[simpleObject] = true;
-};
-
-/**
- * Unregister an object for updating. You should not call this directly.
- * @param {!o3djs.simple.SimpleObject} simpleObject SimpleObject to register.
- */
-o3djs.simple.SimpleInfo.prototype.unregisterObjectForUpdate =
- function (simpleObject) {
- delete this.updateObjects_[simpleObject];
+ return new o3djs.simple.SimpleShape(this, transform, material);
};
/**
@@ -291,7 +226,7 @@ o3djs.simple.SimpleInfo.prototype.unregisterObjectForUpdate =
* @private
*/
o3djs.simple.SimpleInfo.prototype.setPerspectiveMatrix_ = function() {
- this.viewInfo.drawContext.projection = o3djs.math.matrix4.perspective(
+ this.viewInfo.drawContext.projection = this.math.matrix4.perspective(
this.fieldOfView,
this.client.width / this.client.height,
this.zNear,
@@ -303,7 +238,7 @@ o3djs.simple.SimpleInfo.prototype.setPerspectiveMatrix_ = function() {
* @private
*/
o3djs.simple.SimpleInfo.prototype.setViewMatrix_ = function() {
- this.viewInfo.drawContext.view = o3djs.math.matrix4.lookAt(
+ this.viewInfo.drawContext.view = this.math.matrix4.lookAt(
this.cameraPosition,
this.cameraTarget,
this.cameraUp);
@@ -409,7 +344,7 @@ o3djs.simple.SimpleInfo.prototype.createMaterialFromEffect =
*/
o3djs.simple.SimpleInfo.prototype.createNonTexturedMaterial =
function(type) {
- var material = this.createMaterialFromEffect(this.nonTexturedEffect_);
+ var material = this.createMaterialFromEffect(this.nonTexturedEffect);
material.getParam('diffuse').set(1, 1, 1, 1);
material.getParam('emissive').set(0, 0, 0, 1);
material.getParam('ambient').set(0, 0, 0, 1);
@@ -424,7 +359,7 @@ o3djs.simple.SimpleInfo.prototype.createNonTexturedMaterial =
*/
o3djs.simple.SimpleInfo.prototype.createTexturedMaterial =
function(type) {
- var material = this.createMaterialFromEffect(this.texturedEffect_);
+ var material = this.createMaterialFromEffect(this.texturedEffect);
var samplerParam = material.getParam('diffuseSampler');
var sampler = this.pack.createObject('Sampler');
samplerParam.value = sampler;
@@ -440,7 +375,7 @@ o3djs.simple.SimpleInfo.prototype.createTexturedMaterial =
o3djs.simple.SimpleInfo.prototype.createCube = function(size) {
var material = this.createNonTexturedMaterial('phong');
var shape = o3djs.primitives.createCube(this.pack, material, size);
- return this.createSimpleShape(shape);
+ return this.createSimpleShape(shape, material);
};
/**
@@ -460,7 +395,7 @@ o3djs.simple.SimpleInfo.prototype.createBox = function(width,
width,
height,
depth);
- return this.createSimpleShape(shape);
+ return this.createSimpleShape(shape, material);
};
/**
@@ -479,57 +414,35 @@ o3djs.simple.SimpleInfo.prototype.createSphere = function(radius,
radius,
smoothness * 2,
smoothness);
- return this.createSimpleShape(shape);
+ return this.createSimpleShape(shape, material);
};
/**
* Loads a scene from a URL.
+ * TODO: Implement
* @param {string} url Url of scene to load.
- * @param {!function(o3djs.simple.SimpleScene, *): void} a callback to
- * call when the scene is loaded. The first argument will be null if the
- * scene failed to load and last object will be an exception.
- * @return {!o3djs.io.loadInfo}
+ * @return {!o3djs.simple.Scene} A Javascript object to manage the scene.
*/
-o3djs.simple.SimpleInfo.prototype.loadScene = function(url, callback) {
- var pack = this.client.createPack();
- var root = pack.createObject('Transform');
- var paramObject = pack.createObject('ParamObject');
- var animTimeParam = paramObject.createParam('animTime', 'ParamFloat');
- var that = this;
-
- var prepScene = function(pack, root, exception) {
- var simpleScene = null;
- if (exception) {
- pack.destroy();
- } else {
- simpleScene = new o3djs.simple.SimpleScene(
- that, url, pack, root, paramObject);
- }
- callback(simpleScene, exception);
- };
-
- return o3djs.scene.loadScene(
- this.client,
- pack,
- root,
- url,
- prepScene,
- {opt_animSource: animTimeParam});
+o3djs.simple.SimpleInfo.prototype.loadScene = function(url) {
+ if (true) {
+ throw('not implemented');
+ }
+ return null;
};
/**
* Moves the camera so everything in the current scene is visible.
*/
o3djs.simple.SimpleInfo.prototype.viewAll = function() {
- var bbox = o3djs.util.getBoundingBoxOfTree(this.root);
- var target = o3djs.math.lerpVector(bbox.minExtent, bbox.maxExtent, 0.5);
+ var bbox = o3djs.util.getBoundingBoxOfTree(this.client.root);
+ var target = this.math.lerpVector(bbox.minExtent, bbox.maxExtent, 0.5);
this.setCameraTarget(target[0], target[1], target[2]);
// TODO: Refactor this so it takes a vector from the current camera
// position to the center of the scene and moves the camera along that
// vector away from the center of the scene until for the given fieldOfView
// everything is visible.
- var diag = o3djs.math.distance(bbox.minExtent, bbox.maxExtent);
- var eye = o3djs.math.addVector(target, [
+ var diag = this.math.distance(bbox.minExtent, bbox.maxExtent);
+ var eye = this.math.addVector(target, [
bbox.maxExtent[0],
bbox.minExtent[1] + 0.5 * diag,
bbox.maxExtent[2]]);
@@ -538,100 +451,32 @@ o3djs.simple.SimpleInfo.prototype.viewAll = function() {
};
/**
- * An object for managing things simply.
+ * A SimpleShape manages a transform with 1 shape that holds 1 primitive
+ * and 1 unique material.
* @constructor
+ * @param {!o3djs.simple.SimpleInfo} simpleInfo SimpleInfo to manage this shape.
+ * @param {!o3d.Transform} transform Transform with 1 shape that holds 1
+ * primitive and 1 unique material.
+ * @param {!o3d.Material} material assigned to shape.
*/
-o3djs.simple.SimpleObject = function() {
-};
-
-/**
- * @param {!o3djs.simple.SimpleInfo} simpleInfo The SimpleInfo to manage this
- * object.
- * @param {!o3d.Transform} transform Transform that orients this object.
- */
-o3djs.simple.SimpleObject.prototype.init = function(simpleInfo, transform) {
+o3djs.simple.SimpleShape = function(simpleInfo, transform, material) {
/**
- * The SimpleInfo managing this object.
+ * The SimpleInfo managing this SimpleShape.
* @type {!o3djs.simple.SimpleInfo}
*/
this.simpleInfo = simpleInfo;
/**
- * The Transform that orients this object.
+ * The transform for this SimpleShape.
* @type {!o3d.Transform}
*/
this.transform = transform;
/**
- * The update callback for this object.
- * @private
- * @type {function(number): void}
+ * The material for this SimpleShape.
+ * @type {!o3d.Material}
*/
- this.updateCallback_ = null;
-
- /**
- * The pick callback for this object.
- * @private
- * @type {function(number): void}
- */
- this.pickCallback_ = null;
-};
-
-o3djs.simple.SimpleObject.prototype.onPicked = function(onPickedCallback) {
-};
-
-/**
- * Used to call the update callback on this object. You should not call this
- * directly. Use o3djs.simple.SimpleObject.setOnUpdate to add your own update
- * callback.
- * @param {number} elapsedTime ElapsedTime in seconds for this frame.
- * @see o3djs.simple.SimpleObject.setOnUpdate
- */
-o3djs.simple.SimpleObject.prototype.onUpdate = function(elapsedTime) {
- if (this.updateCallback_) {
- this.updateCallback_(elapsedTime);
- }
-};
-
-/**
- * Sets a function to be called every frame for this object.
- * @param {function(number): void} onUpdateCallback A function that is passed
- * the elapsed time in seconds. Pass in null to clear the callback function.
- * @return {function(number): void} The previous callback function.
- */
-o3djs.simple.SimpleObject.prototype.setOnUpdate = function(onUpdateCallback) {
- if (onUpdateCallback) {
- this.simpleInfo.registerObjectForUpdate(this);
- } else {
- this.simpleInfo.unregisterObjectForUpdate(this);
- }
- var oldCallback = this.updateCallback_;
- this.updateCallback_ = onUpdateCallback;
- return oldCallback;
-};
-
-/**
- * A SimpleShape manages a transform with 1 shape that holds 1 primitive
- * and 1 unique material.
- * @constructor
- * @extends o3djs.simple.SimpleObject
- * @param {!o3djs.simple.SimpleInfo} simpleInfo The SimpleInfo to manage this
- * shape.
- * @param {!o3d.Transform} transform Transform with 1 shape that holds 1
- * primitive and 1 unique material.
- */
-o3djs.simple.SimpleShape = function(simpleInfo, transform) {
- this.init(simpleInfo, transform);
-};
-
-o3djs.simple.SimpleShape.prototype = new o3djs.simple.SimpleObject();
-
-/**
- * Gets the current material for this shape.
- * @return {!o3d.Material} the material for this SimpleShape.
- */
-o3djs.simple.SimpleShape.prototype.getMaterial = function() {
- return this.transform.shapes[0].elements[0].material;
+ this.material = material;
};
/**
@@ -639,11 +484,10 @@ o3djs.simple.SimpleShape.prototype.getMaterial = function() {
* @param {!o3d.Material} material new material.
*/
o3djs.simple.SimpleShape.prototype.setMaterial = function(material) {
- var old_material = this.getMaterial();
- if (old_material != null) {
- this.simpleInfo.pack.removeObject(old_material);
- }
+ var old_material = this.material;
+ this.simpleInfo.pack.removeObject(old_material);
this.transform.shapes[0].elements[0].material = material;
+ this.material = material;
};
/**
@@ -655,7 +499,7 @@ o3djs.simple.SimpleShape.prototype.setMaterial = function(material) {
*/
o3djs.simple.SimpleShape.prototype.setDiffuseColor =
function(r, g, b, a) {
- var material = this.getMaterial();
+ var material = this.material;
material.getParam('diffuse').set(r, g, b, a);
if (a < 1) {
material.drawList = this.simpleInfo.viewInfo.zOrderedDrawList;
@@ -669,7 +513,7 @@ o3djs.simple.SimpleShape.prototype.setDiffuseColor =
* @return {o3d.Texture} The texture on this shape. May be null.
*/
o3djs.simple.SimpleShape.prototype.getTexture = function() {
- var material = this.getMaterial();
+ var material = this.material;
var samplerParam = material.getParam('diffuseSampler');
if (samplerParam.className == 'o3d.ParamSampler') {
return samplerParam.texture;
@@ -693,14 +537,14 @@ o3djs.simple.SimpleShape.prototype.loadTexture = function(url) {
function(texture, exception) {
if (!exception) {
// See if this is a textured material.
- var material = that.getMaterial();
- if (material.effect != that.simpleInfo.texturedEffect_) {
+ var material = that.material;
+ if (material.effect != that.simpleInfo.texturedEffect) {
// replace the material with a textured one.
var new_material = that.simpleInfo.createTexturedMaterial('phong');
new_material.copyParams(material);
// Reset the effect since copy Params just copied the non-textured
// one.
- new_material.effect = that.simpleInfo.texturedEffect_;
+ new_material.effect = that.simpleInfo.texturedEffect;
that.setMaterial(new_material);
material = new_material;
}
@@ -712,83 +556,3 @@ o3djs.simple.SimpleShape.prototype.loadTexture = function(url) {
});
};
-/**
- * An object to simply manage a scene.
- * @constructor
- * @extends o3djs.simple.SimpleObject
- * @param {!o3djs.simple.SimpleInfo} simpleInfo The SimpleInfo to manage this
- * scene.
- * @param {string} url Url scene was loaded from.
- * @param {!o3d.Pack} pack Pack that is managing scene.
- * @param {!o3d.Transform} root Root transform of scene.
- * @param {!o3d.ParamObject} paramObject the holds global parameters.
- */
-o3djs.simple.SimpleScene = function(
- simpleInfo, url, pack, root, paramObject) {
- this.init(simpleInfo, root);
- /**
- * The url this scene was loaded from.
- * @type {string}
- */
- this.url = url;
-
- /**
- * The pack managing this scene.
- * @type {!o3d.Pack}
- */
- this.pack = pack;
-
- /**
- * The param object holding global parameters for this scene.
- * @type {!o3d.Pack}
- */
- this.paramObject = paramObject;
-
- /**
- * The animation parameter for this scene.
- * @type {!o3d.ParamFloat}
- */
- this.animTimeParam = paramObject.getParam('animTime');
-
- o3djs.pack.preparePack(pack, simpleInfo.viewInfo);
-
- this.cameraInfos_ = o3djs.camera.getCameraInfos(
- root,
- simpleInfo.client.width,
- simpleInfo.client.height);
-
-
- /**
- * Binds a param if it exists.
- * @param {!o3d.ParamObject} paramObject The object that has the param.
- * @param {string} paramName name of param.
- * @param {!o3d.Param} sourceParam The param to bind to.
- */
- var bindParam = function(paramObject, paramName, sourceParam) {
- var param = paramObject.getParam(paramName);
- if (param) {
- param.bind(sourceParam);
- }
- }
-
- var materials = pack.getObjectsByClassName('o3d.Material');
- for (var m = 0; m < materials.length; ++m) {
- var material = materials[m];
- bindParam(material, 'lightWorldPos', simpleInfo.lightWorldPosParam);
- bindParam(material, 'lightColor', simpleInfo.lightColorParam);
- }
-
- this.transform.parent = this.simpleInfo.root;
-};
-
-o3djs.simple.SimpleScene.prototype = new o3djs.simple.SimpleObject();
-
-/**
- * Sets the animation time for the scene.
- * @param {number} time Animation time in seconds.
- */
-o3djs.simple.SimpleScene.prototype.setAnimTime = function(time) {
- this.animTimeParam.value = time;
-};
-
-