是否可以从相机投射光线并知道它是否与模型相交?
在同一个音符上,是否可以通过这种方式计算到交叉点的距离?
我想要这样,所以我能够以编程方式知道墙壁是否有窗户还是平坦的,如果它有一个窗口,那么交叉点的距离会有一个跳跃。
答案 0 :(得分:1)
绝对是。这是ForgeFader的一个例子,它准确地展示了你的要求:
http://thebuildingcoder.typepad.com/blog/2017/04/work-half-aks-opener-rvtfader-and-forgefader.html#9
GitHub上的来源:
答案 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