1069 lines
36 KiB
JavaScript
1069 lines
36 KiB
JavaScript
/**
|
|
* Material Superset - The apiMaterial properties get moved into the Material object itself, and then the instance is
|
|
* created
|
|
* @param graphics R3.GraphicsRuntime
|
|
* @param apiMaterial R3.D3.API.Material
|
|
* @property materialType
|
|
* @constructor
|
|
* @returns {R3.D3.Material}
|
|
*/
|
|
R3.D3.Material = function(
|
|
graphics,
|
|
apiMaterial
|
|
) {
|
|
|
|
this.graphics = graphics;
|
|
this.graphics.isNotThreeThrow();
|
|
|
|
if (R3.Utils.UndefinedOrNull(apiMaterial)) {
|
|
apiMaterial = {
|
|
materialType : R3.D3.API.Material.MATERIAL_TYPE_NONE
|
|
};
|
|
}
|
|
|
|
R3.D3.API.Material.call(
|
|
this,
|
|
apiMaterial.id,
|
|
apiMaterial.name,
|
|
apiMaterial.materialType,
|
|
apiMaterial.parentEntity,
|
|
apiMaterial.parentMeshes,
|
|
apiMaterial.alphaTest,
|
|
apiMaterial.blendDst,
|
|
apiMaterial.blendDstAlpha,
|
|
apiMaterial.blendEquation,
|
|
apiMaterial.blendEquationAlpha,
|
|
apiMaterial.blending,
|
|
apiMaterial.blendSrc,
|
|
apiMaterial.blendSrcAlpha,
|
|
apiMaterial.clipIntersection,
|
|
apiMaterial.clippingPlanes,
|
|
apiMaterial.clipShadows,
|
|
apiMaterial.colorWrite,
|
|
apiMaterial.customDepthMaterial,
|
|
apiMaterial.customDistanceMaterial,
|
|
apiMaterial.defines,
|
|
apiMaterial.depthFunc,
|
|
apiMaterial.depthTest,
|
|
apiMaterial.depthWrite,
|
|
apiMaterial.fog,
|
|
apiMaterial.lights,
|
|
apiMaterial.opacity,
|
|
apiMaterial.overdraw,
|
|
apiMaterial.polygonOffset,
|
|
apiMaterial.polygonOffsetFactor,
|
|
apiMaterial.polygonOffsetUnits,
|
|
apiMaterial.precision,
|
|
apiMaterial.premultipliedAlpha,
|
|
apiMaterial.dithering,
|
|
apiMaterial.flatShading,
|
|
apiMaterial.side,
|
|
apiMaterial.transparent,
|
|
apiMaterial.vertexColors,
|
|
apiMaterial.visible
|
|
);
|
|
|
|
var linkedObjects = {};
|
|
|
|
switch (this.materialType) {
|
|
case R3.D3.API.Material.MATERIAL_TYPE_STANDARD :
|
|
linkedObjects.alphaMap = R3.D3.Texture;
|
|
linkedObjects.aoMap = R3.D3.Texture;
|
|
linkedObjects.bumpMap = R3.D3.Texture;
|
|
linkedObjects.diffuseMap = R3.D3.Texture;
|
|
linkedObjects.displacementMap = R3.D3.Texture;
|
|
linkedObjects.emissiveMap = R3.D3.Texture;
|
|
linkedObjects.envMap = R3.D3.Texture;
|
|
linkedObjects.lightMap = R3.D3.Texture;
|
|
linkedObjects.metalnessMap = R3.D3.Texture;
|
|
linkedObjects.normalMap = R3.D3.Texture;
|
|
linkedObjects.roughnessMap = R3.D3.Texture;
|
|
break;
|
|
case R3.D3.API.Material.MATERIAL_TYPE_BASIC :
|
|
linkedObjects.alphaMap = R3.D3.Texture;
|
|
linkedObjects.aoMap = R3.D3.Texture;
|
|
linkedObjects.diffuseMap = R3.D3.Texture;
|
|
linkedObjects.envMap = R3.D3.Texture;
|
|
linkedObjects.lightMap = R3.D3.Texture;
|
|
linkedObjects.specularMap = R3.D3.Texture;
|
|
break;
|
|
case R3.D3.API.Material.MATERIAL_TYPE_PHONG :
|
|
linkedObjects.alphaMap = R3.D3.Texture;
|
|
linkedObjects.aoMap = R3.D3.Texture;
|
|
linkedObjects.bumpMap = R3.D3.Texture;
|
|
linkedObjects.diffuseMap = R3.D3.Texture;
|
|
linkedObjects.displacementMap = R3.D3.Texture;
|
|
linkedObjects.emissiveMap = R3.D3.Texture;
|
|
linkedObjects.envMap = R3.D3.Texture;
|
|
linkedObjects.lightMap = R3.D3.Texture;
|
|
linkedObjects.normalMap = R3.D3.Texture;
|
|
linkedObjects.specularMap = R3.D3.Texture;
|
|
break;
|
|
case R3.D3.API.Material.MATERIAL_TYPE_SHADER :
|
|
case R3.D3.API.Material.MATERIAL_TYPE_SHADER_RAW :
|
|
linkedObjects.vertexShader = R3.D3.Shader.Vertex;
|
|
linkedObjects.fragmentShader = R3.D3.Shader.Fragment;
|
|
break;
|
|
case R3.D3.API.Material.MATERIAL_TYPE_POINTS :
|
|
linkedObjects.diffuseMap = R3.D3.Texture;
|
|
break;
|
|
default :
|
|
throw new Error('unhandled material type: ' + this.materialType);
|
|
|
|
}
|
|
|
|
R3.Component.call(
|
|
this,
|
|
linkedObjects
|
|
);
|
|
};
|
|
|
|
R3.D3.Material.prototype = Object.create(R3.Component.prototype);
|
|
R3.D3.Material.prototype.constructor = R3.D3.Material;
|
|
|
|
R3.D3.Material.prototype.createInstance = function() {
|
|
|
|
if (R3.Utils.UndefinedOrNull(this.instance)) {
|
|
console.warn('the child createInstance has to be called first');
|
|
return;
|
|
}
|
|
|
|
this.instance.alphaTest = this.alphaTest;
|
|
this.instance.blendDst = this.blendDst;
|
|
this.instance.blendDstAlpha = this.blendDstAlpha;
|
|
this.instance.blendEquation = this.blendEquation;
|
|
this.instance.blendEquationAlpha = this.blendEquationAlpha;
|
|
this.instance.blending = this.blending;
|
|
this.instance.blendSrc = this.blendSrc;
|
|
this.instance.blendSrcAlpha = this.blendSrcAlpha;
|
|
this.instance.clipIntersection = this.clipIntersection;
|
|
this.instance.clippingPlanes = this.clippingPlanes;
|
|
this.instance.clipShadows = this.clipShadows;
|
|
this.instance.colorWrite = this.colorWrite;
|
|
this.instance.customDepthMaterial = this.customDepthMaterial;
|
|
this.instance.customDistanceMaterial = this.customDistanceMaterial;
|
|
this.instance.defines = this.defines;
|
|
this.instance.depthFunc = this.depthFunc;
|
|
this.instance.depthTest = this.depthTest;
|
|
this.instance.depthWrite = this.depthWrite;
|
|
this.instance.fog = this.fog;
|
|
this.instance.lights = this.lights;
|
|
this.instance.opacity = this.opacity;
|
|
this.instance.overdraw = this.overdraw;
|
|
this.instance.polygonOffset = this.polygonOffset;
|
|
this.instance.polygonOffsetFactor = this.polygonOffsetFactor;
|
|
this.instance.polygonOffsetUnits = this.polygonOffsetUnits;
|
|
this.instance.precision = this.precision;
|
|
this.instance.premultipliedAlpha = this.premultipliedAlpha;
|
|
this.instance.dithering = this.dithering;
|
|
this.instance.flatShading = this.flatShading;
|
|
this.instance.side = this.side;
|
|
this.instance.transparent = this.transparent;
|
|
this.instance.vertexColors = this.vertexColors;
|
|
this.instance.visible = this.visible;
|
|
|
|
R3.Component.prototype.createInstance.call(this);
|
|
|
|
};
|
|
|
|
R3.D3.Material.prototype.updateInstance = function(property) {
|
|
|
|
if (R3.Utils.UndefinedOrNull(this.instance)) {
|
|
console.warn('no material instance');
|
|
return;
|
|
}
|
|
|
|
if (property === 'materialType') {
|
|
|
|
var componentType = R3.D3.API.Material.GetComponentType(this.materialType);
|
|
|
|
this.replace(componentType);
|
|
|
|
return;
|
|
}
|
|
|
|
if (property === 'parentMeshes') {
|
|
console.warn('parent meshes are read-only');
|
|
return;
|
|
}
|
|
|
|
if (property === 'alphaTest') {
|
|
this.instance.alphaTest = this.alphaTest;
|
|
this.instance.needsUpdate = true;
|
|
return;
|
|
}
|
|
|
|
if (property === 'blendDst') {
|
|
this.instance.blendDst = this.blendDst;
|
|
return;
|
|
}
|
|
|
|
if (property === 'blendDstAlpha') {
|
|
this.instance.blendDstAlpha = this.blendDstAlpha;
|
|
return;
|
|
}
|
|
|
|
if (property === 'blendEquation') {
|
|
this.instance.blendEquation = this.blendEquation;
|
|
return;
|
|
}
|
|
|
|
if (property === 'blendEquationAlpha') {
|
|
this.instance.blendEquationAlpha = this.blendEquationAlpha;
|
|
return;
|
|
}
|
|
|
|
if (property === 'blending') {
|
|
this.instance.blending = this.blending;
|
|
return;
|
|
}
|
|
|
|
if (property === 'blendSrc') {
|
|
this.instance.blendSrc = this.blendSrc;
|
|
return;
|
|
}
|
|
|
|
if (property === 'blendSrcAlpha') {
|
|
this.instance.blendSrcAlpha = this.blendSrcAlpha;
|
|
return;
|
|
}
|
|
|
|
if (property === 'clipIntersection') {
|
|
this.instance.clipIntersection = this.clipIntersection;
|
|
return;
|
|
}
|
|
|
|
if (property === 'clippingPlanes') {
|
|
console.warn('todo: implement clipping planes update');
|
|
return;
|
|
}
|
|
|
|
if (property === 'clipShadows') {
|
|
this.instance.clipShadows = this.clipShadows;
|
|
return;
|
|
}
|
|
|
|
if (property === 'colorWrite') {
|
|
this.instance.colorWrite = this.colorWrite;
|
|
return;
|
|
}
|
|
|
|
if (property === 'customDepthMaterial') {
|
|
console.warn('todo: implement custom depth material update');
|
|
return;
|
|
}
|
|
|
|
if (property === 'customDistanceMaterial') {
|
|
console.warn('todo: implement custom distance material update');
|
|
return;
|
|
}
|
|
|
|
if (property === 'defines') {
|
|
this.instance.defines = this.defines;
|
|
this.instance.needsUpdate = true;
|
|
return;
|
|
}
|
|
|
|
if (property === 'depthFunc') {
|
|
this.instance.depthFunc = this.depthFunc;
|
|
return;
|
|
}
|
|
|
|
if (property === 'depthTest') {
|
|
this.instance.depthTest = this.depthTest;
|
|
return;
|
|
}
|
|
|
|
if (property === 'depthWrite') {
|
|
this.instance.depthWrite = this.depthWrite;
|
|
return;
|
|
}
|
|
|
|
if (property === 'fog') {
|
|
this.instance.fog = this.fog;
|
|
return;
|
|
}
|
|
|
|
if (property === 'lights') {
|
|
this.instance.lights = this.lights;
|
|
}
|
|
|
|
if (property === 'opacity') {
|
|
this.instance.opacity = this.opacity;
|
|
return;
|
|
}
|
|
|
|
if (property === 'overdraw') {
|
|
this.instance.overdraw = this.overdraw;
|
|
return;
|
|
}
|
|
|
|
if (property === 'polygonOffset') {
|
|
this.instance.polygonOffset = this.polygonOffset;
|
|
return;
|
|
}
|
|
|
|
if (property === 'polygonOffsetFactor') {
|
|
this.instance.polygonOffsetFactor = this.polygonOffsetFactor;
|
|
return;
|
|
}
|
|
|
|
if (property === 'polygonOffsetUnits') {
|
|
this.instance.polygonOffsetUnits = this.polygonOffsetUnits;
|
|
return;
|
|
}
|
|
|
|
if (property === 'precision') {
|
|
this.instance.precision = this.precision;
|
|
return;
|
|
}
|
|
|
|
if (property === 'premultipliedAlpha') {
|
|
this.instance.premultipliedAlpha = this.premultipliedAlpha;
|
|
return;
|
|
}
|
|
|
|
if (property === 'dithering') {
|
|
this.instance.dithering = this.dithering;
|
|
console.log('not sure about needsupdate - cannot detect any changes until now');
|
|
}
|
|
|
|
if (property === 'flatShading') {
|
|
this.instance.flatShading = this.flatShading;
|
|
}
|
|
|
|
if (property === 'side') {
|
|
this.instance.side = this.side;
|
|
return;
|
|
}
|
|
|
|
if (property === 'transparent') {
|
|
this.instance.transparent = this.transparent;
|
|
return;
|
|
}
|
|
|
|
if (property === 'vertexColors') {
|
|
this.instance.vertexColors = this.vertexColors;
|
|
return;
|
|
}
|
|
|
|
if (property === 'visible') {
|
|
this.instance.visible = this.visible;
|
|
return;
|
|
}
|
|
|
|
if (property === 'needsUpdate') {
|
|
/**
|
|
* update follows
|
|
*/
|
|
}
|
|
|
|
this.instance.needsUpdate = true;
|
|
this.needsUpdate = false;
|
|
|
|
R3.Component.prototype.updateInstance.call(this, property);
|
|
};
|
|
|
|
/**
|
|
* Converts a R3.D3.Material to a R3.D3.API.Material
|
|
* @returns {R3.D3.API.Material}
|
|
*/
|
|
R3.D3.Material.prototype.toApiObject = function() {
|
|
|
|
var apiMaterial = new R3.D3.API.Material(
|
|
this.id,
|
|
this.name,
|
|
this.materialType,
|
|
R3.Utils.IdOrNull(this.parentEntity),
|
|
this.parentMeshes.map(
|
|
function(mesh) {
|
|
return R3.Utils.IdOrNull(mesh);
|
|
}
|
|
),
|
|
this.alphaTest,
|
|
this.blendDst,
|
|
this.blendDstAlpha,
|
|
this.blendEquation,
|
|
this.blendEquationAlpha,
|
|
this.blending,
|
|
this.blendSrc,
|
|
this.blendSrcAlpha,
|
|
this.clipIntersection,
|
|
this.clippingPlanes,
|
|
this.clipShadows,
|
|
this.colorWrite,
|
|
this.customDepthMaterial,
|
|
this.customDistanceMaterial,
|
|
this.defines,
|
|
this.depthFunc,
|
|
this.depthTest,
|
|
this.depthWrite,
|
|
this.fog,
|
|
this.lights,
|
|
this.opacity,
|
|
this.overdraw,
|
|
this.polygonOffset,
|
|
this.polygonOffsetFactor,
|
|
this.polygonOffsetUnits,
|
|
this.precision,
|
|
this.premultipliedAlpha,
|
|
this.dithering,
|
|
this.flatShading,
|
|
this.side,
|
|
this.transparent,
|
|
this.vertexColors,
|
|
this.visible
|
|
);
|
|
|
|
return apiMaterial;
|
|
|
|
};
|
|
|
|
R3.D3.Material.prototype.assignTexture = function(instanceProperty, property) {
|
|
if (this[property] && this[property].instance) {
|
|
this.instance[instanceProperty] = this[property].instance;
|
|
} else {
|
|
this.instance[instanceProperty] = null;
|
|
}
|
|
this.instance.needsUpdate = true;
|
|
};
|
|
|
|
R3.D3.Material.prototype.getTextures = function() {
|
|
|
|
var textures = [];
|
|
|
|
Object.keys(this.linkedObjects).map(
|
|
function(property) {
|
|
if (this[property] instanceof R3.D3.Texture) {
|
|
textures.push(
|
|
{
|
|
property: property,
|
|
texture: this[property]
|
|
}
|
|
);
|
|
}
|
|
}.bind(this)
|
|
);
|
|
|
|
return textures;
|
|
};
|
|
|
|
|
|
//
|
|
//
|
|
//
|
|
// R3.D3.Material.prototype.createToonMaterialInstance = function() {
|
|
// return new THREE.MeshToonMaterial({
|
|
// name: this.name,
|
|
// opacity: this.opacity,
|
|
// transparent: this.transparent,
|
|
// blending: this.blending,
|
|
// blendSrc: this.blendSrc,
|
|
// blendDst: this.blendDst,
|
|
// blendEquation: this.blendEquation,
|
|
// depthTest: this.depthTest,
|
|
// depthFunc: this.depthFunc,
|
|
// depthWrite: this.depthWrite,
|
|
// polygonOffset: this.polygonOffset,
|
|
// polygonOffsetFactor: this.polygonOffsetFactor,
|
|
// polygonOffsetUnits: this.polygonOffsetUnits,
|
|
// alphaTest: this.alphaTest,
|
|
// clippingPlanes: this.clippingPlanes,
|
|
// clipShadows: this.clipShadows,
|
|
// overdraw: this.overdraw,
|
|
// visible: this.visible,
|
|
// side: this.side,
|
|
// color: this.color.instance,
|
|
// roughness: this.roughness,
|
|
// metalness: this.metalness,
|
|
// lightMapIntensity: this.lightMapIntensity,
|
|
// aoMapIntensity: this.aoMapIntensity,
|
|
// emissive: this.emissive.instance,
|
|
// emissiveIntensity: this.emissiveIntensity,
|
|
// bumpScale: this.bumpScale,
|
|
// normalScale: this.normalScale,
|
|
// displacementScale: this.displacementScale,
|
|
// refractionRatio: this.refractionRatio,
|
|
// fog: this.fog,
|
|
// flatShading: this.flatShading,
|
|
// wireframe: this.wireframe,
|
|
// wireframeLinewidth: this.wireframeLineWidth,
|
|
// wireframeLinecap: this.wireframeLineCap,
|
|
// wireframeLinejoin: this.wireframeLineJoin,
|
|
// vertexColors: this.vertexColors,
|
|
// skinning: this.skinning,
|
|
// morphTargets: this.morphTargets,
|
|
// morphNormals: this.morphNormals
|
|
// });
|
|
// };
|
|
|
|
|
|
// R3.D3.Material.prototype.createStandardMaterialInstance = function() {
|
|
// return new THREE.MeshStandardMaterial({
|
|
// name: this.name,
|
|
// opacity: this.opacity,
|
|
// transparent: this.transparent,
|
|
// blending: this.blending,
|
|
// blendSrc: this.blendSrc,
|
|
// blendDst: this.blendDst,
|
|
// blendEquation: this.blendEquation,
|
|
// depthTest: this.depthTest,
|
|
// depthFunc: this.depthFunc,
|
|
// depthWrite: this.depthWrite,
|
|
// polygonOffset: this.polygonOffset,
|
|
// polygonOffsetFactor: this.polygonOffsetFactor,
|
|
// polygonOffsetUnits: this.polygonOffsetUnits,
|
|
// alphaTest: this.alphaTest,
|
|
// clippingPlanes: this.clippingPlanes,
|
|
// clipShadows: this.clipShadows,
|
|
// overdraw: this.overdraw,
|
|
// visible: this.visible,
|
|
// side: this.side,
|
|
// color: this.color.instance,
|
|
// roughness: this.roughness,
|
|
// metalness: this.metalness,
|
|
// lightMapIntensity: this.lightMapIntensity,
|
|
// aoMapIntensity: this.aoMapIntensity,
|
|
// emissive: this.emissive.instance,
|
|
// emissiveIntensity: this.emissiveIntensity,
|
|
// bumpScale: this.bumpScale,
|
|
// normalScale: this.normalScale,
|
|
// displacementScale: this.displacementScale,
|
|
// refractionRatio: this.refractionRatio,
|
|
// fog: this.fog,
|
|
// flatShading: this.flatShading,
|
|
// wireframe: this.wireframe,
|
|
// wireframeLinewidth: this.wireframeLineWidth,
|
|
// wireframeLinecap: this.wireframeLineCap,
|
|
// wireframeLinejoin: this.wireframeLineJoin,
|
|
// vertexColors: this.vertexColors,
|
|
// skinning: this.skinning,
|
|
// morphTargets: this.morphTargets,
|
|
// morphNormals: this.morphNormals
|
|
// });
|
|
// };
|
|
|
|
// R3.D3.Material.prototype.createPointsMaterialInstance = function() {
|
|
// return new THREE.PointsMaterial({
|
|
// name: this.name,
|
|
// opacity: this.opacity,
|
|
// transparent: this.transparent,
|
|
// // blending: this.blending,
|
|
// // blendSrc: this.blendSrc,
|
|
// // blendDst: this.blendDst,
|
|
// // blendEquation: this.blendEquation,
|
|
// depthTest: this.depthTest,
|
|
// depthFunc: this.depthFunc,
|
|
// depthWrite: this.depthWrite,
|
|
// // polygonOffset: this.polygonOffset,
|
|
// // polygonOffsetFactor: this.polygonOffsetFactor,
|
|
// // polygonOffsetUnits: this.polygonOffsetUnits,
|
|
// // alphaTest: this.alphaTest,
|
|
// // clippingPlanes: this.clippingPlanes,
|
|
// // clipShadows: this.clipShadows,
|
|
// // overdraw: this.overdraw,
|
|
// visible: this.visible,
|
|
// side: this.side,
|
|
// color: this.color.instance,
|
|
// size: this.pointSize,
|
|
// sizeAttenuation: this.pointSizeAttenuation
|
|
// // vertexColors: R3.D3.API.Material.TYPE_VERTEX_COLORS,
|
|
// // fog: this.fog
|
|
// });
|
|
// };
|
|
//
|
|
// R3.D3.Material.prototype.createLineBasicMaterialInstance = function() {
|
|
//
|
|
// var linecap = 'round';
|
|
//
|
|
// if (this.lineCap === R3.D3.API.Material.LINE_CAP_BUTT) {
|
|
// linecap = 'butt';
|
|
// }
|
|
//
|
|
// if (this.lineCap === R3.D3.API.Material.LINE_CAP_SQUARE) {
|
|
// linecap = 'square';
|
|
// }
|
|
//
|
|
// var linejoin = 'round';
|
|
//
|
|
// if (this.lineJoin === R3.D3.API.Material.LINE_JOIN_BEVEL) {
|
|
// linejoin = 'bevel';
|
|
// }
|
|
//
|
|
// if (this.lineJoin === R3.D3.API.Material.LINE_JOIN_MITER) {
|
|
// linejoin = 'miter';
|
|
// }
|
|
//
|
|
// return new THREE.LineBasicMaterial({
|
|
// name: this.name,
|
|
// opacity: this.opacity,
|
|
// transparent: this.transparent,
|
|
// // blending: this.blending,
|
|
// // blendSrc: this.blendSrc,
|
|
// // blendDst: this.blendDst,
|
|
// // blendEquation: this.blendEquation,
|
|
// depthTest: this.depthTest,
|
|
// depthFunc: this.depthFunc,
|
|
// depthWrite: this.depthWrite,
|
|
// // polygonOffset: this.polygonOffset,
|
|
// // polygonOffsetFactor: this.polygonOffsetFactor,
|
|
// // polygonOffsetUnits: this.polygonOffsetUnits,
|
|
// // alphaTest: this.alphaTest,
|
|
// // clippingPlanes: this.clippingPlanes,
|
|
// // clipShadows: this.clipShadows,
|
|
// // overdraw: this.overdraw,
|
|
// visible: this.visible,
|
|
// side: this.side,
|
|
// color: this.color.instance,
|
|
// linewidth: this.lineWidth,
|
|
// linecap: linecap,
|
|
// linejoin: linejoin
|
|
// // vertexColors: R3.D3.API.Material.TYPE_VERTEX_COLORS,
|
|
// // fog: this.fog
|
|
// });
|
|
// };
|
|
//
|
|
// R3.D3.Material.prototype.createPhongMaterialInstance = function() {
|
|
// return new THREE.MeshPhongMaterial({
|
|
// name: this.name,
|
|
// opacity: this.opacity,
|
|
// transparent: this.transparent,
|
|
// blending: this.blending,
|
|
// blendSrc: this.blendSrc,
|
|
// blendDst: this.blendDst,
|
|
// blendEquation: this.blendEquation,
|
|
// depthTest: this.depthTest,
|
|
// depthFunc: this.depthFunc,
|
|
// depthWrite: this.depthWrite,
|
|
// polygonOffset: this.polygonOffset,
|
|
// polygonOffsetFactor: this.polygonOffsetFactor,
|
|
// polygonOffsetUnits: this.polygonOffsetUnits,
|
|
// alphaTest: this.alphaTest,
|
|
// clippingPlanes: this.clippingPlanes,
|
|
// clipShadows: this.clipShadows,
|
|
// overdraw: this.overdraw,
|
|
// visible: this.visible,
|
|
// side: this.side,
|
|
// color: this.color.instance,
|
|
// specular: this.specular.instance,
|
|
// shininess: this.shininess,
|
|
// lightMapIntensity: this.lightMapIntensity,
|
|
// aoMapIntensity: this.aoMapIntensity,
|
|
// emissive: this.emissive.instance,
|
|
// emissiveIntensity: this.emissiveIntensity,
|
|
// bumpScale: this.bumpScale,
|
|
// normalScale: this.normalScale,
|
|
// displacementScale: this.displacementScale,
|
|
// combine: this.combine,
|
|
// refractionRatio: this.refractionRatio,
|
|
// fog: this.fog,
|
|
// flatShading: this.flatShading,
|
|
// wireframe: this.wireframe,
|
|
// wireframeLinewidth: this.wireframeLineWidth,
|
|
// wireframeLinecap: this.wireframeLineCap,
|
|
// wireframeLinejoin: this.wireframeLineJoin,
|
|
// vertexColors: this.vertexColors,
|
|
// skinning: this.skinning,
|
|
// morphTargets: this.morphTargets,
|
|
// morphNormals: this.morphNormals
|
|
// });
|
|
// };
|
|
//
|
|
// R3.D3.Material.prototype.createMeshBasicMaterialInstance = function() {
|
|
// return new THREE.MeshBasicMaterial({
|
|
// name: this.name,
|
|
// opacity: this.opacity,
|
|
// transparent: this.transparent,
|
|
// blending: this.blending,
|
|
// blendSrc: this.blendSrc,
|
|
// blendDst: this.blendDst,
|
|
// blendEquation: this.blendEquation,
|
|
// depthTest: this.depthTest,
|
|
// depthFunc: this.depthFunc,
|
|
// depthWrite: this.depthWrite,
|
|
// polygonOffset: this.polygonOffset,
|
|
// polygonOffsetFactor: this.polygonOffsetFactor,
|
|
// polygonOffsetUnits: this.polygonOffsetUnits,
|
|
// alphaTest: this.alphaTest,
|
|
// clippingPlanes: this.clippingPlanes,
|
|
// clipShadows: this.clipShadows,
|
|
// overdraw: this.overdraw,
|
|
// visible: this.visible,
|
|
// side: this.side,
|
|
// color: this.color.instance,
|
|
// vertexColors: this.vertexColors,
|
|
// fog: this.fog
|
|
// });
|
|
// };
|
|
|
|
// R3.D3.Material.prototype.checkTexture = function(runtimeMap, instanceMap) {
|
|
//
|
|
// var textureChanged = false;
|
|
//
|
|
// if (this[runtimeMap] && this[runtimeMap].instance) {
|
|
// if (this.instance[instanceMap] !== this[runtimeMap].instance) {
|
|
// this.instance[instanceMap] = this[runtimeMap].instance;
|
|
// textureChanged = true;
|
|
// }
|
|
// } else {
|
|
// if (this.instance[instanceMap] !== null) {
|
|
// this.instance[instanceMap] = null;
|
|
// textureChanged = true;
|
|
// }
|
|
// }
|
|
//
|
|
// return textureChanged;
|
|
// };
|
|
//
|
|
// /**
|
|
// * updates textures
|
|
// */
|
|
// R3.D3.Material.prototype.updateTextures = function() {
|
|
//
|
|
// var textureChanged = false;
|
|
//
|
|
// if (this.checkTexture('alphaMap', 'alphaMap')) {
|
|
// textureChanged = true;
|
|
// }
|
|
//
|
|
// if (this.checkTexture('aoMap', 'aoMap')) {
|
|
// textureChanged = true;
|
|
// }
|
|
//
|
|
// if (this.checkTexture('bumpMap', 'bumpMap')) {
|
|
// textureChanged = true;
|
|
// }
|
|
//
|
|
// if (this.checkTexture('diffuseMap', 'map')) {
|
|
// textureChanged = true;
|
|
// }
|
|
//
|
|
// if (this.checkTexture('displacementMap', 'displacementMap')) {
|
|
// textureChanged = true;
|
|
// }
|
|
//
|
|
// if (this.checkTexture('emissiveMap', 'emissiveMap')) {
|
|
// textureChanged = true;
|
|
// }
|
|
//
|
|
// if (this.checkTexture('environmentMap', 'envMap')) {
|
|
// textureChanged = true;
|
|
// }
|
|
//
|
|
// if (this.checkTexture('lightMap', 'lightMap')) {
|
|
// textureChanged = true;
|
|
// }
|
|
//
|
|
// if (this.checkTexture('metalnessMap', 'metalnessMap')) {
|
|
// textureChanged = true;
|
|
// }
|
|
//
|
|
// if (this.checkTexture('normalMap', 'normalMap')) {
|
|
// textureChanged = true;
|
|
// }
|
|
//
|
|
// if (this.checkTexture('roughnessMap', 'roughnessMap')) {
|
|
// textureChanged = true;
|
|
// }
|
|
//
|
|
// if (this.checkTexture('specularMap', 'specularMap')) {
|
|
// textureChanged = true;
|
|
// }
|
|
//
|
|
// if (textureChanged) {
|
|
// this.publish(
|
|
// R3.Event.MATERIAL_TEXTURES_UPDATED,
|
|
// {
|
|
// material : this
|
|
// }
|
|
// );
|
|
// }
|
|
//
|
|
// return textureChanged;
|
|
// };
|
|
//
|
|
//
|
|
// R3.D3.Material.prototype.updateToonMaterialInstance = function(property) {
|
|
// this.instance.name = this.name;
|
|
// this.instance.opacity = this.opacity;
|
|
// this.instance.transparent = this.transparent;
|
|
// this.instance.blending = this.blending;
|
|
// this.instance.blendSrc = this.blendSrc;
|
|
// this.instance.blendDst = this.blendDst;
|
|
// this.instance.blendEquation = this.blendEquation;
|
|
// this.instance.depthTest = this.depthTest;
|
|
// this.instance.depthFunc = this.depthFunc;
|
|
// this.instance.depthWrite = this.depthWrite;
|
|
// this.instance.polygonOffset = this.polygonOffset;
|
|
// this.instance.polygonOffsetFactor = this.polygonOffsetFactor;
|
|
// this.instance.polygonOffsetUnits = this.polygonOffsetUnits;
|
|
// this.instance.alphaTest = this.alphaTest;
|
|
// this.instance.clippingPlanes = this.clippingPlanes;
|
|
// this.instance.clipShadows = this.clipShadows;
|
|
// this.instance.overdraw = this.overdraw;
|
|
// this.instance.visible = this.visible;
|
|
// this.instance.side = this.side;
|
|
// this.instance.color = this.color.instance;
|
|
// this.instance.envMapIntensity = this.envMapIntensity; //standard material doesnt have specular color
|
|
// this.instance.roughness = this.roughness;
|
|
// this.instance.metalness = this.metalness;
|
|
// this.instance.lightMapIntensity = this.lightMapIntensity;
|
|
// this.instance.aoMapIntensity = this.aoMapIntensity;
|
|
// this.instance.emissive = this.emissive.instance;
|
|
// this.instance.emissiveIntensity = this.emissiveIntensity;
|
|
// this.instance.bumpScale = this.bumpScale;
|
|
// this.instance.normalScale = this.normalScale;
|
|
// this.instance.displacementScale = this.displacementScale;
|
|
// this.instance.refractionRatio = this.refractionRatio;
|
|
// this.instance.fog = this.fog;
|
|
// this.instance.flatShading = this.flatShading;
|
|
// this.instance.wireframe = this.wireframe;
|
|
// this.instance.wireframeLinewidth = this.wireframeLineWidth;
|
|
// this.instance.wireframeLinecap = this.wireframeLineCap;
|
|
// this.instance.wireframeLinejoin = this.wireframeLineJoin;
|
|
// this.instance.vertexColors = this.vertexColors;
|
|
// this.instance.skinning = this.skinning;
|
|
// this.instance.morphTargets = this.morphTargets;
|
|
// this.instance.morphNormals = this.morphNormals;
|
|
// };
|
|
//
|
|
// R3.D3.Material.prototype.updateStandardMaterialInstance = function(property) {
|
|
// this.instance.name = this.name;
|
|
// this.instance.opacity = this.opacity;
|
|
// this.instance.transparent = this.transparent;
|
|
// this.instance.blending = this.blending;
|
|
// this.instance.blendSrc = this.blendSrc;
|
|
// this.instance.blendDst = this.blendDst;
|
|
// this.instance.blendEquation = this.blendEquation;
|
|
// this.instance.depthTest = this.depthTest;
|
|
// this.instance.depthFunc = this.depthFunc;
|
|
// this.instance.depthWrite = this.depthWrite;
|
|
// this.instance.polygonOffset = this.polygonOffset;
|
|
// this.instance.polygonOffsetFactor = this.polygonOffsetFactor;
|
|
// this.instance.polygonOffsetUnits = this.polygonOffsetUnits;
|
|
// this.instance.alphaTest = this.alphaTest;
|
|
// this.instance.clippingPlanes = this.clippingPlanes;
|
|
// this.instance.clipShadows = this.clipShadows;
|
|
// this.instance.overdraw = this.overdraw;
|
|
// this.instance.visible = this.visible;
|
|
// this.instance.side = this.side;
|
|
// this.instance.color = this.color.instance;
|
|
// this.instance.envMapIntensity = this.envMapIntensity; //standard material doesnt have specular color
|
|
// this.instance.roughness = this.roughness;
|
|
// this.instance.metalness = this.metalness;
|
|
// this.instance.lightMapIntensity = this.lightMapIntensity;
|
|
// this.instance.aoMapIntensity = this.aoMapIntensity;
|
|
// this.instance.emissive = this.emissive.instance;
|
|
// this.instance.emissiveIntensity = this.emissiveIntensity;
|
|
// this.instance.bumpScale = this.bumpScale;
|
|
// this.instance.normalScale = this.normalScale;
|
|
// this.instance.displacementScale = this.displacementScale;
|
|
// this.instance.refractionRatio = this.refractionRatio;
|
|
// this.instance.fog = this.fog;
|
|
// this.instance.flatShading = this.flatShading;
|
|
// this.instance.wireframe = this.wireframe;
|
|
// this.instance.wireframeLinewidth = this.wireframeLineWidth;
|
|
// this.instance.wireframeLinecap = this.wireframeLineCap;
|
|
// this.instance.wireframeLinejoin = this.wireframeLineJoin;
|
|
// this.instance.vertexColors = this.vertexColors;
|
|
// this.instance.skinning = this.skinning;
|
|
// this.instance.morphTargets = this.morphTargets;
|
|
// this.instance.morphNormals = this.morphNormals;
|
|
// };
|
|
//
|
|
// R3.D3.Material.prototype.updatePointsMaterialInstance = function(property) {
|
|
// this.instance.name = this.name;
|
|
// this.instance.opacity = this.opacity;
|
|
// this.instance.transparent = this.transparent;
|
|
// // this.instance.blending = this.blending;
|
|
// // this.instance.blendSrc = this.blendSrc;
|
|
// // this.instance.blendDst = this.blendDst;
|
|
// // this.instance.blendEquation = this.blendEquation;
|
|
// // this.instance.depthTest = this.depthTest;
|
|
// this.instance.depthFunc = this.depthFunc;
|
|
// this.instance.depthWrite = this.depthWrite;
|
|
// // this.instance.polygonOffset = this.polygonOffset;
|
|
// // this.instance.polygonOffsetFactor = this.polygonOffsetFactor;
|
|
// // this.instance.polygonOffsetUnits = this.polygonOffsetUnits;
|
|
// // this.instance.alphaTest = this.alphaTest;
|
|
// // this.instance.clippingPlanes = this.clippingPlanes;
|
|
// // this.instance.clipShadows = this.clipShadows;
|
|
// // this.instance.overdraw = this.overdraw;
|
|
// this.instance.visible = this.visible;
|
|
// this.instance.side = this.side;
|
|
// this.instance.color = this.color.instance;
|
|
// this.instance.size = this.pointSize;
|
|
// this.instance.sizeAttenuation = this.pointSizeAttenuation;
|
|
// //this.instance.vertexColors = this.vertexColors;
|
|
// //this.instance.fog = this.fog;
|
|
// };
|
|
//
|
|
// R3.D3.Material.prototype.updateLineBasicMaterialInstance = function(property) {
|
|
//
|
|
// var linecap = 'round';
|
|
//
|
|
// if (this.lineCap === R3.D3.API.Material.LINE_CAP_BUTT) {
|
|
// linecap = 'butt';
|
|
// }
|
|
//
|
|
// if (this.lineCap === R3.D3.API.Material.LINE_CAP_SQUARE) {
|
|
// linecap = 'square';
|
|
// }
|
|
//
|
|
// var linejoin = 'round';
|
|
//
|
|
// if (this.lineJoin === R3.D3.API.Material.LINE_JOIN_BEVEL) {
|
|
// linejoin = 'bevel';
|
|
// }
|
|
//
|
|
// if (this.lineJoin === R3.D3.API.Material.LINE_JOIN_MITER) {
|
|
// linejoin = 'miter';
|
|
// }
|
|
//
|
|
// this.instance.name = this.name;
|
|
// this.instance.opacity = this.opacity;
|
|
// this.instance.transparent = this.transparent;
|
|
// // this.instance.blending = this.blending;
|
|
// // this.instance.blendSrc = this.blendSrc;
|
|
// // this.instance.blendDst = this.blendDst;
|
|
// // this.instance.blendEquation = this.blendEquation;
|
|
// // this.instance.depthTest = this.depthTest;
|
|
// this.instance.depthFunc = this.depthFunc;
|
|
// this.instance.depthWrite = this.depthWrite;
|
|
// // this.instance.polygonOffset = this.polygonOffset;
|
|
// // this.instance.polygonOffsetFactor = this.polygonOffsetFactor;
|
|
// // this.instance.polygonOffsetUnits = this.polygonOffsetUnits;
|
|
// // this.instance.alphaTest = this.alphaTest;
|
|
// // this.instance.clippingPlanes = this.clippingPlanes;
|
|
// // this.instance.clipShadows = this.clipShadows;
|
|
// // this.instance.overdraw = this.overdraw;
|
|
// this.instance.visible = this.visible;
|
|
// this.instance.side = this.side;
|
|
// this.instance.color = this.color.instance;
|
|
//
|
|
// this.instance.linewidth = this.lineWidth;
|
|
// this.instance.linecap = linecap;
|
|
// this.instance.linejoin = linejoin;
|
|
//
|
|
// //this.instance.vertexColors = this.vertexColors;
|
|
// //this.instance.fog = this.fog;
|
|
// };
|
|
//
|
|
//
|
|
// R3.D3.Material.prototype.updatePhongMaterialInstance = function(property) {
|
|
// this.instance.name = this.name;
|
|
// this.instance.opacity = this.opacity;
|
|
// this.instance.transparent = this.transparent;
|
|
// this.instance.blending = this.blending;
|
|
// this.instance.blendSrc = this.blendSrc;
|
|
// this.instance.blendDst = this.blendDst;
|
|
// this.instance.blendEquation = this.blendEquation;
|
|
// this.instance.depthTest = this.depthTest;
|
|
// this.instance.depthFunc = this.depthFunc;
|
|
// this.instance.depthWrite = this.depthWrite;
|
|
// this.instance.polygonOffset = this.polygonOffset;
|
|
// this.instance.polygonOffsetFactor = this.polygonOffsetFactor;
|
|
// this.instance.polygonOffsetUnits = this.polygonOffsetUnits;
|
|
// this.instance.alphaTest = this.alphaTest;
|
|
// this.instance.clippingPlanes = this.clippingPlanes;
|
|
// this.instance.clipShadows = this.clipShadows;
|
|
// this.instance.overdraw = this.overdraw;
|
|
// this.instance.visible = this.visible;
|
|
// this.instance.side = this.side;
|
|
// this.instance.color = this.color.instance;
|
|
// this.instance.specular = this.specular.instance;
|
|
// this.instance.shininess = this.shininess;
|
|
// this.instance.lightMapIntensity = this.lightMapIntensity;
|
|
// this.instance.aoMapIntensity = this.aoMapIntensity;
|
|
// this.instance.emissive = this.emissive.instance;
|
|
// this.instance.emissiveIntensity = this.emissiveIntensity;
|
|
// this.instance.envMapIntensity = this.envMapIntensity;
|
|
// this.instance.bumpScale = this.bumpScale;
|
|
// this.instance.normalScale = this.normalScale;
|
|
// this.instance.displacementScale = this.displacementScale;
|
|
// this.instance.combine = this.combine;
|
|
// this.instance.refractionRatio = this.refractionRatio;
|
|
// this.instance.fog = this.fog;
|
|
// this.instance.flatShading = this.flatShading;
|
|
// this.instance.wireframe = this.wireframe;
|
|
// this.instance.wireframeLinewidth = this.wireframeLineWidth;
|
|
// this.instance.wireframeLinecap = this.wireframeLineCap;
|
|
// this.instance.wireframeLinejoin = this.wireframeLineJoin;
|
|
// this.instance.vertexColors = this.vertexColors;
|
|
// this.instance.skinning = this.skinning;
|
|
// this.instance.morphTargets = this.morphTargets;
|
|
// this.instance.morphNormals = this.morphNormals;
|
|
// };
|
|
//
|
|
// R3.D3.Material.prototype.updateMeshBasicMaterialInstance = function(property) {
|
|
// this.instance.name = this.name;
|
|
// this.instance.opacity = this.opacity;
|
|
// this.instance.transparent = this.transparent;
|
|
// this.instance.blending = this.blending;
|
|
// this.instance.blendSrc = this.blendSrc;
|
|
// this.instance.blendDst = this.blendDst;
|
|
// this.instance.blendEquation = this.blendEquation;
|
|
// this.instance.depthTest = this.depthTest;
|
|
// this.instance.depthFunc = this.depthFunc;
|
|
// this.instance.depthWrite = this.depthWrite;
|
|
// this.instance.polygonOffset = this.polygonOffset;
|
|
// this.instance.polygonOffsetFactor = this.polygonOffsetFactor;
|
|
// this.instance.polygonOffsetUnits = this.polygonOffsetUnits;
|
|
// this.instance.alphaTest = this.alphaTest;
|
|
// this.instance.clippingPlanes = this.clippingPlanes;
|
|
// this.instance.clipShadows = this.clipShadows;
|
|
// this.instance.overdraw = this.overdraw;
|
|
// this.instance.visible = this.visible;
|
|
// this.instance.side = this.side;
|
|
// this.instance.color = this.color.instance;
|
|
// this.instance.vertexColors = this.vertexColors;
|
|
// this.instance.fog = this.fog;
|
|
// };
|
|
//
|
|
// /**
|
|
// * Material instance
|
|
// * @returns {*}
|
|
// */
|
|
// R3.D3.Material.prototype.createInstance = function() {
|
|
//
|
|
// if (this.materialType === R3.D3.API.Material.MATERIAL_TYPE_STANDARD) {
|
|
//
|
|
// this.instance = this.createStandardMaterialInstance();
|
|
//
|
|
// } else if (this.materialType === R3.D3.API.Material.MATERIAL_TYPE_POINTS) {
|
|
//
|
|
// this.instance = this.createPointsMaterialInstance();
|
|
//
|
|
// } else if (this.materialType === R3.D3.API.Material.MATERIAL_TYPE_PHONG) {
|
|
//
|
|
// this.instance = this.createPhongMaterialInstance();
|
|
//
|
|
// } else if (this.materialType === R3.D3.API.Material.MATERIAL_TYPE_BASIC) {
|
|
//
|
|
// this.instance = this.createMeshBasicMaterialInstance();
|
|
//
|
|
// } else if (this.materialType === R3.D3.API.Material.MATERIAL_TYPE_LINE_BASIC) {
|
|
//
|
|
// this.instance = this.createLineBasicMaterialInstance();
|
|
//
|
|
// } else if (this.materialType === R3.D3.API.Material.MATERIAL_TYPE_TOON) {
|
|
//
|
|
// this.instance = this.createToonMaterialInstance();
|
|
//
|
|
// } else {
|
|
// console.warn("material type is not implemented yet: " + this.materialType);
|
|
// }
|
|
//
|
|
// this.instance.needsUpdate = true;
|
|
//
|
|
// this.updateTextures();
|
|
//
|
|
// R3.Component.prototype.createInstance.call(this);
|
|
// };
|
|
|
|
/**
|
|
* Updates the instance with the current state
|
|
*/
|
|
|
|
|