ThreeJS去除纹理

时间:2016-05-17 15:51:04

标签: three.js

我有一个ThreeJS场景,我想提供在不同模式下观看所有模型的选项(有或没有纹理和/或线框)。

我试图只使用一个几何图形和每个对象使用一个材质来完成此任务。

当我尝试通过将其材质的map属性设置为null来删除对象的纹理时,会发生奇怪的事情。该对象采用最新加载的纹理,即使它已加载并应用于另一个对象。这是某种预期的行为吗?如果没有,我该如何删除地图?

1 个答案:

答案 0 :(得分:0)

一个好的方法是从头开始初始化你需要的材料:

var materials = {};

materials['lambert'] = new THREE.MeshLambertMaterial( { color: 0xdddddd, shading: THREE.SmoothShading }  ); 
materials['phong'] = new THREE.MeshPhongMaterial( { color: 0xFF0000, specular: 0x009900, shininess: 30, shading: THREE.FlatShading }   ); 
materials['basic'] = new THREE.MeshBasicMaterial( { color: 0xffaa00, transparent: true, blending: THREE.AdditiveBlending }  ); 
materials['wireframe'] = new THREE.MeshBasicMaterial( { color: 0xffffff, wireframe : true  }  );

并在需要时替换对象的材质:

function changeMaterial(id){
    mesh.material = materials[id];
} 

changeMaterial('wireframe');

我做了一个小提琴演示:http://jsfiddle.net/95t964o0/75/

我没有使用带纹理的材质,因为jsfiddle.com加载图片有点棘手。

注意:当许多物体共享相同的材料时要小心!如果您对对象的材质进行更改,则会影响所有其他对象(显然是因为它是共享的)。