在三个js中使用纹理网格和线框网格

时间:2012-09-11 21:33:19

标签: javascript opengl-es webgl three.js

我正在尝试在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 );

2 个答案:

答案 0 :(得分:15)

在SceneUtils下有一个createMultiMaterialObject(geometry, materials)。它实际上创建了多个网格,所有网格都在一个组中共享相同的几何体。

示例:

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

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

]);

THREE.SceneUtils source code

答案 1 :(得分:0)

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