SceneObject (クラス)
public abstract SceneObject {inherits EventTarget}
パッケージ: CURL.GRAPHICS.SCENE
直接継承しているサブクラス: TextSceneObject, LightableSceneObject, SceneGroup, Camera, SceneLight

シーンのすべてのオブジェクトの抽象基本 クラス (3 次元保持モード)。Scene の例については、SceneIntersection および DirectionalLightを参照してください。


コンストラクタ
default:新規の SceneObject を作成します。SceneObject のインスタンスを作成することはできませんが、具象サブクラスでは、construct-super を使用してこのコンストラクタを呼び出すことができます。
コンストラクタ public {SceneObject.default
transformation:Transformation3d = {Transformation3d},
visible?:bool = true,
name:#String = null,
opaque-to-intersection?:bool = true,
...
}

プロパティ
bounding-box-caching-enabled?:境界ボックスのキャッシュが有効であるかどうかを指定するブール値。
フィールド public SceneObject.bounding-box-caching-enabled?:bool =false
bounding-box-or-object-visible?:オブジェクトまたはその境界ボックスが可視であるかどうかを指定するブール値。
アクセサ public final SceneObject.bounding-box-or-object-visible?:bool
cached-bounding-box-dirty?:キャッシュされた境界ボックスが未処理 (再計算する必要がある) であるかどうかを指定するブール値。
フィールド public SceneObject.cached-bounding-box-dirty?:bool =true
controller:この SceneObject の SceneObjectController。コントローラはアタッチされ次第、有効になります。既存のコントローラ (ある場合) は新しいコントローラをアタッチすると無効になります。
アクセサ public SceneObject.controller:#SceneObjectController
セッター public SceneObject.controller:#SceneObjectController
local-bounding-box-color:SceneObject のローカル座標フレームにある SceneObject の周囲に描画された軸平行境界ボックスの色。
フィールド public SceneObject.local-bounding-box-color:Color ={Palette.get-cyan}
local-bounding-box-line-width:SceneObject のローカル座標フレームにある SceneObject の周囲に描画された軸平行境界ボックスの線幅。
フィールド public SceneObject.local-bounding-box-line-width:Distance =1pt
local-bounding-box-visible?:SceneObject のローカル座標フレームにある SceneObject の周囲に描画された軸平行境界ボックスが可視であるかどうかを指定するブール値。
フィールド public SceneObject.local-bounding-box-visible?:bool =false
name:この SceneObject の名前。
アクセサ public SceneObject.name:#String
セッター public SceneObject.name:#String
opaque-to-intersection?:SceneObject により他のオブジェクトが交点イベントを受け取るのを終了させるかどうかを指定します。
アクセサ public SceneObject.opaque-to-intersection?:bool
セッター public SceneObject.opaque-to-intersection?:bool
parent:SceneObject の親。
アクセサ public SceneObject.parent:#SceneGroup
parent-bounding-box-color:SceneObjectparent のローカル座標フレームにある SceneObject の周囲に描画された軸平行境界ボックスの色。
フィールド public SceneObject.parent-bounding-box-color:Color ={Palette.get-yellow}
parent-bounding-box-line-width:SceneObjectparent のローカル座標フレームにある SceneObject の周囲に描画された軸平行境界ボックスの線幅。
フィールド public SceneObject.parent-bounding-box-line-width:Distance =1pt
parent-bounding-box-visible?:SceneObjectparent のローカル座標フレームにある SceneObject の周囲に描画された軸平行境界ボックスが可視であるかどうかを指定するブール値。
フィールド public SceneObject.parent-bounding-box-visible?:bool =false
scene:この SceneObject が属する Scene
アクセサ public SceneObject.scene:#Scene
セッター package sealed SceneObject.scene:#Scene
transformation:SceneObject の変換。

このプロパティは Scene 型のオブジェクトに影響を与えません。
アクセサ public SceneObject.transformation:Transformation3d
セッター public SceneObject.transformation:Transformation3d
visible?:SceneObject が可視であるかどうかを指定するブール値。
アクセサ public SceneObject.visible?:bool
セッター public SceneObject.visible?:bool
world-bounding-box-color:Scene のローカル座標フレームにある SceneObject の周囲に描画された軸平行境界ボックスの色。
フィールド public SceneObject.world-bounding-box-color:Color ={Palette.get-magenta}
world-bounding-box-line-width:Scene のローカル座標フレームにある SceneObject の周囲に描画された軸平行境界ボックスの線幅。
フィールド public SceneObject.world-bounding-box-line-width:Distance =1pt
world-bounding-box-visible?:Scene のローカル座標フレームにある SceneObject の周囲に描画された軸平行境界ボックスが可視であるかどうかを指定するブール値。
フィールド public SceneObject.world-bounding-box-visible?:bool =false
world-position:ワールド座標内の SceneObject の座標空間の始点。
アクセサ public sealed SceneObject.world-position:Distance3d
セッター public sealed SceneObject.world-position:Distance3d
world-transformation:SceneObject をワールドに実際に変換 (Scene)。
アクセサ public SceneObject.world-transformation:Transformation3d
プロパティ 継承 EventTarget: event-handlers

メソッド
get-cached-local-bounding-box:ローカル座標システムにある SceneObject のキャッシュされた軸平行の 3 次元境界。
public {SceneObject.get-cached-local-bounding-box
check-visibility?:bool = false
}:(min-xyz:Distance3d, max-xyz:Distance3d, valid-bounds?:bool)
get-local-bounding-box:SceneObject の軸平行である 3 次元のローカル境界。SceneObject のサブクラスにこのメソッドをオーバーライドする必要があります。
public abstract {SceneObject.get-local-bounding-box
check-visibility?:bool = false
}:(min-xyz:Distance3d, max-xyz:Distance3d, valid-bounds?:bool)
get-parent-bounding-box:親座標システムにある SceneObject の軸平行の 3 次元境界。
public {SceneObject.get-parent-bounding-box
check-visibility?:bool = false
}:(min-xyz:Distance3d, max-xyz:Distance3d, valid-bounds?:bool)
get-transformed-bounding-box:SceneObject の軸平行である 3 次元の変換された境界。
public {SceneObject.get-transformed-bounding-box
transformation:Transformation3d,
check-visibility?:bool = false
}:(min-xyz:Distance3d, max-xyz:Distance3d, valid-bounds?:bool)
get-world-bounding-box:ワールド (最上位レベル) 座標システムにある SceneObject の軸平行の 3 次元境界。
public {SceneObject.get-world-bounding-box
check-visibility?:bool = false
}:(min-xyz:Distance3d, max-xyz:Distance3d, valid-bounds?:bool)
intersect-box:ボックスが SceneObject と交差する方法を計算します。既定の実装では境界ボックスの交差を実行します。SceneObject のサブクラスにこのメソッドのオーバーライドが必要になる場合があります。
public {SceneObject.intersect-box
min-xyz:Distance3d,
max-xyz:Distance3d,
intersection-style:IntersectionStyle
}:#Intersection
intersect-line:無限大の線と SceneObject との交差を計算します。既定の実装では境界ボックスの交差を実行します。SceneObject のサブクラスにこのメソッドのオーバーライドが必要になる場合があります。
public {SceneObject.intersect-line}:#Intersection
intersect-line-segment:ライン セグメントと SceneObject との交差を計算します。既定の実装では境界ボックスの交差を実行します。SceneObject のサブクラスにこのメソッドのオーバーライドが必要になる場合があります。
public {SceneObject.intersect-line-segment}:#Intersection
intersect-ray:光線と SceneObject との交差を計算します。既定の実装では境界ボックスの交差を実行します。SceneObject のサブクラスにこのメソッドのオーバーライドが必要になる場合があります。
public {SceneObject.intersect-ray
origin:Distance3d,
direction:Direction3d
}:#Intersection
intersect-sphere:球が SceneObject と交差する方法を計算します。既定の実装では境界ボックスの交差を実行します。SceneObject のサブクラスにこのメソッドのオーバーライドが必要になる場合があります。
public {SceneObject.intersect-sphere
center:Distance3d,
radius:Distance,
intersection-style:IntersectionStyle
}:#Intersection
ndc-point-to-ray:SceneCamera を使用すると、2 次元の正規デバイス座標が 3 次元の光線に変換されます。
public sealed {SceneObject.ndc-point-to-ray
ndc-point:Double2d,
viewport-width:Distance,
viewport-height:Distance,
near-plane-point-origin?:bool = false
}:(origin:FloatDistance3d, direction:FloatDirection3d)
paint:Renderer3d を使用して self を描画します。
public {SceneObject.paint
renderer:Renderer3d,
viewport-width:Distance,
viewport-height:Distance
}:void
point-to-ndc-point:SceneCamera を使用すると、3 次元モデルの点が 3 次元正規デバイス座標に変換されます。
public sealed {SceneObject.point-to-ndc-point
point:Distance3d,
viewport-width:Distance,
viewport-height:Distance
}:Float3d
point-to-viewport-point:SceneCamera を使用すると、3 次元モデルの点が 2 次元ビューポートの点に変換されます。
public sealed {SceneObject.point-to-viewport-point
point:Distance3d,
viewport-width:Distance,
viewport-height:Distance
}:FloatDistance2d
pre-paint:このメソッドは描画される前に SceneObject の変換内容を修正するのに使用する必要があります。
public {SceneObject.pre-paint
renderer:Renderer3d,
viewport-width:Distance,
viewport-height:Distance
}:void
rotate:指定した軸の周囲で SceneObject を右方向にローカルに回転します。
public sealed {SceneObject.rotate
axis:Direction3d,
rotation:Angle
}:void
scale:SceneObject のスケールをローカルに実行します。
public sealed {SceneObject.scale
scale-x:double,
scale-y:double,
scale-z:double
}:void
set-orientation-and-position:ある方向のオブジェクト (その負の z ベクトル) をグローバルにポイントします。上ベクトル(その正の y ベクトル)も指定する必要があります。そのオブジェクトのグローバルな位置は指定することができます。これは Camera の方向をつけるのに使用することができます。
public {SceneObject.set-orientation-and-position
direction:Direction3d,
up-vector:Direction3d,
position:Distance3d = self.world-position
}:void
translate:SceneObject の平行移動をローカルに実行します。
public sealed {SceneObject.translate
translation-x:Distance,
translation-y:Distance,
translation-z:Distance
}:void
viewport-point-to-ray:SceneCamera を使用すると、2 次元ビューポートが 3 次元光線に変換されます。
public sealed {SceneObject.viewport-point-to-ray
viewport-point:Distance2d,
viewport-width:Distance,
viewport-height:Distance,
near-plane-point-origin?:bool = false
}:(origin:FloatDistance3d, direction:FloatDirection3d)
メソッド 継承 EventTarget: accepts-event-class?, add-event-handler, event-handler-present?, handle-event, remove-event-handler, verify-event
メソッド 継承 BasicEventTarget: enqueue-event
メソッド 継承 Object: object-describe, object-describe-for-debugging, object-serialize



コンストラクタ詳細
default (コンストラクタ)
public {SceneObject.default
transformation:Transformation3d = {Transformation3d},
visible?:bool = true,
name:#String = null,
opaque-to-intersection?:bool = true,
...
}

新規の SceneObject を作成します。SceneObject のインスタンスを作成することはできませんが、具象サブクラスでは、construct-super を使用してこのコンストラクタを呼び出すことができます。

transformation: SceneObject の初期の Transformation3d。既定値は実体の変換になります。
visible?: SceneObject が可視であるかどうかを指定するブール値。既定値は true になります。
name: SceneObject の名前を表す String。既定値は null になります。
opaque-to-intersection?: SceneObject により他のオブジェクトが交点イベントを受け取るのを終了させるかどうかを指定するbool。既定値は true です。(詳細については、SceneObject.opaque-to-intersection? を参照してください)。
...: 各残余引数は、新たに作成されたオブジェクトの EventTarget.add-event-handler メソッドに送信される EventHandler にする必要があります。

注意事項

各残余引数には、オブジェクトの変換に影響を与えるキーと値のペアを指定することもできます。変換関連の 3 つの引数は次のとおりです。
  • 移動 : Distance3d
  • スケール : Double3d
  • 回転 : Quaternion
これらの引数はオプションです。指定された順に適用され、何度も指定でき、渡される変換があればそれに反映されます。
引数が順番に適用され、同じキーを持つ引数はすべて処理されるという点で、この動作は実際のキーワード引数の場合と非常に異なります。

次の例では変換された Quad が作成されています。
例: Quad の変換
{import * from CURL.GRAPHICS.SCENE}
{SceneGraphic
    width = 3in,
    height = 3in,
    {Scene
        {Quad  
            || First uniformly scale by 2
            scale = {Double3d 2, 2, 2}, 
            || Then rotate around the z axis
            rotate = {Quaternion.from-axis-rotation 45deg, {Double3d 0, 0, 1}},
            || Then translate in the x direction 
            translate = {Distance3d -1in, 0in, 0in},
            || Finally rotate again around the z axis
            rotate = {Quaternion.from-axis-rotation 90deg, {Double3d 0, 0, 1}},
            0in, 0in,
            1in, 1in
        }
    }
}



プロパティ詳細
bounding-box-caching-enabled? (フィールド)
public SceneObject.bounding-box-caching-enabled?:bool =false

境界ボックスのキャッシュが有効であるかどうかを指定するブール値。

注意事項

SceneObject.cached-bounding-box-dirty?を参照してください。


bounding-box-or-object-visible? (アクセサ)
アクセサ public final SceneObject.bounding-box-or-object-visible?:bool

オブジェクトまたはその境界ボックスが可視であるかどうかを指定するブール値。



cached-bounding-box-dirty? (フィールド)
public SceneObject.cached-bounding-box-dirty?:bool =true

キャッシュされた境界ボックスが未処理 (再計算する必要がある) であるかどうかを指定するブール値。

説明

サブクラス SceneObject で境界ボックスのキャッシュ メカニズムを使用する場合は、オブジェクトのジオメトリが変更する際に、このフィールドを true に設定する必要があります。

注意事項

SceneObject.bounding-box-caching-enabled? を参照してください。


controller (アクセサ)
アクセサ public SceneObject.controller:#SceneObjectController
セッター public SceneObject.controller:#SceneObjectController

この SceneObject の SceneObjectController。コントローラはアタッチされ次第、有効になります。既存のコントローラ (ある場合) は新しいコントローラをアタッチすると無効になります。

注意事項

通常、SceneGroup はその SceneObjectController のオブジェクトを更新します (SceneObjectController.update-objectを呼び出して)。ただし、サブクラスが SceneGroup であったり、 SceneObject が含まれるクラスを書き込む場合は、必ず各 contained SceneObject の SceneObjectControllerに対するSceneObjectController.update-object を呼び出してください。

SceneObject にこのセッターをオーバーライドする場合は、一度コントローラをアタッチしたら、必ず SceneObjectController.enabled? を true に設定してください。

このプロパティは Scene 型のオブジェクトに影響を与えません。


local-bounding-box-color (フィールド)
public SceneObject.local-bounding-box-color:Color ={Palette.get-cyan}

SceneObject のローカル座標フレームにある SceneObject の周囲に描画された軸平行境界ボックスの色。



local-bounding-box-line-width (フィールド)
public SceneObject.local-bounding-box-line-width:Distance =1pt

SceneObject のローカル座標フレームにある SceneObject の周囲に描画された軸平行境界ボックスの線幅。



local-bounding-box-visible? (フィールド)
public SceneObject.local-bounding-box-visible?:bool =false

SceneObject のローカル座標フレームにある SceneObject の周囲に描画された軸平行境界ボックスが可視であるかどうかを指定するブール値。



name (アクセサ)
アクセサ public SceneObject.name:#String
セッター public SceneObject.name:#String

この SceneObject の名前。



opaque-to-intersection? (アクセサ)
アクセサ public SceneObject.opaque-to-intersection?:bool
セッター public SceneObject.opaque-to-intersection?:bool

SceneObject により他のオブジェクトが交点イベントを受け取るのを終了させるかどうかを指定します。

説明

既定値は true になります。すなわち、Predicatefirst で、 SortOrderforward の場合は、このオブジェクトの「背後」にある SceneObject に交点イベントが届きません。

注意事項

通常のイベント処理の場合は、このプロパティは EventHandler を持つオブジェクトにより置換されます。opaque-to-intersection? が false の場合は、オブジェクトにそのイベントに該当するEventHandler があれば、イベントは依然としてオブジェクトに影響を与えます。

SceneGroup.get-intersections を呼び出すと、opaque-to-intersection? が、オブジェクトとイベントとの交差をテストするかどうかを指定する唯一の要素になります。

このプロパティは SceneGroup 型のオブジェクトに影響を与えません。


parent (アクセサ)
アクセサ public SceneObject.parent:#SceneGroup

SceneObject の親。



parent-bounding-box-color (フィールド)
public SceneObject.parent-bounding-box-color:Color ={Palette.get-yellow}

SceneObjectparent のローカル座標フレームにある SceneObject の周囲に描画された軸平行境界ボックスの色。



parent-bounding-box-line-width (フィールド)
public SceneObject.parent-bounding-box-line-width:Distance =1pt

SceneObjectparent のローカル座標フレームにある SceneObject の周囲に描画された軸平行境界ボックスの線幅。



parent-bounding-box-visible? (フィールド)
public SceneObject.parent-bounding-box-visible?:bool =false

SceneObjectparent のローカル座標フレームにある SceneObject の周囲に描画された軸平行境界ボックスが可視であるかどうかを指定するブール値。



scene (アクセサ)
アクセサ public SceneObject.scene:#Scene
セッター package sealed SceneObject.scene:#Scene

この SceneObject が属する Scene



transformation (アクセサ)
アクセサ public SceneObject.transformation:Transformation3d
セッター public SceneObject.transformation:Transformation3d

SceneObject の変換。

このプロパティは Scene 型のオブジェクトに影響を与えません。



visible? (アクセサ)
アクセサ public SceneObject.visible?:bool
セッター public SceneObject.visible?:bool

SceneObject が可視であるかどうかを指定するブール値。



world-bounding-box-color (フィールド)
public SceneObject.world-bounding-box-color:Color ={Palette.get-magenta}

Scene のローカル座標フレームにある SceneObject の周囲に描画された軸平行境界ボックスの色。



world-bounding-box-line-width (フィールド)
public SceneObject.world-bounding-box-line-width:Distance =1pt

Scene のローカル座標フレームにある SceneObject の周囲に描画された軸平行境界ボックスの線幅。



world-bounding-box-visible? (フィールド)
public SceneObject.world-bounding-box-visible?:bool =false

Scene のローカル座標フレームにある SceneObject の周囲に描画された軸平行境界ボックスが可視であるかどうかを指定するブール値。



world-position (アクセサ)
アクセサ public sealed SceneObject.world-position:Distance3d
セッター public sealed SceneObject.world-position:Distance3d

ワールド座標内の SceneObject の座標空間の始点。



world-transformation (アクセサ)
アクセサ public SceneObject.world-transformation:Transformation3d

SceneObject をワールドに実際に変換 (Scene)。

注意事項

SceneObjectScene 階層の一部でない場合は、world-transformation はその階層のルートにあるノードに変換内容を返します。





メソッド詳細
get-cached-local-bounding-box (メソッド)
public {SceneObject.get-cached-local-bounding-box
check-visibility?:bool = false
}:(min-xyz:Distance3d, max-xyz:Distance3d, valid-bounds?:bool)

ローカル座標システムにある SceneObject のキャッシュされた軸平行の 3 次元境界。

check-visibility?: このメソッドの呼び出し時にオブジェクトの可視性またはその境界ボックスがチェックされるかどうかを指定する boolcheck-visibility?trueSceneObject が不可視である場合は、返される境界は無効になります。既定値は false になります。

戻り値

min-xyz, max-xyz :境界ボックスを示す 2 つの Distance3d
valid-bounds? :返された境界が有効であるかどうかを示す bool

説明

キャッシュされた境界が末処理である場合 (SceneObject.cached-bounding-box-dirty? を参照してください) または境界ボックスのキャッシュが無効である場合 (SceneObject.bounding-box-caching-enabled? を参照してください)、このメソッドは最初に SceneObject.get-local-bounding-box を呼び出します。次にキャッシュされた境界が返されます。


get-local-bounding-box (メソッド)
public abstract {SceneObject.get-local-bounding-box
check-visibility?:bool = false
}:(min-xyz:Distance3d, max-xyz:Distance3d, valid-bounds?:bool)

SceneObject の軸平行である 3 次元のローカル境界。SceneObject のサブクラスにこのメソッドをオーバーライドする必要があります。

check-visibility?: このメソッドの呼び出し時にオブジェクトの可視性またはその境界ボックスがチェックされるかどうかを指定する boolcheck-visibility?trueSceneObject が不可視である場合は、返される境界は無効になります。既定値は false になります。

戻り値

min-xyz, max-xyz :境界ボックスを示す 2 つの Distance3d
valid-bounds? :返された境界が有効であるかどうかを示す bool

オーバーライド

SceneObject が不可視である場合は SceneObject の可視性を常時チェックし、無効な境界を返す必要があります。(SceneObject.bounding-box-or-object-visible? を参照してください)。


get-parent-bounding-box (メソッド)
public {SceneObject.get-parent-bounding-box
check-visibility?:bool = false
}:(min-xyz:Distance3d, max-xyz:Distance3d, valid-bounds?:bool)

親座標システムにある SceneObject の軸平行の 3 次元境界。

check-visibility?: このメソッドの呼び出し時にオブジェクトの可視性またはその境界ボックスがチェックされるかどうかを指定する boolcheck-visibility?trueSceneObject が不可視である場合は、返される境界は無効になります。既定値は false になります。

戻り値

min-xyz, max-xyz :境界ボックスを示す 2 つの Distance3d
valid-bounds? :返された境界が有効であるかどうかを示す bool


get-transformed-bounding-box (メソッド)
public {SceneObject.get-transformed-bounding-box
transformation:Transformation3d,
check-visibility?:bool = false
}:(min-xyz:Distance3d, max-xyz:Distance3d, valid-bounds?:bool)

SceneObject の軸平行である 3 次元の変換された境界。

transformation: 境界が計算される座標システムを指定する Transformation3d
check-visibility?: このメソッドの呼び出し時にオブジェクトの可視性またはその境界ボックスがチェックされるかどうかを指定する boolcheck-visibility?trueSceneObject が不可視である場合は、返される境界は無効になります。既定値は false になります。

戻り値

min-xyz, max-xyz :境界ボックスを示す 2 つの Distance3d
valid-bounds? :返された境界が有効であるかどうかを示す bool


get-world-bounding-box (メソッド)
public {SceneObject.get-world-bounding-box
check-visibility?:bool = false
}:(min-xyz:Distance3d, max-xyz:Distance3d, valid-bounds?:bool)

ワールド (最上位レベル) 座標システムにある SceneObject の軸平行の 3 次元境界。

check-visibility?: このメソッドの呼び出し時にオブジェクトの可視性またはその境界ボックスがチェックされるかどうかを指定する boolcheck-visibility?trueSceneObject が不可視である場合は、返される境界は無効になります。既定値は false になります。

戻り値

min-xyz, max-xyz :境界ボックスを示す 2 つの Distance3d
valid-bounds? :返された境界が有効であるかどうかを示す bool


intersect-box (メソッド)
public {SceneObject.intersect-box
min-xyz:Distance3d,
max-xyz:Distance3d,
intersection-style:IntersectionStyle
}:#Intersection

ボックスが SceneObject と交差する方法を計算します。既定の実装では境界ボックスの交差を実行します。SceneObject のサブクラスにこのメソッドのオーバーライドが必要になる場合があります。



intersect-line (メソッド)
public {SceneObject.intersect-line}:#Intersection

無限大の線と SceneObject との交差を計算します。既定の実装では境界ボックスの交差を実行します。SceneObject のサブクラスにこのメソッドのオーバーライドが必要になる場合があります。



intersect-line-segment (メソッド)
public {SceneObject.intersect-line-segment}:#Intersection

ライン セグメントと SceneObject との交差を計算します。既定の実装では境界ボックスの交差を実行します。SceneObject のサブクラスにこのメソッドのオーバーライドが必要になる場合があります。



intersect-ray (メソッド)
public {SceneObject.intersect-ray
origin:Distance3d,
direction:Direction3d
}:#Intersection

光線と SceneObject との交差を計算します。既定の実装では境界ボックスの交差を実行します。SceneObject のサブクラスにこのメソッドのオーバーライドが必要になる場合があります。



intersect-sphere (メソッド)
public {SceneObject.intersect-sphere
center:Distance3d,
radius:Distance,
intersection-style:IntersectionStyle
}:#Intersection

球が SceneObject と交差する方法を計算します。既定の実装では境界ボックスの交差を実行します。SceneObject のサブクラスにこのメソッドのオーバーライドが必要になる場合があります。



ndc-point-to-ray (メソッド)
public sealed {SceneObject.ndc-point-to-ray
ndc-point:Double2d,
viewport-width:Distance,
viewport-height:Distance,
near-plane-point-origin?:bool = false
}:(origin:FloatDistance3d, direction:FloatDirection3d)

SceneCamera を使用すると、2 次元の正規デバイス座標が 3 次元の光線に変換されます。

ndc-point: 変換される正規デバイス座標。
viewport-width, viewport-height: 現在のビューポートの幅および高さ。
near-plane-point-origin?: 始点の位置を指定するブール値。near-plane-point-origin? が false (既定) の場合は、始点はカメラの点 (透視投影の場合) またはカメラの面 (正投影の場合) のいずれかになります。true の場合は、始点は常時、近クリップ面上にあります。

戻り値

origin, direction :返される光線の始点および方向

説明

光線は SceneObject のローカル座標システムに変換されます。

SceneObject.viewport-point-to-ray および viewport-point-to-ndc-point を参照してください。


paint (メソッド)
public {SceneObject.paint
renderer:Renderer3d,
viewport-width:Distance,
viewport-height:Distance
}:void

Renderer3d を使用して self を描画します。

注意事項

このメソッドを使用して SceneObject の変換を修正することはできません。それを修正するには、SceneObject.pre-paint を使用する必要があります。


point-to-ndc-point (メソッド)
public sealed {SceneObject.point-to-ndc-point
point:Distance3d,
viewport-width:Distance,
viewport-height:Distance
}:Float3d

SceneCamera を使用すると、3 次元モデルの点が 3 次元正規デバイス座標に変換されます。

point: 変換される 3 次元モデルの点。
viewport-width, viewport-height: 現在のビューポートの幅および高さ。

戻り値

3 次元正規デバイス座標を表す Float3d

説明

モデルの点は変換前に SceneObject のローカル座標システムで変換されます。

注意事項

このメソッドは 3 次元シーン内に 2 次元のビルボード テキストを描画する際に有用です。

SceneObject.point-to-viewport-point および ndc-point-to-viewport-point を参照してください。


point-to-viewport-point (メソッド)
public sealed {SceneObject.point-to-viewport-point
point:Distance3d,
viewport-width:Distance,
viewport-height:Distance
}:FloatDistance2d

SceneCamera を使用すると、3 次元モデルの点が 2 次元ビューポートの点に変換されます。

point: 変換される 3 次元モデルの点。
viewport-width, viewport-height: 現在のビューポートの幅および高さ。

戻り値

2 次元ビューポートの点を表す FloatDistance2d

説明

モデルの点は変換前に SceneObject のローカル座標システムで変換されます。

注意事項

このメソッドは 3 次元シーン内に 2 次元のビルボード テキストを描画する際に有用です。

次の例では、隅に 2 次元テキストを描画する Quad オブジェクトのサブクラスが作成されています。
例: TextQuad オブジェクト
{import * from CURL.GRAPHICS.SCENE}

{define-class public TextQuad {inherits Quad}
  {constructor public {default ...}
    {construct-super ... } 
  }
  
  {method open public {paint 
                          renderer:Renderer3d, 
                          viewport-width:Distance, 
                          viewport-height:Distance
                      }:void
    {super.paint renderer, viewport-width, viewport-height}
    
    || Compute the 2D viewport point.
    let pos:Distance2d = 
        {self.point-to-viewport-point
            {Distance3d self.x, self.y, self.z},
            viewport-width, 
            viewport-height
        }
    
    || Draw the 2D text.
    {with 
        renderer.font = {Font "sans-serif",16pt},
        renderer.texture = {Color.from-rgb 1, 1, 0}
     do
        {renderer.render-string-2d pos.x, pos.y, "Quad"}
    } 
    
  } 
}

{SceneGraphic
    width = 3in,
    height = 3in,
    {Scene
        {TextQuad -3in, -3in, 6in, 6in}
    }
}


pre-paint (メソッド)
public {SceneObject.pre-paint
renderer:Renderer3d,
viewport-width:Distance,
viewport-height:Distance
}:void

このメソッドは描画される前に SceneObject の変換内容を修正するのに使用する必要があります。

注意事項

描画する前に SceneObject の変換内容を変更する場合 (すなわち、シーン オブジェクトをカメラに向ける) は、描画前メソッドを使用する必要があります。

このプロパティは Scene 型のオブジェクトに影響を与えません。


rotate (メソッド)
public sealed {SceneObject.rotate
axis:Direction3d,
rotation:Angle
}:void

指定した軸の周囲で SceneObject を右方向にローカルに回転します。

注意事項

このプロパティは Scene 型のオブジェクトに影響を与えません。


scale (メソッド)
public sealed {SceneObject.scale
scale-x:double,
scale-y:double,
scale-z:double
}:void

SceneObject のスケールをローカルに実行します。

注意事項

このプロパティは Scene 型のオブジェクトに影響を与えません。


set-orientation-and-position (メソッド)
public {SceneObject.set-orientation-and-position
direction:Direction3d,
up-vector:Direction3d,
position:Distance3d = self.world-position
}:void

ある方向のオブジェクト (その負の z ベクトル) をグローバルにポイントします。上ベクトル(その正の y ベクトル)も指定する必要があります。そのオブジェクトのグローバルな位置は指定することができます。これは Camera の方向をつけるのに使用することができます。

注意事項

このプロパティは Scene 型のオブジェクトに影響を与えません。


translate (メソッド)
public sealed {SceneObject.translate
translation-x:Distance,
translation-y:Distance,
translation-z:Distance
}:void

SceneObject の平行移動をローカルに実行します。

注意事項

このプロパティは Scene 型のオブジェクトに影響を与えません。


viewport-point-to-ray (メソッド)
public sealed {SceneObject.viewport-point-to-ray
viewport-point:Distance2d,
viewport-width:Distance,
viewport-height:Distance,
near-plane-point-origin?:bool = false
}:(origin:FloatDistance3d, direction:FloatDirection3d)

SceneCamera を使用すると、2 次元ビューポートが 3 次元光線に変換されます。

viewport-point: 変換されるビューポートの点。
viewport-width, viewport-height: 現在のビューポートの幅および高さ。
near-plane-point-origin?: 始点の位置を指定するブール値。near-plane-point-origin? が false (既定) の場合は、始点はカメラの点 (透視投影の場合) またはカメラの面 (正投影の場合) のいずれかになります。true の場合は、始点は常時、近クリップ面上にあります。

戻り値

origin, direction :返される光線の始点および方向

説明

光線は SceneObject のローカル座標システムに変換されます。