53 lines
1.8 KiB
JavaScript
53 lines
1.8 KiB
JavaScript
import { MeshStandardMaterial, Color, Vector3, DoubleSide } from "three";
|
|
import { Text } from "troika-three-text";
|
|
import { assignParams } from "@/lib/MeshUtils";
|
|
|
|
class TextObject {
|
|
constructor(obj, engine, params) {
|
|
const txt = new Text();
|
|
// Set properties to configure:
|
|
txt.text = obj.text;
|
|
txt.fontSize = 0.033;
|
|
txt.lineHeight = 1.1;
|
|
txt.maxWidth = obj.width || params.wallSize * .73;
|
|
txt.textAlign = 'center';
|
|
txt.font = params.fontPath;
|
|
txt.anchorX = 'center';
|
|
txt.anchorY = 'bottom';
|
|
txt.curveRadius = 0;
|
|
txt.outlineColor = 0xffffff;
|
|
txt.outlineWidth = '15%';
|
|
txt.depthOffset = 0.1;
|
|
//txt.outlineBlur = '50%';
|
|
txt.color = new Color(0x0);
|
|
assignParams(txt, obj)
|
|
let m = new MeshStandardMaterial({
|
|
roughness: .73,
|
|
metalness: .37,
|
|
side: DoubleSide
|
|
});
|
|
txt.material = m;
|
|
txt.sync();
|
|
this.txt = txt;
|
|
this.object = txt;
|
|
// if (obj.effect == 'distance') {
|
|
// let dstm = .8;
|
|
// var oldBR = txt.onBeforeRender;
|
|
// txt.material[1].opacity = 0.01;
|
|
// txt.onBeforeRender = function (renderer, scene, camera) {
|
|
// oldBR && oldBR.apply(this, arguments);
|
|
// var v = new Vector3();
|
|
// txt.getWorldPosition(v);
|
|
// var dst = camera.position.distanceTo(v);
|
|
// if (dst < dstm * 2 && dst > dstm * 1) {
|
|
// txt.material[1].opacity = dstm * 1 - (dst - dstm * 1);
|
|
// }
|
|
// if (dst < .5 * dstm) {
|
|
// txt.material[1].opacity = dstm * dst * 2;
|
|
// }
|
|
// };
|
|
// }
|
|
}
|
|
}
|
|
|
|
export {TextObject} |