2012-09-11 34 views
3

我試圖在threeJS中繪製線框網格和紋理網格,但是當我將兩者都添加到我的場景時,紋理網格不顯示。代碼如下:在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); 

回答

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

0

不幸的是,不可能在使用線框的對象與不使用線框的對象之間共享幾何圖形。您需要克隆該幾何圖形。這提醒我,我們還沒有爲Geometry完成.clone()

+0

謝謝!我只會將生成幾何的代碼加倍。 只是出於好奇,因爲我正在做所有這些作爲學習經驗 - 是three.js的限制嗎?或webgl的限制? –

+0

我都猜到了。線框以與實體不同的方式呈現。 – mrdoob