2

2 つの SCNNode が隣り合っています (1 つの大きなボックスと 1 つの小さなボックス)。

親を回転させて、小さなボックスがカメラに表示されなくなることがありますが、大きなボックスの後ろにあるために小さなボックスが表示されなくなったことを知ることはできますか?

私の現在の構造

Scene - RootNode 
           - SCNNode (camera)
           - SCNNode (parent)
                - SCNNode (Big box)
                - SCNNode (Small box)
4

1 に答える 1

2

あなたが探しているのはオクルージョン テストと呼ばれ、SceneKit が提供する API ではありません。一般的なケースでは、これは大きな毛むくじゃらの問題です。

ただし、ボックスで作業しているだけなので、それを偽造するかなりまともな方法があります。小ボックスが大ボックスの後ろに隠れている場合、カメラ位置から小ボックスの 8 つの各コーナーへの線は、大ボックスと交差します。

そう:

  1. 両方を含むノード (ルート ノード) の座標系で、カメラとそれらの各コーナーの位置を取得します。ボックスのコーナーについては、ボックス ノードの位置を取得して計算を実行するか、SCNBoundingVolumeプロトコルを使用することができます。SCNNode同じ空間内のすべてのポイントを取得するには、いくつかの座標変換方法を使用する必要がある場合があります。

  2. コーナーごとに、hitTestWithSegmentFromPoint:toPoint:options:メソッドを使用して光線テストを実行します。

  3. これら 8 つのヒット テストのすべてが大きなボックスを返す場合、小さなボックスは大きなボックスの背後に完全に隠されています。

于 2015-04-22T20:14:18.750 に答える