【发布时间】:2017-09-15 16:18:40
【问题描述】:
是否可以从相机投射光线并知道它是否与模型相交?
同理,是否可以通过这种方式计算到交点的距离?
我想要这个,这样我就能够以编程方式知道一堵墙是有窗户还是平的,如果它有窗户,那么交叉点的距离就会跳跃。
【问题讨论】:
标签: three.js autodesk autodesk-forge autodesk-viewer
是否可以从相机投射光线并知道它是否与模型相交?
同理,是否可以通过这种方式计算到交点的距离?
我想要这个,这样我就能够以编程方式知道一堵墙是有窗户还是平的,如果它有窗户,那么交叉点的距离就会跳跃。
【问题讨论】:
标签: three.js autodesk autodesk-forge autodesk-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 射线投射器
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
【讨论】:
posClientCoords 是什么?射线的方向?
viewer.impl.getRenderProxy 的相关fragid?
绝对是。这是一个示例,ForgeFader,准确地展示了您的要求:
http://thebuildingcoder.typepad.com/blog/2017/04/work-half-aks-opener-rvtfader-and-forgefader.html#9
GitHub 上的来源:
【讨论】: