2014-03-04 61 views
0

我現在在一個業餘視頻遊戲的3D引擎上工作,我想給他添加噸的功能,以獲得最佳性能&的遊戲玩法。但是我有嚴重的問題要用lod網格來獲得「點擊事件」。可點擊的網格與THREE.lod

對於「LOD」的一部分,沒有任何問題,現在,他的集成,但我沒有發現任何解決方案以應用爲例他:

https://stackoverflow.com/a/12808987/3379444

難道我必須按「LOD」的對象,或每個網格單獨?

我的代碼的一部分:

var i, j, mesh, lod; 
for (j = 0; j <= 42; j++) { 

lod = new THREE.LOD(); 

    //Here, it's just var for place my mesh into a circle 
rayonSysteme = Math.floor(Math.random() * 10000) + 2500; 
angleSysteme = Math.random() * 360; 

for (i = 0; i < geometry.length; i ++) { 

    mesh = new THREE.Mesh(geometry[ i ][ 0 ], material); 
    mesh.scale.set(1.5, 1.5, 1.5); 
    mesh.updateMatrix(); 
    mesh.matrixAutoUpdate = false; 
      //Callback here ? 
    mesh.callback = function() { console.log(this.name); } 
    lod.addLevel(mesh, geometry[ i ][ 1 ]); 

} 

lod.position.x = rayonSysteme * Math.cos(angleSysteme); 
lod.position.y = Math.floor(Math.random() * 1000)-500; 
lod.position.z = rayonSysteme * Math.sin(angleSysteme); 
    //Or here ? 
lod.updateMatrix(); 
lod.matrixAutoUpdate = false; 

gravity = drawCircle("XZ", 64, 500, 360); 
gravity.position.x = lod.position.x; 
gravity.position.y = lod.position.y; 
gravity.position.z = lod.position.z; 


scene.add(lod); 
//objects.push(lod); 
scene.add(gravity); 
}; 
+0

你能告訴一個非常簡單的活生生的例子來說明問題? – WestLangley

+0

我的主要工作區在這裏:http://lesfougeresdelulu.com/Moteur3D/這是我儘可能讓我的引擎更乾淨的地方(但現在仍然是菜鳥的巫術)。 在這裏,我嘗試使用mrdoob建議:http://lesfougeresdelulu.com/Moteur3D/save2.html(球在左側和右側,我不更改génération代碼,所以它是隨機的) 我的目標是在主代碼上獲得此功能,但目前它仍在工作。 –

回答

0

Raycaster將測試應該基於到射線原點的距離中使用的網格。

這裏面Raycaster相關代碼:

} else if (object instanceof THREE.LOD) { 

    matrixPosition.setFromMatrixPosition(object.matrixWorld); 
    var distance = raycaster.ray.origin.distanceTo(matrixPosition); 

    intersectObject(object.getObjectForDistance(distance), raycaster, intersects); 

}