2017-04-19 26 views
0

是否可以投射來自相機的光線並知道它是否與模型相交?Ray與模型相交

在同樣的筆記中,是否可以通過這種方式計算到交點的距離?

我想要這個,所以我將能夠以編程方式知道牆壁是否有窗戶或是否平坦,如果它有窗戶,那麼交叉路口的距離將會跳躍。

回答

1

是否有可能從攝像機投射的光線,並且知道如果它與模型相交? 有幾個選項可以使用:

如果你想交什麼,你可以使用瀏覽器內置API let posClientCoords = new THREE.Vector3(x, y, 1.0) let result =this.viewer.utilities.viewerImpl.hitTestViewport(posClientCoords , false); if (result !== null && result.fragId >= 0) { // here you go }

如果你喜歡光線投射選擇的對象,你可以使用three.js所raycaster let vray =new THREE.Vector3(ptarget.x - psource.x, ptarget.y - psource.y, ptarget.z - psource.z) vray.normalize() let ray =new THREE.Raycaster(psource, vray, 0, max_dist) let intersectResults = ray.intersectObjects (wallMeshes, true)

wallMeshes是代理圖形數組,你從觀衆得到 viewer.impl.getRenderProxy(viewer.model, fragId), null, null, null)

在同一張紙上,是否可以通過這種方式計算到交點的距離? 每個API的返回

一個例子公佈here

+0

什麼是「posClientCoords」?射線的方向? – shinzou

+0

另外,如何在不點擊節點的情況下獲得'viewer.impl.getRenderProxy'的相關fragid? – shinzou

+0

看看[這裏](https://github.com/Autodesk-Forge/forge-rcdb.nodejs/blob/master/src/client/viewer.components/Viewer.Extensions/Viewing.Extension.Fader/Viewing。 Extension.Fader.Core.js#L201) - posClientCoords是畫布鼠標位置,hitTest會爲您提供dbId和fragId。 – cyrille

1

它絕對是。下面是一個例子,ForgeFader,正是證明你問什麼:

http://thebuildingcoder.typepad.com/blog/2017/04/work-half-aks-opener-rvtfader-and-forgefader.html#9

來源GitHub上:

https://github.com/jeremytammik/forgefader

+0

是此保持在存儲器中的模型的所有網格(光線與物體之間的交叉點)的目標點? https://github.com/Autodesk-Forge/forge-rcdb.nodejs/blob/master/src/client/viewer.components/Viewer.Extensions/Viewing.Extension.Fader/Viewing.Extension.Fader.Core.js# L309有沒有辦法在沒有這樣的情況下獲得距離? – shinzou