是否可以投射来自相机的光线并知道它是否与模型相交?Ray与模型相交
在同样的笔记中,是否可以通过这种方式计算到交点的距离?
我想要这个,所以我将能够以编程方式知道墙壁是否有窗户或是否平坦,如果它有窗户,那么交叉路口的距离将会跳跃。
是否可以投射来自相机的光线并知道它是否与模型相交?Ray与模型相交
在同样的笔记中,是否可以通过这种方式计算到交点的距离?
我想要这个,所以我将能够以编程方式知道墙壁是否有窗户或是否平坦,如果它有窗户,那么交叉路口的距离将会跳跃。
是否有可能从摄像机投射的光线,并且知道如果它与模型相交? 有几个选项可以使用:
如果你想交什么,你可以使用浏览器内置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
它绝对是。下面是一个例子,ForgeFader,正是证明你问什么:
http://thebuildingcoder.typepad.com/blog/2017/04/work-half-aks-opener-rvtfader-and-forgefader.html#9
来源GitHub上:
是此保持在存储器中的模型的所有网格(光线与物体之间的交叉点)的目标点? 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
什么是“posClientCoords”?射线的方向? – shinzou
另外,如何在不点击节点的情况下获得'viewer.impl.getRenderProxy'的相关fragid? – shinzou
看看[这里](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