交差しているかの判断にはRayノードを使用することができます。
このノードには2つの入力が必要です。
そして、Rayを放出する方からコリジョンオブジェクトへどの方向にRayを飛ばすのか指定します。
例えば、カーブがこのようになっている場合(すべてのポイントの高さが同じ)、交差するポイントを取得することが難しくなります。
これを回避して交差点をゲットしてみましょう!
まず、こうなっているカーブを
Rayがヒットできるように各ポイントで一旦高さを変える必要があります。
もし、Resampeノードを使用している場合、Curve U Attributeを有効にします。
Resampleが直前にない場合、Attribute Createを使用して作成することも可能です。
Attribute Createノードを作成し、下記のようにします。
Valueには、下記のエクスプレッションを入力してください。
fit($PT, 0, $NPT-1, 0, 1)
すると、ポイントにcurveuアトリビュートが追加され
カーブ全体を0から1までとしたとき、各ポイントの距離を取得することができます。
カーブ全体に対するポイントの割合が取得で来たら、これをPositionのY値に設定します。
Attribute Wrangleを追加し、下記のように入力します。
v@origpos = @P;
@P.y = f@curveu ;
後で元に戻すために現在の位置をまず保存します。
その後、P.yアトリビュートにcurveuの値を代入します。
すると、下記のように各ポイントに異なる高さが設定されます。
これをそのままRayに接続し
Rayの設定を下記のように変更します。
今回は交差ポイント情報だけを修正したいので、Transform Pointsは必要ありません。
Create Point Groupをオンにすると、レイがヒットしたポイントはグループに登録されます。
しかし現状すべてのポイントがグループ化されます。
そこで、CollosionをSweepでジオメトリにします。
Surface ShapeはRibbonにしていきます。
このような感じでジオメトリが作成されました。
Rayをみると先ほどとあまり変わっていないのですが。。。
RayノードのBiasに0.01を入力します。
BiasでRayの開始位置を少しずらすことで。。
このように交差ポイントを取得できるようになりました。
後は、Attribute Wrangleを追加しポイントをアトリビュートとして保存した元の位置に戻します。
v@P = v@origpos;
これでカーブの交差ポイントを取得することができました。