所以首先要解释这个奇怪的标题,我正在尝试为我正在进行的一个小项目制作3D头像,但是当我尝试改变头像上的手臂颜色时,它实际上并没有改变颜色与纹理,它改变纹理的白色部分(不透明)的颜色,但它在纹理上透明,它显示白色,似乎没有光。
着色前:
着色后:
我正在使用的实际纹理可以在这里找到: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。即使纹理没有透明度,也会发生这种情况。
答案 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;