【问题标题】:Three js. changetexture load on click of another texture/ image三个js。单击另一个纹理/图像时更改纹理加载
【发布时间】:2017-06-25 14:10:11
【问题描述】:

我想用 Threejs 创建一个 360 度图像视图。我有 4 张图片,其中 1 张与 threejs 链接,其余 3 张像缩略图一样位于页面底部,因此当我单击缩略图时,360 度图像视图应该会发生变化。

我的Codepen,顺便说一句,它的 360 度图像是黑色的,它没有出现在 codepen 中,但在 localhost 中可以正常工作。本地主机预览如下。您可以在底部看到另外 3 张图片。

我的本​​地主机图像代码。

var material = new THREE.MeshBasicMaterial( {
                map: new THREE.TextureLoader().load( 'assets/image3.jpg' )
            } );

【问题讨论】:

    标签: javascript jquery html css three.js


    【解决方案1】:

    您只需要更新球体的材质。只需先预加载所有图像并将它们存储为材料。另外,我猜用户正坐在你的球体内。你只需要渲染backSide

    //globals
    var images = [];
    
    //preload
    for (var i = 0; i < numberOfImages; i++) {
    var loadImage = new THREE.TextureLoader().load('path/to/image/imageName_'+i, function(texture) {
    
         var material = new THREE.MeshBasicMaterial({map:texture, side:THREE.BackSide});
    
         images.push(material);
      }
    }
    

    然后单击缩略图,像在 load 事件中一样更新材质,从数组中选择正确的材质并设置球体的平面 object.material.needsUpdate = true

    编辑:您也可以简单地将预加载的纹理存储在数组中并更新您现有的material.map。不要忘记标记object.material.needsUpdate = true;

    【讨论】:

    • 是的,用户正坐在球体内。我不太明白。对不起,我是 jQuery 的新手。努力学习。 @Hesha
    • 如果没有其他人,我会在一个小时左右为您准备一个简单的小提琴。
    • 你真好。如果需要,请随意分叉我的 codepen。谢谢。
    • 这是一支笔,它将向您展示其中一种方法。您必须做的一件事是:在进行更改后更新材料。我使用了 CORS 的废话 base64 图像...用你的图像替换它们。祝你好运。 codepen.io/TheDebOfNight/pen/KaGNYM?editors=0110
    • 它最初不加载图像,是不是就像预加载了第一张图像,然后当其他人点击它时改变了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-31
    • 2017-09-11
    • 2015-06-07
    • 2018-04-04
    • 2013-08-21
    • 2020-01-12
    • 2021-10-08
    相关资源
    最近更新 更多