|
@@ -1,232 +1,5 @@
|
|
var BABYLON;
|
|
var BABYLON;
|
|
(function (BABYLON) {
|
|
(function (BABYLON) {
|
|
- var serializeLight = function (light) {
|
|
|
|
- var serializationObject = {};
|
|
|
|
- serializationObject.name = light.name;
|
|
|
|
- serializationObject.id = light.id;
|
|
|
|
- serializationObject.tags = BABYLON.Tags.GetTags(light);
|
|
|
|
- if (light instanceof BABYLON.PointLight) {
|
|
|
|
- serializationObject.type = 0;
|
|
|
|
- serializationObject.position = (light).position.asArray();
|
|
|
|
- }
|
|
|
|
- else if (light instanceof BABYLON.DirectionalLight) {
|
|
|
|
- serializationObject.type = 1;
|
|
|
|
- var directionalLight = light;
|
|
|
|
- serializationObject.position = directionalLight.position.asArray();
|
|
|
|
- serializationObject.direction = directionalLight.direction.asArray();
|
|
|
|
- }
|
|
|
|
- else if (light instanceof BABYLON.SpotLight) {
|
|
|
|
- serializationObject.type = 2;
|
|
|
|
- var spotLight = light;
|
|
|
|
- serializationObject.position = spotLight.position.asArray();
|
|
|
|
- serializationObject.direction = spotLight.position.asArray();
|
|
|
|
- serializationObject.angle = spotLight.angle;
|
|
|
|
- serializationObject.exponent = spotLight.exponent;
|
|
|
|
- }
|
|
|
|
- else if (light instanceof BABYLON.HemisphericLight) {
|
|
|
|
- serializationObject.type = 3;
|
|
|
|
- var hemisphericLight = light;
|
|
|
|
- serializationObject.direction = hemisphericLight.direction.asArray();
|
|
|
|
- serializationObject.groundColor = hemisphericLight.groundColor.asArray();
|
|
|
|
- }
|
|
|
|
- if (light.intensity) {
|
|
|
|
- serializationObject.intensity = light.intensity;
|
|
|
|
- }
|
|
|
|
- serializationObject.range = light.range;
|
|
|
|
- serializationObject.diffuse = light.diffuse.asArray();
|
|
|
|
- serializationObject.specular = light.specular.asArray();
|
|
|
|
- return serializationObject;
|
|
|
|
- };
|
|
|
|
- var serializeCamera = function (camera) {
|
|
|
|
- var serializationObject = {};
|
|
|
|
- serializationObject.name = camera.name;
|
|
|
|
- serializationObject.tags = BABYLON.Tags.GetTags(camera);
|
|
|
|
- serializationObject.id = camera.id;
|
|
|
|
- serializationObject.position = camera.position.asArray();
|
|
|
|
- // Parent
|
|
|
|
- if (camera.parent) {
|
|
|
|
- serializationObject.parentId = camera.parent.id;
|
|
|
|
- }
|
|
|
|
- serializationObject.fov = camera.fov;
|
|
|
|
- serializationObject.minZ = camera.minZ;
|
|
|
|
- serializationObject.maxZ = camera.maxZ;
|
|
|
|
- serializationObject.inertia = camera.inertia;
|
|
|
|
- //setting the type
|
|
|
|
- if (camera instanceof BABYLON.FreeCamera) {
|
|
|
|
- serializationObject.type = "FreeCamera";
|
|
|
|
- }
|
|
|
|
- else if (camera instanceof BABYLON.ArcRotateCamera) {
|
|
|
|
- serializationObject.type = "ArcRotateCamera";
|
|
|
|
- }
|
|
|
|
- else if (camera instanceof BABYLON.AnaglyphArcRotateCamera) {
|
|
|
|
- serializationObject.type = "AnaglyphArcRotateCamera";
|
|
|
|
- }
|
|
|
|
- else if (camera instanceof BABYLON.GamepadCamera) {
|
|
|
|
- serializationObject.type = "GamepadCamera";
|
|
|
|
- }
|
|
|
|
- else if (camera instanceof BABYLON.AnaglyphFreeCamera) {
|
|
|
|
- serializationObject.type = "AnaglyphFreeCamera";
|
|
|
|
- }
|
|
|
|
- else if (camera instanceof BABYLON.DeviceOrientationCamera) {
|
|
|
|
- serializationObject.type = "DeviceOrientationCamera";
|
|
|
|
- }
|
|
|
|
- else if (camera instanceof BABYLON.FollowCamera) {
|
|
|
|
- serializationObject.type = "FollowCamera";
|
|
|
|
- }
|
|
|
|
- else if (camera instanceof BABYLON.TouchCamera) {
|
|
|
|
- serializationObject.type = "TouchCamera";
|
|
|
|
- }
|
|
|
|
- else if (camera instanceof BABYLON.VirtualJoysticksCamera) {
|
|
|
|
- serializationObject.type = "VirtualJoysticksCamera";
|
|
|
|
- }
|
|
|
|
- else if (camera instanceof BABYLON.WebVRFreeCamera) {
|
|
|
|
- serializationObject.type = "WebVRFreeCamera";
|
|
|
|
- }
|
|
|
|
- else if (camera instanceof BABYLON.VRDeviceOrientationFreeCamera) {
|
|
|
|
- serializationObject.type = "VRDeviceOrientationFreeCamera";
|
|
|
|
- }
|
|
|
|
- //special properties of specific cameras
|
|
|
|
- if (camera instanceof BABYLON.ArcRotateCamera || camera instanceof BABYLON.AnaglyphArcRotateCamera) {
|
|
|
|
- var arcCamera = camera;
|
|
|
|
- serializationObject.alpha = arcCamera.alpha;
|
|
|
|
- serializationObject.beta = arcCamera.beta;
|
|
|
|
- serializationObject.radius = arcCamera.radius;
|
|
|
|
- if (arcCamera.target && arcCamera.target.id) {
|
|
|
|
- serializationObject.lockedTargetId = arcCamera.target.id;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- else if (camera instanceof BABYLON.FollowCamera) {
|
|
|
|
- var followCam = camera;
|
|
|
|
- serializationObject.radius = followCam.radius;
|
|
|
|
- serializationObject.heightOffset = followCam.heightOffset;
|
|
|
|
- serializationObject.rotationOffset = followCam.rotationOffset;
|
|
|
|
- }
|
|
|
|
- else if (camera instanceof BABYLON.AnaglyphFreeCamera || camera instanceof BABYLON.AnaglyphArcRotateCamera) {
|
|
|
|
- //eye space is a private member and can only be access like this. Without changing the implementation this is the best way to get it.
|
|
|
|
- if (camera['_interaxialDistance'] !== undefined) {
|
|
|
|
- serializationObject.interaxial_distance = BABYLON.Tools.ToDegrees(camera['_interaxialDistance']);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- //general properties that not all cameras have. The [] is due to typescript's type safety
|
|
|
|
- if (camera['speed'] !== undefined) {
|
|
|
|
- serializationObject.speed = camera['speed'];
|
|
|
|
- }
|
|
|
|
- if (camera['target'] && camera['target'] instanceof BABYLON.Vector3) {
|
|
|
|
- serializationObject.target = camera['target'].asArray();
|
|
|
|
- }
|
|
|
|
- // Target
|
|
|
|
- if (camera['rotation'] && camera['rotation'] instanceof BABYLON.Vector3) {
|
|
|
|
- serializationObject.rotation = camera['rotation'].asArray();
|
|
|
|
- }
|
|
|
|
- // Locked target
|
|
|
|
- if (camera['lockedTarget'] && camera['lockedTarget'].id) {
|
|
|
|
- serializationObject.lockedTargetId = camera['lockedTarget'].id;
|
|
|
|
- }
|
|
|
|
- serializationObject.checkCollisions = camera['checkCollisions'] || false;
|
|
|
|
- serializationObject.applyGravity = camera['applyGravity'] || false;
|
|
|
|
- if (camera['ellipsoid']) {
|
|
|
|
- serializationObject.ellipsoid = camera['ellipsoid'].asArray();
|
|
|
|
- }
|
|
|
|
- // Animations
|
|
|
|
- BABYLON.Animation.AppendSerializedAnimations(camera, serializationObject);
|
|
|
|
- // Layer mask
|
|
|
|
- serializationObject.layerMask = camera.layerMask;
|
|
|
|
- return serializationObject;
|
|
|
|
- };
|
|
|
|
- var serializeMultiMaterial = function (material) {
|
|
|
|
- var serializationObject = {};
|
|
|
|
- serializationObject.name = material.name;
|
|
|
|
- serializationObject.id = material.id;
|
|
|
|
- serializationObject.tags = BABYLON.Tags.GetTags(material);
|
|
|
|
- serializationObject.materials = [];
|
|
|
|
- for (var matIndex = 0; matIndex < material.subMaterials.length; matIndex++) {
|
|
|
|
- var subMat = material.subMaterials[matIndex];
|
|
|
|
- if (subMat) {
|
|
|
|
- serializationObject.materials.push(subMat.id);
|
|
|
|
- }
|
|
|
|
- else {
|
|
|
|
- serializationObject.materials.push(null);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- return serializationObject;
|
|
|
|
- };
|
|
|
|
- var serializeSkeleton = function (skeleton) {
|
|
|
|
- var serializationObject = {};
|
|
|
|
- serializationObject.name = skeleton.name;
|
|
|
|
- serializationObject.id = skeleton.id;
|
|
|
|
- serializationObject.bones = [];
|
|
|
|
- for (var index = 0; index < skeleton.bones.length; index++) {
|
|
|
|
- var bone = skeleton.bones[index];
|
|
|
|
- var serializedBone = {
|
|
|
|
- parentBoneIndex: bone.getParent() ? skeleton.bones.indexOf(bone.getParent()) : -1,
|
|
|
|
- name: bone.name,
|
|
|
|
- matrix: bone.getLocalMatrix().toArray()
|
|
|
|
- };
|
|
|
|
- serializationObject.bones.push(serializedBone);
|
|
|
|
- if (bone.animations && bone.animations.length > 0) {
|
|
|
|
- serializedBone.animation = bone.animations[0].serialize();
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- return serializationObject;
|
|
|
|
- };
|
|
|
|
- var serializeParticleSystem = function (particleSystem) {
|
|
|
|
- var serializationObject = {};
|
|
|
|
- serializationObject.emitterId = particleSystem.emitter.id;
|
|
|
|
- serializationObject.capacity = particleSystem.getCapacity();
|
|
|
|
- if (particleSystem.particleTexture) {
|
|
|
|
- serializationObject.textureName = particleSystem.particleTexture.name;
|
|
|
|
- }
|
|
|
|
- serializationObject.minAngularSpeed = particleSystem.minAngularSpeed;
|
|
|
|
- serializationObject.maxAngularSpeed = particleSystem.maxAngularSpeed;
|
|
|
|
- serializationObject.minSize = particleSystem.minSize;
|
|
|
|
- serializationObject.maxSize = particleSystem.maxSize;
|
|
|
|
- serializationObject.minLifeTime = particleSystem.minLifeTime;
|
|
|
|
- serializationObject.maxLifeTime = particleSystem.maxLifeTime;
|
|
|
|
- serializationObject.emitRate = particleSystem.emitRate;
|
|
|
|
- serializationObject.minEmitBox = particleSystem.minEmitBox.asArray();
|
|
|
|
- serializationObject.maxEmitBox = particleSystem.maxEmitBox.asArray();
|
|
|
|
- serializationObject.gravity = particleSystem.gravity.asArray();
|
|
|
|
- serializationObject.direction1 = particleSystem.direction1.asArray();
|
|
|
|
- serializationObject.direction2 = particleSystem.direction2.asArray();
|
|
|
|
- serializationObject.color1 = particleSystem.color1.asArray();
|
|
|
|
- serializationObject.color2 = particleSystem.color2.asArray();
|
|
|
|
- serializationObject.colorDead = particleSystem.colorDead.asArray();
|
|
|
|
- serializationObject.updateSpeed = particleSystem.updateSpeed;
|
|
|
|
- serializationObject.targetStopDuration = particleSystem.targetStopDuration;
|
|
|
|
- serializationObject.textureMask = particleSystem.textureMask.asArray();
|
|
|
|
- serializationObject.blendMode = particleSystem.blendMode;
|
|
|
|
- return serializationObject;
|
|
|
|
- };
|
|
|
|
- var serializeLensFlareSystem = function (lensFlareSystem) {
|
|
|
|
- var serializationObject = {};
|
|
|
|
- serializationObject.emitterId = lensFlareSystem.getEmitter().id;
|
|
|
|
- serializationObject.borderLimit = lensFlareSystem.borderLimit;
|
|
|
|
- serializationObject.flares = [];
|
|
|
|
- for (var index = 0; index < lensFlareSystem.lensFlares.length; index++) {
|
|
|
|
- var flare = lensFlareSystem.lensFlares[index];
|
|
|
|
- serializationObject.flares.push({
|
|
|
|
- size: flare.size,
|
|
|
|
- position: flare.position,
|
|
|
|
- color: flare.color.asArray(),
|
|
|
|
- textureName: BABYLON.Tools.GetFilename(flare.texture.name)
|
|
|
|
- });
|
|
|
|
- }
|
|
|
|
- return serializationObject;
|
|
|
|
- };
|
|
|
|
- var serializeShadowGenerator = function (light) {
|
|
|
|
- var serializationObject = {};
|
|
|
|
- var shadowGenerator = light.getShadowGenerator();
|
|
|
|
- serializationObject.lightId = light.id;
|
|
|
|
- serializationObject.mapSize = shadowGenerator.getShadowMap().getRenderSize();
|
|
|
|
- serializationObject.useVarianceShadowMap = shadowGenerator.useVarianceShadowMap;
|
|
|
|
- serializationObject.usePoissonSampling = shadowGenerator.usePoissonSampling;
|
|
|
|
- serializationObject.renderList = [];
|
|
|
|
- for (var meshIndex = 0; meshIndex < shadowGenerator.getShadowMap().renderList.length; meshIndex++) {
|
|
|
|
- var mesh = shadowGenerator.getShadowMap().renderList[meshIndex];
|
|
|
|
- serializationObject.renderList.push(mesh.id);
|
|
|
|
- }
|
|
|
|
- return serializationObject;
|
|
|
|
- };
|
|
|
|
var serializedGeometries = [];
|
|
var serializedGeometries = [];
|
|
var serializeVertexData;
|
|
var serializeVertexData;
|
|
var serializeTorusKnot;
|
|
var serializeTorusKnot;
|
|
@@ -479,7 +252,7 @@ var BABYLON;
|
|
else if (mesh.material instanceof BABYLON.MultiMaterial) {
|
|
else if (mesh.material instanceof BABYLON.MultiMaterial) {
|
|
serializationObject.multiMaterials = serializationObject.multiMaterials || [];
|
|
serializationObject.multiMaterials = serializationObject.multiMaterials || [];
|
|
if (!serializationObject.multiMaterials.some(function (mat) { return (mat.id === mesh.material.id); })) {
|
|
if (!serializationObject.multiMaterials.some(function (mat) { return (mat.id === mesh.material.id); })) {
|
|
- serializationObject.multiMaterials.push(serializeMultiMaterial(mesh.material));
|
|
|
|
|
|
+ serializationObject.multiMaterials.push(mesh.material.serialize());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -502,7 +275,7 @@ var BABYLON;
|
|
// Skeletons
|
|
// Skeletons
|
|
if (mesh.skeleton) {
|
|
if (mesh.skeleton) {
|
|
serializationObject.skeletons = serializationObject.skeletons || [];
|
|
serializationObject.skeletons = serializationObject.skeletons || [];
|
|
- serializationObject.skeletons.push(serializeSkeleton(mesh.skeleton));
|
|
|
|
|
|
+ serializationObject.skeletons.push(mesh.skeleton.serialize());
|
|
}
|
|
}
|
|
//serialize the actual mesh
|
|
//serialize the actual mesh
|
|
serializationObject.meshes = serializationObject.meshes || [];
|
|
serializationObject.meshes = serializationObject.meshes || [];
|
|
@@ -542,13 +315,13 @@ var BABYLON;
|
|
var light;
|
|
var light;
|
|
for (index = 0; index < scene.lights.length; index++) {
|
|
for (index = 0; index < scene.lights.length; index++) {
|
|
light = scene.lights[index];
|
|
light = scene.lights[index];
|
|
- serializationObject.lights.push(serializeLight(light));
|
|
|
|
|
|
+ serializationObject.lights.push(light.serialize());
|
|
}
|
|
}
|
|
// Cameras
|
|
// Cameras
|
|
serializationObject.cameras = [];
|
|
serializationObject.cameras = [];
|
|
for (index = 0; index < scene.cameras.length; index++) {
|
|
for (index = 0; index < scene.cameras.length; index++) {
|
|
var camera = scene.cameras[index];
|
|
var camera = scene.cameras[index];
|
|
- serializationObject.cameras.push(serializeCamera(camera));
|
|
|
|
|
|
+ serializationObject.cameras.push(camera.serialize());
|
|
}
|
|
}
|
|
if (scene.activeCamera) {
|
|
if (scene.activeCamera) {
|
|
serializationObject.activeCameraID = scene.activeCamera.id;
|
|
serializationObject.activeCameraID = scene.activeCamera.id;
|
|
@@ -565,21 +338,16 @@ var BABYLON;
|
|
serializationObject.multiMaterials = [];
|
|
serializationObject.multiMaterials = [];
|
|
for (index = 0; index < scene.multiMaterials.length; index++) {
|
|
for (index = 0; index < scene.multiMaterials.length; index++) {
|
|
var multiMaterial = scene.multiMaterials[index];
|
|
var multiMaterial = scene.multiMaterials[index];
|
|
- serializationObject.multiMaterials.push(serializeMultiMaterial(multiMaterial));
|
|
|
|
|
|
+ serializationObject.multiMaterials.push(multiMaterial.serialize());
|
|
}
|
|
}
|
|
for (index = 0; index < scene.materials.length; index++) {
|
|
for (index = 0; index < scene.materials.length; index++) {
|
|
material = scene.materials[index];
|
|
material = scene.materials[index];
|
|
- if (material instanceof BABYLON.StandardMaterial) {
|
|
|
|
- serializationObject.materials.push(material.serialize());
|
|
|
|
- }
|
|
|
|
- else if (material instanceof BABYLON.MultiMaterial) {
|
|
|
|
- serializationObject.multiMaterials.push(serializeMultiMaterial(material));
|
|
|
|
- }
|
|
|
|
|
|
+ serializationObject.materials.push(material.serialize());
|
|
}
|
|
}
|
|
// Skeletons
|
|
// Skeletons
|
|
serializationObject.skeletons = [];
|
|
serializationObject.skeletons = [];
|
|
for (index = 0; index < scene.skeletons.length; index++) {
|
|
for (index = 0; index < scene.skeletons.length; index++) {
|
|
- serializationObject.skeletons.push(serializeSkeleton(scene.skeletons[index]));
|
|
|
|
|
|
+ serializationObject.skeletons.push(scene.skeletons[index].serialize());
|
|
}
|
|
}
|
|
// Geometries
|
|
// Geometries
|
|
serializationObject.geometries = {};
|
|
serializationObject.geometries = {};
|
|
@@ -613,19 +381,19 @@ var BABYLON;
|
|
// Particles Systems
|
|
// Particles Systems
|
|
serializationObject.particleSystems = [];
|
|
serializationObject.particleSystems = [];
|
|
for (index = 0; index < scene.particleSystems.length; index++) {
|
|
for (index = 0; index < scene.particleSystems.length; index++) {
|
|
- serializationObject.particleSystems.push(serializeParticleSystem(scene.particleSystems[index]));
|
|
|
|
|
|
+ serializationObject.particleSystems.push(scene.particleSystems[index].serialize());
|
|
}
|
|
}
|
|
// Lens flares
|
|
// Lens flares
|
|
serializationObject.lensFlareSystems = [];
|
|
serializationObject.lensFlareSystems = [];
|
|
for (index = 0; index < scene.lensFlareSystems.length; index++) {
|
|
for (index = 0; index < scene.lensFlareSystems.length; index++) {
|
|
- serializationObject.lensFlareSystems.push(serializeLensFlareSystem(scene.lensFlareSystems[index]));
|
|
|
|
|
|
+ serializationObject.lensFlareSystems.push(scene.lensFlareSystems[index].serialize());
|
|
}
|
|
}
|
|
// Shadows
|
|
// Shadows
|
|
serializationObject.shadowGenerators = [];
|
|
serializationObject.shadowGenerators = [];
|
|
for (index = 0; index < scene.lights.length; index++) {
|
|
for (index = 0; index < scene.lights.length; index++) {
|
|
light = scene.lights[index];
|
|
light = scene.lights[index];
|
|
if (light.getShadowGenerator()) {
|
|
if (light.getShadowGenerator()) {
|
|
- serializationObject.shadowGenerators.push(serializeShadowGenerator(light));
|
|
|
|
|
|
+ serializationObject.shadowGenerators.push(light.getShadowGenerator().serialize());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return serializationObject;
|
|
return serializationObject;
|