スクリプト Camera プラグイン

MAXScript にスクリプト Camera プラグインを記述できるようになりました。現時点では、既存の MAX カメラを拡張する拡張カメラ プラグイン、またはカスタム カメラ システムの作成ツールの管理に使用できるテンポラリ カメラ プラグインを記述できます。

カメラのプラグイン スーパークラスは、「camera」です。

イベント ハンドラ

on renderApertureChanged val do ....

スクリプト カメラでは、このイベント ハンドラを利用して、CameraObject:: renderApertureChanged コールバックにアクセスすることができます。ユーザがレンダラーの口径に影響するパラメータを調整するときに、カメラへの[レンダリング] (Rendering)ダイアログ ボックスでこのコールバックが作成されます。

このハンドラはオプションです。

この「'val'」パラメータには、新しいレンダラーの口径値が設定されます。このハンドラは、通常、[レンダリング] (Rendering)ダイアログ ボックスの[出力イメージ サイズ](Output Size)ドロップダウンで新しい口径を選択したとき、またはカスタム モードでスピナーを調整したときに呼び出されます。

このハンドラは、次の場合に呼び出されます。

ハンドラに渡される値は口径幅です。それ以外の値は、renderWidthrenderHeight、および RenderPixelAspect グローバル変数から取得できます。ただし、これらの値は、[口径幅](Aperture Width)の値を除いて、通常は古い値です。ハンドラへの呼び出しは、「InvalidateCameras」メソッドから行われます。このメソッドは、新しい値を設定する直前に呼び出されます。新しい値が設定された後に、ブロードキャストは行われません。つまり、すべてのビューポートでセーフ フレームがオフになっている場合、ビューポートは再描画されません。

スクリプト カメラでこのハンドラが使用される場合は、[口径幅](Aperture Width)の古い値をキャッシュに格納し、受け取った値とキャッシュ値を照合してから処理を継続することをお勧めします。

   plugin Camera CamTest
   name:"CamTest"
   classID:#(0x47db14ff, 0x4e9b5f90)
   category:"Standard"
   extends:FreeCamera
   ( 
     on renderApertureChanged val do 
       format "renderApertureChanged: %\n" val 
     tool create ( on mousePoint click do #stop ) 
   ) 

次のハンドラが 3ds Max 7 で追加されました。

on getDisplayMesh do ....

このイベント ハンドラは、スクリプト カメラとヘルパーで使用でき、開発者は、代理オブジェクトのビューポート表示メッシュを、カスタム表示メッシュに置き換えることができます。

このハンドラはオプションです。

注: パフォーマンス上の理由から、返されるメッシュはできるだけ再生成しないことが重要です。ハンドラは多くの場合、表示、範囲テスト、およびヒット テストの際に呼び出されます。

下の例は、メッシュが実際に変更された場合に限り、ハンドラでそのメッシュを更新する方法を示しています。

   plugin Camera CamTest_DisplayMesh
   name:"CamTest"
   classID:#(0x6ca13d13, 0x12afbfd4)
   category:"Standard"
   extends:FreeCamera
   (
     local lastR1, lastR2, meshObj
     parameters pblock rollout:params
     (
       radius1 type:#float animatable:true ui:r1_amount default:40.0
       radius2 type:#float animatable:true ui:r2_amount default:20.0
     )
     rollout params "CamTest Parameters"
     (
       Spinner r1_amount "Radius 1:" range:[0, 1e9, 40]
       Spinner r2_amount "Radius 2:" range:[0, 1e9, 20]
     )
     on getDisplayMesh do
     (
       if (meshObj == undefined) do
       (
         meshObj = createInstance torus radius1:radius1 radius2:radius2 mapCoords:false
         lastR1 = radius1; lastR2 = radius2
       )
       if radius1 != lastR1 do (meshObj.radius1 = radius1; lastR1 = radius1)
       if radius2 != lastR2 do (meshObj.radius2 = radius2; lastR2 = radius2)
       meshObj.mesh
     )--end on getDisplayMesh
     tool create
     (
       on mousePoint click do (nodeTM.translation = gridPoint;#stop )
     )--end tool
   )--end plugin
on useWireColor do ....

このオプションのイベント ハンドラを使用すると、開発者はビューポートでのオブジェクトの描画にノードのワイヤ カラーを使用するか、指定のオブジェクト タイプに対応した UI カラー(カメラにはカメラ オブジェクト)を使用するかを指定できます。このハンドラが true を返す場合は、ノードのワイヤ カラーが使用されます。false を返す場合は、オブジェクト タイプの UI カラーが使用されます。イベント ハンドラを指定しない場合は、ワイヤ カラーが使用されます。getDisplayMesh ハンドラを指定した場合に限って、このハンドラを使用できます。3ds Max 8 以降で使用可能です。