3

我正在尝试在threeJS中绘制线框网格和纹理网格,但是当我将两者都添加到我的场景中时,纹理网格不会显示。下面的代码:

我无法创建两个共享相同几何形状的网格,其中一种材料是线框,另一种是纹理。如果其中一种材料是线框,而另一种只是颜色填充,它可以正常工作-但是一旦我将第二种材料设为纹理,它就会停止工作。

如果我注释掉,scene.add( wireMesh );那么纹理网格就会出现。

var wireMat =  new THREE.MeshBasicMaterial( { color:0x00FFFF, wireframe: true,                 transparent: true, overdraw:true } );
var wireMesh = new THREE.Mesh(geometry, wireMat);
scene.add( wireMesh );

var texture = texture = THREE.ImageUtils.loadTexture( 'textures/world.jpg' );

var imageMat = new THREE.MeshBasicMaterial( {color:0xffffff, map: texture } );

var fillMesh = new THREE.Mesh(geometry, imageMat);
scene.add( fillMesh );
4

2 回答 2

16

Under SceneUtils there is a createMultiMaterialObject(geometry, materials). It essentially creates multiple meshes that all share the same geometry all in a group.

Example:

var mesh = THREE.SceneUtils.createMultiMaterialObject( geometry, [

    new THREE.MeshLambertMaterial( { color: 0xffffff} ),
    new THREE.MeshBasicMaterial( { color: 0x222222, wireframe: true} )

]);

THREE.SceneUtils source code

于 2013-11-06T04:36:37.090 回答
0

不幸的是,无法在使用线框的对象和不使用线框的对象之间共享几何图形。您需要克隆该几何体。这提醒我,我们还没有完成.clone()Geometry

于 2012-09-11T22:52:13.510 回答