Ray无法准确确定交点

问题描述 投票:0回答:1

我想找到相交曲线和直线的点。创建了raycast,但效果不佳。射线的点远离实际的交点。

Webgl 1,threejs 0.109

        var sartPoint = new THREE.Vector3( -30, -50, 0 );
        var endPoint = new THREE.Vector3( 50, 80, 0 );
        var geometry = new THREE.Geometry();
        geometry.vertices.push(sartPoint);
        geometry.vertices.push(endPoint);
        var materialTmp = new THREE.LineBasicMaterial( { color: 0xffffff, linewidth: 5 } );
        var itemTmp = new THREE.Line( geometry, materialTmp );
        _this.add( itemTmp, 'lines' );
        scene.updateMatrixWorld()
       var curve = new THREE.EllipseCurve(
          0,  0,            // ax, aY
          10, 10,           // xRadius, yRadius
          0,  2 * Math.PI,  // aStartAngle, aEndAngle
          false,            // aClockwise
          0                 // aRotation
        );

        var points = curve.getPoints( 10 );
        var geometry = new THREE.BufferGeometry().setFromPoints( points );
        var material = new THREE.LineBasicMaterial( { color : 0xff00ff } );
        var ellipse = new THREE.Line( geometry, material );
        scene.add( ellipse );
        var raycaster = new THREE.Raycaster(sartPoint, endPoint.clone().normalize());

        var intersects = raycaster.intersectObject( ellipse );
        console.log(intersects);
        if(intersects.length > 0){
          // FIRST dot of intersect
          var dotGeometry2 = new THREE.Geometry();
          dotGeometry2.vertices.push(intersects[0].point);
          var dotMaterial2 = new THREE.PointsMaterial( { size: 5, color: 0x00ff00 } );
          var dot2 = new THREE.Points( dotGeometry2, dotMaterial2 );
          _this.add( dot2, 'points' );
        }

enter image description here

three.js raycasting
1个回答
1
投票

Raycaster构造函数的第二个参数是方向向量。代替:

endPoint.clone().normalize()

我认为您想要:

endPoint.clone().sub(startPoint).normalize()

© www.soinside.com 2019 - 2024. All rights reserved.