three.js对象的颜色,而不是纹理

时间:2016-05-30 05:00:37

标签: colors three.js textures material

所以首先要解释这个奇怪的标题,我正在尝试为我正在进行的一个小项目制作3D头像,但是当我尝试改变头像上的手臂颜色时,它实际上并没有改变颜色与纹理,它改变纹理的白色部分(不透明)的颜色,但它在纹理上透明,它显示白色,似乎没有光。

着色前:

enter image description here

着色后:

enter image description here

我正在使用的实际纹理可以在这里找到:http://imgur.com/SlnOxEw

这就是我渲染纹理的方式:

var AvatarTexture = new THREE.MeshPhongMaterial( { map: THREE.ImageUtils.loadTexture('./images/Shirt/vest.png'), shininess: 80, shading: THREE.SmoothShading, alphaMap: 0x000000} );

和着色:

object.children[0].material.color.setHex(0xffcc66);
object.children[2].material.color.setHex(0xffcc66);
object.children[4].material.color.setHex(0xffcc66);

对象本身是从blender导出的UV映射.obj。即使纹理没有透明度,也会发生这种情况。

2 个答案:

答案 0 :(得分:1)

首先,在three.js中,最终颜色是material.color的乘积。

因此,如果您更改material.map,最终的纹理颜色将会着色。

其次,如果两个网格共享相同的材质,并且您更改了材质颜色,则两个网格都将改变颜色。

为了防止这种情况,您需要为每个网格物体设置一个单独的材质实例。

material.color

three.js r.77

答案 1 :(得分:0)

如果你想改变零件的颜色,它不是一个对象,而是一个材料 var reference

    //your solution as i understand question

var material1 = new THREE.MeshPhongMaterial( .. );

    var mesh1.material = material1;
    var mesh2.material = material1;

material1.color= red; // both meshes change color.


//solution:

var mesh1.material = new THREE.MeshPhongMaterial( .. );
var mesh2.material = new THREE.MeshPhongMaterial( .. );

//or

var material1 = new THREE.MeshPhongMaterial( .. );
var material2 = new THREE.MeshPhongMaterial( .. );

var mesh1.material = material1;
var mesh2.material = material2;