threejs物体内部的贴图如何透视

发布于 2022-09-12 03:00:46 字数 2029 浏览 19 评论 0

如图,有两个物体,矩形在球体内部,球体半透明,矩形显示公司logo。现在的问题是内部立方体的贴图无法呈现,如果内部设置transparent:true内部就变成全透明的了,如下图:
image.png
如果内部把transparent关掉,里面矩形的背景就变成黑色的了。。
image.png

想要实现的效果是:球体半透明可以显示球体内部的立方体的半透明贴图。已经尝试过各种搜索还是未果,希望可以得到解答,谢谢!

具体代码如下:

geometry部分

const Geometry = {
    sphere: (num = 60, scale = false) => {
        const geometry = new THREE.SphereGeometry(num, 40, 40);
        if (!scale) return geometry;
        const s = Math.random().toFixed(2);
        geometry.scale(s, s, s);
        return geometry;
    },
    innerCube2: (img, r, p, angle = 60, ) => {
        const width = Maths.sin(angle) * r * 2
        const height = Maths.cos(angle) * r * 2
        const depth = 1
        const geometry = new THREE.BoxGeometry(width, height, depth)
        const [x, y, z] = p;
        const mesh = new THREE.Mesh(geometry, Material.imgMaterial(img)); //网格模型对象Mesh
        mesh.position.set(x, y, z);
        return mesh;
    },
    }

material部分:

const Material = {
transparent: new THREE.MeshLambertMaterial({
        color: "purple",
        opacity: 0.1,
        transparent: true,
        side: THREE.DoubleSide,
    }),
  imgMaterial: (IMG) => {
        const texture = new THREE.TextureLoader().load(IMG);
        console.log("IMG", IMG);
        return new THREE.MeshBasicMaterial({
            //side: THREE.DoubleSide, //两面可见
            // transparent: true,
            //lights: true,
            map: texture,
            //opacity: 0.4,
            color: '#fff',
        });
    },
}

main.js

const mesh = new THREE.Mesh(
      Geometry.sphere(LONG, false),
      Material.transparent
    ); //网格模型对象Mesh
const innerCube = Geometry.innerCube2(pics[0], LONG, [
      x * 100,
      y * 100,
      z * 100,
    ]);
scene.add(innerCube);
scene.add(mesh);

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

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

发布评论

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

评论(1

相守太难 2022-09-19 03:00:46

在这上找到答案了,内部渲染顺序的问题。看来得好好学学webgl了。https://stackoverflow.com/questions/15994944/transparent-objects-in-threejs?noredirect=1&lq=1

最简单的方式是写这一句:
renderer.sortObjects = false;

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