Files
pronature-platform/src/components/InteractiveObjects/TextObject.js
T

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}