Three.js |无法将动态文本几何添加到 3d 网格
Three.js | Not able to add Dynamic Text Geometry to 3d mesh
我正在研究 POC,我必须在其中定制 3d 模型中的手表。
我正在使用 thee.js 来做 webgl 的东西。我能够更改表带颜色、表盘颜色并在表带上加载纹理图像。但是当我尝试在手表上添加动态文本时我被卡住了,当用户在雕刻文本文本框中输入时,我必须更新手表后表盘上的文本。为此,我尝试了 https://github.com/jeromeetienne/threex.dynamictexture library ,它适用于新的几何体,但我无法将其添加到 watch 的现有模型中。
我已经推送了 github 中的所有代码:https://github.com/bhupendra1011/watch-3d-engrave,因为我无法从我的 fiddle 帐户加载外部 3d 模型{CORS 问题}。
可以在这里看到 POC 的演示:https://bhupendra1011.github.io/watch-3d-engrave/index.html
下面是在表盘上添加文字的代码;要加载文本,请单击 index.html
中的使用纹理文本框
function engraveTextOnWatch(val = "IWC") {
dynamicTexture = new THREEx.DynamicTexture(512, 512);
dynamicTexture.context.font = "bolder 90px Verdana";
// watch back dial geometry & material where text needs to be engraved
var backDialGeometry = object3d.children[1].children[0].children[0].geometry;
var backDialMaterial = object3d.children[1].children[0].children[0].material;
// geometry to add dynamic text
var geometry = new THREE.CubeGeometry(1, 1, 1);
var material = new THREE.MeshBasicMaterial({
map: dynamicTexture.texture
});
var mesh = new THREE.Mesh(geometry, material);
scene.add(mesh); // adding mesh to scene , but this needs to be attache to watch's back dial geomtry
/* tried adding dynamicTexture to watch back dial material, but this is not working , text not appearing */
//backDialMaterial.map = dynamicTexture.texture;
dynamicTexture.texture.needsUpdate = true;
dynamicTexture.drawText(val, 2, 256, "orange");
}
请告诉我如何在现有模型上添加动态文本。
谢谢。
我能够在 Blender 中重现您的问题,它来自您模型的 UV 贴图。
我下载了您的模型,在 Three.js 编辑器中将其打开并将其转换为 .obj 以在搅拌机中打开它以重现您的问题
正如您在图片上看到的那样,应用纹理同样混乱。您需要像这样重新处理模型的 uvmap 以达到预期的效果(我使用了您文件夹中的随机图像)
当你在做的时候,你可能想考虑优化你的模型,它非常重,可以简化以在不损失视觉质量的情况下更快地加载(但这完全取决于你,我只是建议).
这是当前模型
这是一个可能的快速替代品。一端开口并在边缘环上倾斜的圆柱体
我正在研究 POC,我必须在其中定制 3d 模型中的手表。 我正在使用 thee.js 来做 webgl 的东西。我能够更改表带颜色、表盘颜色并在表带上加载纹理图像。但是当我尝试在手表上添加动态文本时我被卡住了,当用户在雕刻文本文本框中输入时,我必须更新手表后表盘上的文本。为此,我尝试了 https://github.com/jeromeetienne/threex.dynamictexture library ,它适用于新的几何体,但我无法将其添加到 watch 的现有模型中。
我已经推送了 github 中的所有代码:https://github.com/bhupendra1011/watch-3d-engrave,因为我无法从我的 fiddle 帐户加载外部 3d 模型{CORS 问题}。 可以在这里看到 POC 的演示:https://bhupendra1011.github.io/watch-3d-engrave/index.html
下面是在表盘上添加文字的代码;要加载文本,请单击 index.html
中的使用纹理文本框 function engraveTextOnWatch(val = "IWC") {
dynamicTexture = new THREEx.DynamicTexture(512, 512);
dynamicTexture.context.font = "bolder 90px Verdana";
// watch back dial geometry & material where text needs to be engraved
var backDialGeometry = object3d.children[1].children[0].children[0].geometry;
var backDialMaterial = object3d.children[1].children[0].children[0].material;
// geometry to add dynamic text
var geometry = new THREE.CubeGeometry(1, 1, 1);
var material = new THREE.MeshBasicMaterial({
map: dynamicTexture.texture
});
var mesh = new THREE.Mesh(geometry, material);
scene.add(mesh); // adding mesh to scene , but this needs to be attache to watch's back dial geomtry
/* tried adding dynamicTexture to watch back dial material, but this is not working , text not appearing */
//backDialMaterial.map = dynamicTexture.texture;
dynamicTexture.texture.needsUpdate = true;
dynamicTexture.drawText(val, 2, 256, "orange");
}
请告诉我如何在现有模型上添加动态文本。 谢谢。
我能够在 Blender 中重现您的问题,它来自您模型的 UV 贴图。
我下载了您的模型,在 Three.js 编辑器中将其打开并将其转换为 .obj 以在搅拌机中打开它以重现您的问题
正如您在图片上看到的那样,应用纹理同样混乱。您需要像这样重新处理模型的 uvmap 以达到预期的效果(我使用了您文件夹中的随机图像)
当你在做的时候,你可能想考虑优化你的模型,它非常重,可以简化以在不损失视觉质量的情况下更快地加载(但这完全取决于你,我只是建议).
这是当前模型