Ray与模型相交

时间:2017-04-19 12:23:26

标签: three.js autodesk autodesk-forge autodesk-viewer

是否可以从相机投射光线并知道它是否与模型相交?

在同一个音符上,是否可以通过这种方式计算到交叉点的距离?

我想要这样,所以我能够以编程方式知道墙壁是否有窗户还是平坦的,如果它有一个窗口,那么交叉点的距离会有一个跳跃。

2 个答案:

答案 0 :(得分:1)

绝对是。这是ForgeFader的一个例子,它准确地展示了你的要求:

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

GitHub上的来源:

https://github.com/jeremytammik/forgefader

答案 1 :(得分:1)

  

是否可以从相机投射光线并知道它是否与模型相交?   您可以使用以下几种方法:

如果你想要交叉任何东西,你可以使用viewer内置的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