threejs 模型多次加载

发布于 2022-09-11 20:09:01 字数 1046 浏览 19 评论 0

开发过程中遇到的问题:

需求是有一个树的模型,然后点击地面,会在地面上“种下”一颗同样的树。现在是这个树的 JSON 文件存在服务器端,然后我来请求 JSON 的路径,用 JSONLoader 加载,成功后获取 geometry 和 material 构造 mesh。但是每次种树的时候都需要去请求 JSON 文件获取 geometry 和 material 这样太麻烦了,而且这个 JSON 文件还不小。想问下有没有方法可以只获取一次 geometry 和 material,然后把 geometry 和 material 存在某个地方就不用每次种树的时候重复发请求了。。

export function createTree (vector3, type, tempTreeId, modelUrl) {
  return new Promise((resolve, reject) => {
    loader.load(url(modelUrl), (geometry, materials) => resolve({ geometry, materials }), () => {}, reject)
  }).then(v => {
    const mesh = new THREE.Mesh()
    const { geometry, materials } = v
    const material = new THREE.MultiMaterial(materials)
    material.side = THREE.DoubleSide
    Object.assign(mesh, { geometry, material })
    mesh.castShadow = true
    mesh.receiveShadow = true
    // mesh.scale.set(10, 10, 10)
    mesh.position.copy(vector3)
    mesh.userData = { treeType: type, id: tempTreeId, type: 'tree'  }
    mainScene.add(mesh)
    return Promise.resolve(mesh)
  })
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

却一份温柔 2022-09-18 20:09:01

开始时加载一次模型,把这个模型放到视野外或visible置false,作为一个原型。每次新种树就clone一个这个原型,赋予克隆体新属性。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文