导入的网格无法通过确定性选择

时间:2017-04-13 13:21:10

标签: javascript 3d webgl babylonjs

我已经通过

创建了圆柱网格网格
var tile = BABYLON.MeshBuilder.CreateCylinder("tile-" + i, { tessellation: 6, height: 0.1 }, scene);

然后我有以下事件回调

window.addEventListener("click", function (evt) {
    // try to pick an object
    var pickResult = scene.pick(evt.clientX, evt.clientY);
    if (pickResult.pickedMesh != null){
         alert(pickResult.pickedMesh.name)
});

然后mouse-click tiles message box.babylon var house; BABYLON.SceneLoader.ImportMesh("", "../Content/" , "house.babylon" , scene , function (newMeshes) { house = newMeshes[0]; }); ,并使用正确的图块名称。

当我通过

添加一些新网格(grid文件内的3D模型)时
cylinder

为了更好的想象,它的纹理由四个不同的网格创建,这些网格放置在mouse-clickpickResult.pickedMesh个瓷砖上。

它显示正常,但是当null过于常常表现得完全忽略时会出现这样的网格,因此pickResult.pickedMesh.name5%或{{1在点I点击时,指向我的导入网格的底层。

大约mouse-clicks的网格区域与house.parent正确对应(让我们说在屋顶中间,墙壁中间)。

我尝试过设置一些虚拟(隐藏)mesh scene.pick(evt.clientX, evt.clientY);,而不是通过导入网格来创建,但似乎是死胡同。

您是否了解如何强制var video = document.getElementById('video-player'); video.setAttribute('src',"https://myvideo.mp4"); video.addEventListener('ended',function(){ ..... }); 尊重网格层次结构并考虑覆盖纹理的所有可见部分?

为了完整起见,我正在处理这个3D模型的中间部分(从那里删除左右房子)。

编辑:演示BabylonJS playground

1 个答案:

答案 0 :(得分:2)

你可以尝试改变

var pickResult = scene.pick(evt.clientX, evt.clientY);

var pickResult = scene.pick(scene.pointerX, scene.pointerY);

因为evt对应整页。