115 lines
2.7 KiB
JavaScript
115 lines
2.7 KiB
JavaScript
|
/**
|
||
|
* R3.D3.Material.Points
|
||
|
* @param graphics
|
||
|
* @param apiMaterialPoints
|
||
|
* @constructor
|
||
|
*/
|
||
|
R3.D3.Material.Points = function(
|
||
|
graphics,
|
||
|
apiMaterialPoints
|
||
|
) {
|
||
|
this.graphics = graphics;
|
||
|
this.graphics.isNotThreeThrow();
|
||
|
|
||
|
if (R3.Utils.UndefinedOrNull(apiMaterialPoints)) {
|
||
|
apiMaterialPoints = {
|
||
|
materialType : R3.D3.API.Material.MATERIAL_TYPE_POINTS
|
||
|
};
|
||
|
}
|
||
|
|
||
|
R3.D3.API.Material.Points.call(
|
||
|
this,
|
||
|
apiMaterialPoints,
|
||
|
apiMaterialPoints.color,
|
||
|
apiMaterialPoints.diffuseMap,
|
||
|
apiMaterialPoints.size,
|
||
|
apiMaterialPoints.sizeAttenuation
|
||
|
);
|
||
|
|
||
|
this.color = new R3.Color(
|
||
|
this.graphics,
|
||
|
this.color,
|
||
|
this
|
||
|
);
|
||
|
|
||
|
if (this.diffuseMap instanceof R3.D3.API.Texture) {
|
||
|
this.diffuseMap = R3.Component.ConstructFromObject(this.diffuseMap);
|
||
|
}
|
||
|
|
||
|
R3.D3.Material.call(
|
||
|
this,
|
||
|
this.graphics,
|
||
|
this
|
||
|
);
|
||
|
|
||
|
};
|
||
|
|
||
|
R3.D3.Material.Points.prototype = Object.create(R3.D3.Material.prototype);
|
||
|
R3.D3.Material.Points.prototype.constructor = R3.D3.Material.Points;
|
||
|
|
||
|
/**
|
||
|
* Creates an instance of our texture object
|
||
|
* @returns {*}
|
||
|
*/
|
||
|
R3.D3.Material.Points.prototype.createInstance = function() {
|
||
|
|
||
|
this.instance = new THREE.PointsMaterial(
|
||
|
{
|
||
|
color : this.color.instance,
|
||
|
map : this.diffuseMap ? this.diffuseMap.instance : null,
|
||
|
size : this.size,
|
||
|
sizeAttenuation : this.sizeAttenuation
|
||
|
}
|
||
|
);
|
||
|
|
||
|
R3.D3.Material.prototype.createInstance.call(this);
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Updates the instance with the current state
|
||
|
*/
|
||
|
R3.D3.Material.Points.prototype.updateInstance = function(property) {
|
||
|
|
||
|
if (property === 'color') {
|
||
|
this.instance.color = this.color.instance;
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if (property === 'diffuseMap') {
|
||
|
this.assignTexture('map', property);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if (property === 'size') {
|
||
|
this.instance.size = this.size;
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if (property === 'sizeAttenuation') {
|
||
|
this.instance.sizeAttenuation = this.sizeAttenuation;
|
||
|
this.instance.needsUpdate = true;
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
R3.D3.Material.prototype.updateInstance.call(this, property);
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Converts a R3.D3.Material.Points to a R3.D3.API.Material.Points
|
||
|
* @returns {R3.D3.API.Material.Points}
|
||
|
*/
|
||
|
R3.D3.Material.Points.prototype.toApiObject = function() {
|
||
|
|
||
|
var apiMaterial = R3.D3.Material.prototype.toApiObject.call(this);
|
||
|
|
||
|
var apiMaterialPoints = new R3.D3.API.Material.Points(
|
||
|
apiMaterial,
|
||
|
this.color.toApiObject(),
|
||
|
R3.Utils.IdOrNull(this.diffuseMap),
|
||
|
this.size,
|
||
|
this.sizeAttenuation
|
||
|
);
|
||
|
|
||
|
return apiMaterialPoints;
|
||
|
};
|