0

我正在开发一个 POC,我必须在其中自定义 3d 模型中的手表。我正在使用 thee.js 来做 webgl 的东西。我能够更改表带颜色、表盘颜色并在表带上加载纹理图像。但是当我尝试在手表上添加动态文本时我被卡住了,当用户在 Engrave Text 文本框中键入时,我必须更新手表后表盘上的文本。为此,我尝试了https://github.com/jeromeetienne/threex.dynamictexture库,它适用于新几何体,但我无法将其添加到手表的现有模型中。

我已经在 github 中推送了所有代码:https ://github.com/bhupendra1011/watch-3d-engrave ,因为我无法从我的小提琴帐户 {CORS issue} 加载外部 3d 模型。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");
}

请让我知道如何在现有模型上添加动态文本。谢谢。

4

1 回答 1

1

我能够在 Blender 中重现您的问题,它来自您模型的 UV 贴图。

我下载了您的模型,在 Three.js 编辑器中打开它并将其转换为 .obj 以在搅拌机中打开它以重现您的问题重现你的问题

正如您在图像上看到的,应用纹理同样混乱。您需要重新处理模型的 uvmap 以达到所需的效果(我使用了您文件夹中的随机图像)像这样想要的效果(我使用了您文件夹中的随机图像

当您使用它时,您可能需要考虑优化您的模型,该模型非常繁重,可以简化以获得更快的加载而不损失视觉质量(但这完全取决于您,我只是建议)。

这是当前模型可以简化 这是一个快速可能的替代品。一端开口并在边缘环上斜切的圆柱体简化对象

于 2018-06-04T09:30:44.243 回答