Three.js - 从导入的网格改变面部的颜色?

时间:2012-10-29 23:35:07

标签: canvas 3d webgl three.js

在three.js中,我似乎无法找到如何定位/更改从Blender导入的网格的颜色。任何帮助将不胜感激。

此外,知道如何将所述面部(或任何网格中的面部)变为“重叠”或首先出现在所有其他面上也是很好的。

        loader = new THREE.JSONLoader();
        var callbackDice   = function( geometry ) { createMesh(geometry); };
        loader.load( "js/untitled.js", callbackDice );

function createMesh(geometry){
        material = new THREE.MeshNormalMaterial();
        mesh = new THREE.Mesh( geometry, material);
        mesh.scale.set( 75, 75, 75 );
        mesh.position.x = -1;
        scene.add( mesh);
    }

这就是我将所需的网格物体插入场景的方法。我想定位一个特定的面并改变它的颜色,但我不知道该怎么做,因为它不是THREE对象的一个​​实例。

1 个答案:

答案 0 :(得分:1)

THREE.Mesh实际上也是THREE.Object3D。但是,我不认为这会直接帮助你。

我非常Updates wiki page

  

您可以自由更改用于几何块的材质,您无法更改对象如何划分为块(根据面材)。

     

如果您需要在运行时使用不同的材料配置,如果材料/块的数量很少,您可以事先预先划分对象(例如头发/脸部/身体/上衣/裤子,用于人,前/侧/顶部/玻璃/轮胎/汽车内饰。)

     

如果数字很大(例如每张脸可能有所不同),请考虑不同的解决方案,使用属性/纹理来驱动不同的每个脸部外观。

从中推断,要么为每个可选面使用自己的材质(这样你可以在拾取时更改它),或者编写一个自定义解决方案,可以动态着色纹理的相关部分或使用自定义属性缓冲区来传达彩色面。

我能想到的另一个选择是烘焙顶点颜色的颜色并使用它们。虽然您可能会进行颜色插值,但仍需要确保将修改后的缓冲区上传到GPU。

就“一面朝前”而言,我不太明白你想要什么。您是否希望从网格“爆炸”面部,将其旋转以面向相机或确保面部处于正确的深度顺序?