首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以用上传的文件改变模型查看器的纹理吗?(客户方)

我可以用上传的文件改变模型查看器的纹理吗?(客户方)
EN

Stack Overflow用户
提问于 2022-08-08 19:27:15
回答 1查看 149关注 0票数 0

挑战

目标是允许用户上传他们的纹理,以预览模型-查看器模型。

到目前为止我尝试过的

  1. I使其工作,但使用<input type="file">代替<input type="file">,可以将上传的图像显示为<img>元素.

示例

https://jsfiddle.net/pynrdk25/11/

代码语言:javascript
复制
document.getElementById("urlA").addEventListener("change", function() {
  const file = this.files[0];

  if (file) {
    const reader = new FileReader();
    document.getElementById("modelA").model.materials[0].pbrMetallicRoughness.baseColorTexture.texture.source.setURI(this.value);
    reader.readAsDataURL(file);
  }
})
代码语言:javascript
复制
body {
  background-color: rgba(255,255,255,0.85)
}
h1 {
  margin: 0;
  font-size:  16pt;
  font-family: Arial, Helvetica, sans-serif;
  color: #4a5a8a
  
}
model-viewer {
  width: 512px;
  height: 512px;
  border: 2px solid black;
  background-color: #484E61
}
input[type="file"] {
  margin: 15px auto
}
代码语言:javascript
复制
<script src="https://unpkg.com/@google/model-viewer@1.12.0/dist/model-viewer-umd.js"></script>
<h1>Upload an image to preview it in the model</h1>
<input type="file" id="urlA">
<model-viewer
id="modelA"
camera-controls
src="https://modelviewer.dev/shared-assets/models/Astronaut.glb"
shadow-intensity="0"
environment-image="neutral"
exposure="0.5"
></model-viewer>

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-08 20:46:50

我不太了解模型查看器或您试图更改的纹理,但我可以提供详细信息,说明为什么您的代码没有正确获取文件的内容。

您需要订阅FileReader上的FileReader事件并访问result属性以获得生成的数据URI。

代码语言:javascript
复制
document.getElementById("urlA").addEventListener("change", function() {
  const file = this.files[0];
  const viewer = document.getElementById("modelA");

  if (!file) return;

  const reader = new FileReader();
  reader.addEventListener('load', async function() {
    const texture = await viewer.createTexture(reader.result);
    viewer.model.materials[0].normalTexture.setTexture(texture);
  });
  reader.readAsDataURL(file);
})
代码语言:javascript
复制
body {
  background-color: rgba(255,255,255,0.85)
}
h1 {
  margin: 0;
  font-size:  16pt;
  font-family: Arial, Helvetica, sans-serif;
  color: #4a5a8a
  
}
model-viewer {
  width: 512px;
  height: 512px;
  border: 2px solid black;
  background-color: #484E61
}
input[type="file"] {
  margin: 15px auto
}
代码语言:javascript
复制
<script src="https://unpkg.com/@google/model-viewer@1.12.0/dist/model-viewer-umd.js"></script>
<h1>Upload an image to preview it in the model</h1>
<input type="file" id="urlA">
<model-viewer
id="modelA"
camera-controls
src="https://modelviewer.dev/shared-assets/models/Astronaut.glb"
shadow-intensity="0"
environment-image="neutral"
exposure="0.5"
></model-viewer>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73283056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档