LCCObject::setClipPrism
多角柱のクリップ領域を設定します。
同一平面上にある多角形の頂点群を、面の法線方向に沿って offsetMin / offsetMax の範囲で押し出して角柱を定義し、その範囲でシーンをクリップします。凸多角形と凹多角形の両方に対応しています。自己交差する多角形はサポートしていません。
undefined を渡すか、パラメータを省略するとクリップを解除します。
バージョン要件
SDK v0.6.4+
エンジンサポート
Three.js
API
LCCObject::setClipPrism(param?: LccClipPrismParams): void
パラメータ
LccClipPrismParams
| パラメータ | 型 | 必須 | デフォルト値 | 説明 |
|---|---|---|---|---|
vertices | IPoint3[] | はい | - | 基準面となる多角形の頂点(ワールド座標、同一平面上、頂点の並び順は任意)。最小 3 個、最大 200 個。 |
offsetMax | number | はい | - | 面の法線方向に沿った上限オフセット(負の値も可。offsetMin より大きい必要があります)。 |
offsetMin | number | はい | - | 面の法線方向に沿った下限オフセット(負の値も可。offsetMax より小さい必要があります)。 |
normal | IPoint3 | はい | - | 法線方向。 |
clipSide | number | いいえ | 1 | クリップモード。1:内側を保持(外側をクリップ)、-1:外側を保持(内側をクリップ)。 |
IPoint3
interface IPoint3 {
x: number;
y: number;
z: number;
}
戻り値
void
使用例
// 直方体のクリップ領域を設定(同一平面上の 4 頂点)
lccObject.setClipPrism({
vertices: [
{ x: 0, y: 0, z: 0 },
{ x: 10, y: 0, z: 0 },
{ x: 10, y: 10, z: 0 },
{ x: 0, y: 10, z: 0 }
],
offsetMin: -5,
offsetMax: 5,
normal: { x: 0, y: 0, z: 1 },
clipSide: 1
});
// 反転クリップ:角柱の外側を保持
lccObject.setClipPrism({
vertices: [
{ x: 0, y: 0, z: 0 },
{ x: 10, y: 0, z: 0 },
{ x: 10, y: 10, z: 0 },
{ x: 0, y: 10, z: 0 }
],
offsetMin: -5,
offsetMax: 5,
normal: { x: 0, y: 0, z: 1 },
clipSide: -1
});
// クリップを解除
lccObject.setClipPrism();
注意事項
- 頂点は同一平面上にある必要があります(許容誤差:ワールド座標で 0.01 単位)。同一平面上にない場合、呼び出しは失敗し、エラーログが出力されます。
- 頂点数は 3〜200 の範囲である必要があります。範囲外の場合、呼び出しは失敗します。
offsetMaxはoffsetMinより厳密に大きい必要があります。そうでない場合、呼び出しは失敗します。offsetMin/offsetMax/clipSideの調整は軽量な処理のため、高頻度で呼び出しても問題ありません。- 多角形の頂点を変更すると内部でテクスチャの更新が発生するため、頂点を頻繁に更新することは推奨しません。
- 自己交差する多角形はサポートしていません。使用した場合、クリップ結果は予測できません。
関連 API
LCCObject::setClipBox()— 軸平行バウンディングボックスによるクリップLCCObject::setClipPlane()— 平面によるクリップ