js/base/Material.js
'use strict'
import Vector4 from './Vector4'
/**
* Material class
* @access public
*/
export default class Material {
/**
* constructor
* @access public
* @constructor
* @param {Material} m -
*/
constructor(m) {
this.ambient = null
this.diffuse = null
this.specular = null
this.shininess = 1.0
this.emission = null
this.alpha = 1.0
this.toonIndex = 0
this.edge = 0
this.textureFileName = ''
this.sphereFileName = ''
this.toonFileName = ''
this.texture = null
this.texture_repeat = true
this.sphere = null
this.toon = null
this._ambientCache = null
this._diffuseCache = null
this._specularCache = null
this._emissionCache = null
if(m instanceof Material){
this.ambient = new Vector4(m.ambient)
this.diffuse = new Vector4(m.diffuse)
this.specular = new Vector4(m.specular)
this.shininess = m.shininess
this.emission = new Vector4(m.emission)
this.alpha = m.alpha
this.toonIndex = m.toonIndex
this.edge = m.edge
this.textureFileName = m.textureFileName
this.sphereFileName = m.sphereFileName
this.texture = m.texture
this.texture_repeat = m.texture_repeat
this.sphere = m.sphere
}
}
/**
* get ambient value
* @access public
* @returns {Float32Array} - ambient value
*/
getAmbient() {
if(!this._ambientCache){
this._ambientCache = new Float32Array([
this.ambient.x,
this.ambient.y,
this.ambient.z,
this.ambient.w
])
}
return this._ambientCache
}
/**
* get diffuse value
* @access public
* @returns {Float32Array} - diffuse value
*/
getDiffuse() {
if(!this._diffuseCache){
this._diffuseCache = new Float32Array([
this.diffuse.x,
this.diffuse.y,
this.diffuse.z,
this.diffuse.w
])
}
return this._diffuseCache
}
/**
* get specular value
* @access public
* @returns {Float32Array} - specular value
*/
getSpecular() {
if(!this._specularCache){
this._specularCache = new Float32Array([
this.specular.x,
this.specular.y,
this.specular.z,
this.specular.w
])
}
return this._specularCache
}
/**
* get shininess value
* @access public
* @returns {float} - shininess value
*/
getShininess() {
return this.shininess
}
/**
* get emission value
* @access public
* @returns {Float32Array} - emission value
*/
getEmission() {
if(!this._emissionCache){
this._emissionCache = new Float32Array([
this.emission.x,
this.emission.y,
this.emission.z,
this.emission.w
])
}
return this._emissionCache
}
/**
* get alpha value
* @access public
* @returns {float} - alpha value
*/
getAlpha() {
return this.alpha
}
/**
* clear cache
* @access public
* @returns {void}
*/
clearCache() {
// FIXME
this._ambientCache = null
this._diffuseCache = null
this._specularCache = null
this._emissionCache = null
}
}