iv-3d-lib
Version:
A reusable ThreeJS library providing features for Ivee 3D Editor.
80 lines • 3.49 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.TextAttrLinesPlugin = void 0;
const THREE = require("three");
class TextAttrLinesPlugin {
init() {
}
load() {
setTimeout(() => {
let textMesh = this.mainGroup.children.find(item => item.uuid === this.config['textMeshId']);
if (textMesh) {
this.createLinesText(textMesh);
textMesh.visible = false;
}
}, 100);
}
update(time) {
if (time) {
let textTime = Date.now() * 0.001;
this.animateText(textTime);
}
}
createLinesText(textMesh) {
this.uniforms = {
amplitude: { type: "f", value: 5.0 },
opacity: { type: "f", value: 0.3 },
color: { type: "c", value: new THREE.Color(0xff8700) } // 0xff8700) }
};
let material = this.w.genShaderMaterial({ uniforms: this.uniforms, vertexShaderId: `${this.config['shaderId']}Vertex`, fragmentShaderId: `${this.config['shaderId']}Fragment` });
material.blending = THREE.AdditiveBlending;
material.depthTest = false;
material.transparent = true;
let vertices = textMesh.geometry.vertices;
let buffergeometry = new THREE.BufferGeometry();
let position = new THREE.Float32Attribute(vertices.length * 3, 3).copyVector3sArray(vertices);
buffergeometry.addAttribute('position', position);
let displacement = new THREE.Float32Attribute(vertices.length * 3, 3);
buffergeometry.addAttribute('displacement', displacement);
let customColor = new THREE.Float32Attribute(vertices.length * 3, 3);
buffergeometry.addAttribute('customColor', customColor);
let color = new THREE.Color(0xffffff * Math.random());
for (let i = 0, l = customColor.count; i < l; i++) {
color.toArray(customColor.array, i * customColor.itemSize);
}
buffergeometry.center();
this.objText = new THREE.Line(buffergeometry, material);
// objText.rotation.x = 0.2;
this.objText.scale.set(2, 2, 2);
this.objText.visible = true;
this.objText.position.z = 100;
this.w.add(this.objText, this.mainGroup);
}
animateText(time) {
if (!this.objText || !this.uniforms)
return;
//objText.rotation.y = 0.25 * time;
this.uniforms.amplitude.value = Math.sin(0.5 * time);
var hx = 0.0005, hy = 0, hz = 0;
//var hx = 0.0005, hy = 0, hz = 0;
this.uniforms.color.value.offsetHSL(hx, hy, hz);
var attributes = this.objText.geometry.attributes;
var array = attributes.displacement.array;
for (var i = 0, l = array.length; i < l; i += 3) {
//array[i] += 0.3 * (0.5 - Math.random());
let offset1 = 0.3; // 0.3
let offset2 = 0.5; //0.5
array[i] += offset1 * (offset2 - Math.random());
array[i + 1] += offset1 * (offset2 - Math.random());
array[i + 2] += offset1 * (offset2 - Math.random());
}
attributes.displacement.needsUpdate = true;
/*
for(var i = 0; i < textMeshes.length; i++) {
textMeshes[i].rotation.x += 0.01 * Math.random();
}
*/
}
}
exports.TextAttrLinesPlugin = TextAttrLinesPlugin;
//# sourceMappingURL=text-attrlines-plugin.js.map