关于[Threejs] intersectLine 方法这里看不太懂,求大佬解释下.

查看 27|回复 0
作者:rabbbit   
源码如下,作用是求平面和线段的交点.地址在这:
https://github.com/mrdoob/three.js/blob/6e897f9a42d615403dfa812b45663149f2d2db3e/src/math/Plane.js
这步 - ( line.start.dot( this.normal ) + this.constant ) / denominator 没看懂
为啥是 -(线段起点向量 ⋅ 平面法线 + 平面到原点距离) / (平面法线 ⋅ 线段方向向量) ?
        intersectLine( line, target ) {
                const direction = line.delta( _vector1 );
                const denominator = this.normal.dot( direction );
                if ( denominator === 0 ) {
                        // line is coplanar, return origin
                        if ( this.distanceToPoint( line.start ) === 0 ) {
                                return target.copy( line.start );
                        }
                        // Unsure if this is the correct method to handle this case.
                        return null;
                }
                const t = - ( line.start.dot( this.normal ) + this.constant ) / denominator;
                if ( t  1 ) {
                        return null;
                }
                return target.copy( direction ).multiplyScalar( t ).add( line.start );
        }
您需要登录后才可以回帖 登录 | 立即注册

返回顶部