首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ThreeJS去除纹理

ThreeJS去除纹理
EN

Stack Overflow用户
提问于 2016-05-17 15:51:04
回答 1查看 3.6K关注 0票数 2

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

我试着用一个几何学和每一个物体的一种材料来完成这个任务。

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

EN

回答 1

Stack Overflow用户

发布于 2016-05-20 18:16:19

一个很好的方法是从一开始就初始化您需要的材料:

代码语言:javascript
复制
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  }  );

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

代码语言:javascript
复制
function changeMaterial(id){
    mesh.material = materials[id];
} 

changeMaterial('wireframe');

我做了一把小提琴,证明了这一点:http://jsfiddle.net/95t964o0/75/

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

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

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

https://stackoverflow.com/questions/37280995

复制
相关文章

相似问题

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