【发布时间】:2022-12-15 12:04:23
【问题描述】:
我发现除了通过编辑 .js 文件更改每个其他场景的颜色和大小之外,我还可以使用 dat.gui 来控制 textGeometry 的大小和颜色。但可能是我的代码架构不好,我无法控制甚至无法将 gui 文件夹添加到场景中。它可能与我正在使用的 FontLoader 有关。
我尝试将 dat.gui 放在我的 textGeometry 创建函数的内部和外部,但没有一个起作用。据我所知,每次尺寸或颜色发生变化时,它都应该处理并删除创建的网格以创建一个具有新颜色/尺寸参数的新网格(我还为每个按键事件更新以创建一个新网格所以这就是我的想法).
textGeometry、textMesh、textMaterial等定义在全局
function textCreation() {
const fontLoader = new FontLoader();
fontLoader.load(
"node_modules/three/examples/fonts/droid/droid_sans_bold.typeface.json",
(droidFont) => {
textGeometry = new TextGeometry(initText, { //initText variable gets updated with each keydown
size: 5,
height: 2,
font: droidFont,
parameters: {
size: 5,
height: 2,
},
});
textMaterial = new THREE.MeshBasicMaterial({ color: 0xff0000 });
textMesh = new THREE.Mesh(textGeometry, textMaterial);
group = new THREE.Group();
group.add(textMesh);
scene.add(group);
}
这是我尝试放入和放入此函数之外的 dat.gui 控制器。
let textFolder = gui.addFolder("Text Controls");
textFolder.add(textGeometry, "size", 10, 20).onChange(function () {
textGeometry.setSize(textGeometry.size);
// Probably dispose and remove old mesh from scene and create mesh with these new parameters
});
textFolder.addColor(textGeometry, "color").onChange(function () {
textGeometry.setColor(textGeometry.color);
我无法在不破坏场景的情况下添加任何 dat.gui 控制器。顺便说一句,我对 JavaScript 和 three.JS 有点陌生,所以如果有进一步的解释,欢迎提供。
【问题讨论】: