MeshProjIntersect - superclass: ReferenceTarget; super-superclass:MAXWrapper - 0:0 - classID: #(1266304708, 865233301)
このクラスは、投影マッピング ツールで、1 つのメッシュ ポイントの別のメッシュへの投影を見つけるために使用するインタフェースを公開します。
MeshProjIntersect インタフェース:
Interface: rayMeshProjIntersectOps
メソッド:
<void>SetNode <node>node
交差を実行するノードを設定します。複数のノードを、同じ交差インタフェースのインスタンスに追加できます。この交差に追加されたノードのうちどれが衝突したのかを調べるには、GetHitNode() メソッドを使用します。
<void>Build ()
高速交差の内部データ構造を構築します。このメソッドは、ノードを追加した後に呼び出す必要があります。
<void>Free ()
内部データ構造を削除し、メモリを解放します。
<boolean>ProjectionFace <integer>triIndex <point3 by value>triBary
面投影を実行します。
triIndex
引数は、0 を基数とする面インデックスです。
triBary
引数は、面内のポイントの重心座標を指定します。
成功した場合は true、有効な投影を実行できなかった場合は false を返します。
投影マッピングを実行するときには、低解像度の作業用モデルと高解像度のリファレンス モデルが使用されます。作業用モデルの周囲にはケージが定義されます。これは、リファレンス モデルを完全に囲んでいる必要があります。高解像度のリファレンス モデル上にあるすべてのポイントは、低解像度の作業用モデル上の点に対応します。1 つの作業用モデルで複数のリファレンス モデルを使用することもできます。
このメソッドを使用するには、以下の手順を実行します。
MeshProjIntersect
クラスのインスタンスを作成します。
低解像度の作業用モデルを渡す場合は SetNode()
を呼び出し、高速実行用データを生成する場合は Build()
を呼び出します。これには、投影モディファイヤが適用されている必要があります。
投影モディファイヤには、1 つ以上のリファレンス モデルが定義されている必要があります。
ProjectionFace()
メソッドを、面のインデックスと作業用モデルのサーフェス上の任意のポイントの重心座標を指定して呼び出します。
この結果、ProjectionFace()
メソッドにより、参照用モデルに衝突する内部値が設定されます。getHitNode()
メソッドは衝突した参照モデル、getHitFace()
はフェース インデックス、getHitPos()
は衝突の位置というように値を返します。詳細はこのページの説明を参照してください。
<boolean>ClosestFace <point3 by value>point dir:<point3 by value>caged:<boolean> doubleSided:<boolean>
dir default value: [0,0,0]
caged default value: false
doubleSided default value: false
スペース内で指定されたポイントの最近接面を返します。
オプションの dir:
キーワード パラメータを[0,0,0]以外に指定すると、指定した方向の最近接面が検出されます。
オプションの doubleSided:
キーワード パラメータを true に指定すると、正面と背面の両方が考慮されます。
最近接面が見つかった場合は true、見つからなかった場合は false を返します。
現在、ClosestFace()
メソッドを呼び出す前に、少なくとも 1 回、IntersectRay()
メソッドを呼び出す必要があります。最近接面の計算に必要な内部構造体には、交差を実行したときにのみ初期化されるものがあるためです。ただし、IntersectRay()
呼び出しの結果には信頼性がありません。このページの例を参照してください。
<value>GetHitDist hitIndex:<integer>
hitIndex default value: -1
衝突までの距離を返します。
オプションの hitIndex:
キーワード引数を指定しないか -1 に指定すると、最近接衝突が返されます。このキーワード引数を正の整数に指定すると、インデックス指定した衝突までの距離が返されます。
ClosestFace()
メソッドを呼び出した後、次のメソッドを呼び出すときに、hitIndex:
オプション パラメータは指定しないでください。 有効な最近接面は 1 つしかなく、-1 以外の値を渡そうとすると、不安定になったり**不正な結果が生じる**可能性があります。
<value>GetHitNode hitIndex:<integer>
hitIndex default value: -1
衝突したノードを返します。
オプションの hitIndex:
キーワード引数を指定しないか -1 に指定すると、最近接衝突のノードが返されます。このキーワード引数を正の整数に指定すると、インデックス指定した衝突のノードが返されます。
ClosestFace()
呼び出しの後のデータの取得について、上記の警告を参照してください。
<value>GetHitFace hitIndex:<integer>
hitIndex default value: -1
衝突した面のゼロを基数とするインデックスを返します。
オプションの hitIndex:
キーワード引数を指定しないか -1 に指定すると、衝突した最近接面が返されます。このキーワード引数を正の整数に指定すると、インデックス指定した衝突の面が返されます。
ClosestFace()
呼び出しの後のデータの取得について、上記の警告を参照してください。
面のインデックス付けは、ジオメトリ プリミティブと同じジオメトリの編集可能メッシュ バージョンの間で変わっている場合があります。たとえば、2 つの面だけを持つ平面は、プリミティブ ジオメトリを使用した場合、面 0 として衝突を返します。これに対し、同じオブジェクトの集約バージョンを使用した場合は、同じ衝突を 1 として返します。
これは当然のことですが、MAXScript から明白に分かることはほとんどありません。これは、実際のプリミティブの基盤のジオメトリに対するアクセスを提供するメソッドは他にないためです。
<value>GetHitBary hitIndex:<integer>
hitIndex default value: -1
衝突の重心座標を返します。
オプションの hitIndex
キーワード引数を指定しないか -1 に指定すると、最近接衝突の重心座標が返されます。このキーワード引数を正の整数に指定すると、インデックス指定した衝突の重心座標が返されます。
ClosestFace()
呼び出しの後のデータの取得について、上記の警告を参照してください。
<value>GetHitBackfacing hitIndex:<integer>
hitIndex default value: -1
背面衝突を返します。
オプションの hitIndex:
キーワード引数を指定しないか -1 に指定すると、衝突した最近接背面が返されます。このキーワード引数を正の整数に指定すると、インデックス指定した背面衝突の面が返されます。
ClosestFace()
呼び出しの後のデータの取得について、上記の警告を参照してください。
<value>GetHitPos hitIndex:<integer>
hitIndex default value: -1
衝突のワールド位置を返します。
オプションの hitIndex:
キーワード引数を指定しないか -1 に指定すると、最近接衝突の位置が返されます。このキーワード引数を正の整数に指定すると、インデックス指定した衝突の位置が返されます。
ClosestFace()
呼び出しの後のデータの取得について、上記の警告を参照してください。
<boolean>IntersectRay <point3 by value>point <point3 by value>dir doubleSided:<boolean>
doubleSided default value: false
dir パラメータで指定されたベクトルの方向において、point パラメータで定義されたワールド空間位置から、SetNode()
で設定されたノードを使用してレイの交差を実行します。
オプションの doubleSided:
キーワード パラメータを true に指定すると、面の正面と背面の両方で交差が実行されます。
レイが面に衝突した場合は true、交差がなかった場合は false を返します。
このメソッドは、現在、正しく機能しないものとみなされており、実際の交差の実行に使用すべきではありません。 特定の環境では、不正な結果を返すことがあります。