Three.js每个面设置不同的颜色、每个面设置不同的材质

1.每个面设置不同的颜色

            let geometry = new THREE.BoxGeometry( 1000, 1000, 1000);

            for(let i = 0;i<geometry.faces.length;i++){
                let hex = Math.random() * 0xffffff;
                geometry.faces[ i ].color.setHex( hex );
            }            

            let material = new THREE.MeshBasicMaterial( {
            vertexColors: THREE.FaceColors
            } );

            let mesh=new THREE.Mesh(geometry,material);
            scene.add(mesh);

效果

2.每个面设置不同的材质

            var geometry = new THREE.BoxGeometry( 1000, 1000, 1000);
            let mats=[];

            for(var i = 0;i<geometry.faces.length;i++){
                let material = new THREE.MeshBasicMaterial({ color: new THREE.Color(Math.random() * 0xffffff)});
                mats.push(material);
            }

            let mesh=new THREE.Mesh(geometry,mats);
            
            scene.add(mesh);
            objects.push(mesh);

效果:

但是这里还是看不太懂怎么赋予的材质,通过F12可以发现,实际上是给每个面增加了一个材质的索引。

搞懂这个原理后,我们就明白怎么控制面的颜色了,举个例子,比如一个立方体,我们需要把他第一个面设置为一个颜色,其他的面都设置为同一个颜色:

            var geometry = new THREE.BoxGeometry( 1000, 1000, 1000);
            let mats=[];

            for(var i = 0;i<geometry.faces.length;i++){
                let material = new THREE.MeshBasicMaterial({ color: new THREE.Color(Math.random() * 0xffffff)});
                mats.push(material);
            }

            let mesh=new THREE.Mesh(geometry,mats);
            
            for(let j=0;j< geometry.faces.length;j++){
                if(j>1){
                    geometry.faces[j].materialIndex=1;
                }
            }
            
            scene.add(mesh);
            objects.push(mesh);

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值