无法确定性地拾取导入的网格
Imported meshes can't be picked deterministically
我得到了由
简单创建的圆柱体网格
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
文件中的 3D 模型)时
var house;
BABYLON.SceneLoader.ImportMesh("", "../Content/"
, "house.babylon"
, scene
, function (newMeshes)
{ house = newMeshes[0]; });
为了更好地想象,它是由四个不同的网格创建的房屋纹理,这些网格放置在 grid
的 cylinder
块瓷砖上。
它显示正常,但是当 mouse-click
时,它经常表现得完全忽略有这样一个网格,所以 pickResult.pickedMesh
要么是 null
要么是 pickResult.pickedMesh.name
指向我单击的导入网格下方的图块。
大约 5%
的网格区域恰好对应于 mouse-clicks
(假设在屋顶中间,在墙壁中间)。
我试过设置一些虚拟的(隐藏的)house.parent
mesh
,因为它不会通过导入网格创建,但似乎是死胡同。
您是否知道如何强制执行 scene.pick(evt.clientX, evt.clientY);
尊重网格层次结构并考虑叠加纹理的所有可见部分?
为了完整起见,我正在处理此 3D 模型的中间部分(从中删除了左右房屋)。
上的演示
你可以尝试改变
var pickResult = scene.pick(evt.clientX, evt.clientY);
至
var pickResult = scene.pick(scene.pointerX, scene.pointerY);
因为evt
对应整个页面。
我得到了由
简单创建的圆柱体网格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
文件中的 3D 模型)时
var house;
BABYLON.SceneLoader.ImportMesh("", "../Content/"
, "house.babylon"
, scene
, function (newMeshes)
{ house = newMeshes[0]; });
为了更好地想象,它是由四个不同的网格创建的房屋纹理,这些网格放置在 grid
的 cylinder
块瓷砖上。
它显示正常,但是当 mouse-click
时,它经常表现得完全忽略有这样一个网格,所以 pickResult.pickedMesh
要么是 null
要么是 pickResult.pickedMesh.name
指向我单击的导入网格下方的图块。
大约 5%
的网格区域恰好对应于 mouse-clicks
(假设在屋顶中间,在墙壁中间)。
我试过设置一些虚拟的(隐藏的)house.parent
mesh
,因为它不会通过导入网格创建,但似乎是死胡同。
您是否知道如何强制执行 scene.pick(evt.clientX, evt.clientY);
尊重网格层次结构并考虑叠加纹理的所有可见部分?
为了完整起见,我正在处理此 3D 模型的中间部分(从中删除了左右房屋)。
上的演示你可以尝试改变
var pickResult = scene.pick(evt.clientX, evt.clientY);
至
var pickResult = scene.pick(scene.pointerX, scene.pointerY);
因为evt
对应整个页面。