【问题标题】:Ray intersect with the model射线与模型相交
【发布时间】:2017-09-15 16:18:40
【问题描述】:

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

同理,是否可以通过这种方式计算到交点的距离?

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

【问题讨论】:

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


    【解决方案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 射线投射器 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?
    • 看看here - posClientCoords 是画布鼠标位置,hitTest 会给你 dbId 和 fragId。
    【解决方案2】:

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

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

    GitHub 上的来源:

    https://github.com/jeremytammik/forgefader

    【讨论】:

    猜你喜欢
    • 2011-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-21
    • 2013-09-21
    • 1970-01-01
    相关资源
    最近更新 更多