【问题标题】:Three.js Raycaster not intersecting my custom meshThree.js Raycaster 不与我的自定义网格相交
【发布时间】:2016-11-22 20:58:26
【问题描述】:

我是 Three.js 的新手。 Raycaster 可以查找导入的对象,但是当我按如下方式创建自定义网格时它不起作用:

        var geom = new THREE.Geometry(); 
        var v1 = new THREE.Vector3(0,0,0);
        var v2 = new THREE.Vector3(0,500,0);
        var v3 = new THREE.Vector3(-400,-500,50);

        geom.vertices.push(v1);
        geom.vertices.push(v2);
        geom.vertices.push(v3);

        geom.faces.push( new THREE.Face3( 0, 1, 2 ) );
        geom.computeFaceNormals();

        meshFrame = new THREE.Mesh( geom, new THREE.MeshNormalMaterial() );

        meshFrame.position.z = 20;
        meshFrame.rotation.y = 0;
        meshFrame.verticesNeedUpdate = true;
        scene.add(meshFrame);   

您认为问题可能是什么?光线在三角形中经过,但 intersectObjects 仍然返回空。在这里,我的光线投射代码:

        var ever = bver.clone();

        ever.setComponent(2,ever.z+150);

        var geometryF = new THREE.Geometry();
        geometryF.vertices.push(
            bver,
            ever
        );

        var bray = new THREE.Ray(bver, new THREE.Vector3(0 ,0, 0));
        bray.lookAt(ever);

        var raycaster = new THREE.Raycaster();
        raycaster.set( bray.origin, bray.direction);            

        var intersects = raycaster.intersectObjects( [meshFrame] );

        var x = [scene.getObjectByName( "meshFrame" )];
        print(meshFrame.geometry.vertices);

        console.log(intersects);

        var lineF = new THREE.Line( geometryF, materialF );
        scene.add( lineF ); 

非常感谢您的帮助。

【问题讨论】:

  • 附带说明,您应该更新网格的几何顶点,如下所示:meshFrame.geometry.verticesNeedUpdate = true,甚至geom.verticesNeedUpdate = true。最好在您完成推送新顶点/修改它们之后立即执行一次。
  • 您能提供任何 jsfiddle 示例吗?

标签: javascript three.js


【解决方案1】:

好的,我解决了这个问题。显然,面部方向是问题所在。当我反转它时,它开始起作用了。

【讨论】:

    猜你喜欢
    • 2013-04-14
    • 2016-08-03
    • 2020-10-12
    • 2021-09-29
    • 2015-12-25
    • 2019-06-17
    • 2023-03-29
    • 2020-07-28
    • 1970-01-01
    相关资源
    最近更新 更多