首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Three.js加载一个gltf模型并为其设置颜色,但是当缩放时它都是黑色的。

Three.js加载一个gltf模型并为其设置颜色,但是当缩放时它都是黑色的。
EN

Stack Overflow用户
提问于 2022-10-27 08:16:40
回答 1查看 40关注 0票数 1

大家好,我遇到了一个奇怪的问题,那就是我在three.js中加载了一个gltf模型,并为it.When设置了颜色,在它有颜色的情况下,但是当缩放时,它都是black.And --当我直接为它的材料设置颜色时,它可以很好地工作。谢谢。

这是示例sreen相片和代码。

代码语言:javascript
运行
复制
loadGlbModel() {
  const loader = new GLTFLoader();
  loader.load(
    `/three/eiffel-tower.gltf`,
    (gltf) => {
      const geometry = gltf.scene.children[0].geometry;
      const positions = geometry.attributes.position;
      const count = positions.count;
      geometry.setAttribute(
        "color",
        new THREE.BufferAttribute(new Float32Array(count * 3), 3)
      );
      const color = new THREE.Color();
      const colors = geometry.attributes.color;

      const radius = 200;
      debugger;
      for (let i = 0; i < count; i++) {
        color.setHSL(positions.getY(i) / radius / 2, 1.0, 0.5);
        colors.setXYZ(i, 1, 0, 0);
      }

      const material = new THREE.MeshPhongMaterial({
        color: 0xffffff,
        flatShading: true,
        vertexColors: true,
        shininess: 0,
      });

      const wireframeMaterial = new THREE.MeshBasicMaterial({
        color: 0x000000,
        wireframe: true,
        transparent: true,
      });

      let mesh = new THREE.Mesh(geometry, material);
      let wireframe = new THREE.Mesh(geometry, wireframeMaterial);
      mesh.add(wireframe);
      mesh.scale.set(0.1, 0.1, 0.1);
      const redColor = new THREE.Color(1, 0, 0);
      console.log(mesh);
      // mesh.children[0].material.color = redColor;
      const light = new THREE.DirectionalLight(0xffffff);
      light.position.set(0, 0, 1);
      this.scene.add(light);
      this.scene.add(mesh);
    },
    (xhr) => {
      console.log((xhr.loaded / xhr.total) * 100 + "% loaded");
    },
    (error) => {
      console.error(error);
    }
  );
},
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-27 11:17:23

您也在渲染线框版本,它由屏幕空间中的行组成。缩放时,这些线条以像素为单位保持相同的宽度,从而覆盖其他所有内容。

你也想渲染这个框架吗?如果没有,就不要。如果你这样做了,那就考虑在用户放大时隐藏它。

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

https://stackoverflow.com/questions/74218857

复制
相关文章

相似问题

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