MAXScript にスクリプト Camera プラグインを記述できるようになりました。現時点では、既存の MAX カメラを拡張する拡張カメラ プラグイン、またはカスタム カメラ システムの作成ツールの管理に使用できるテンポラリ カメラ プラグインを記述できます。
カメラのプラグイン スーパークラスは、「camera」です。
イベント ハンドラ
on renderApertureChanged val do ....
スクリプト カメラでは、このイベント ハンドラを利用して、CameraObject:: renderApertureChanged
コールバックにアクセスすることができます。ユーザがレンダラーの口径に影響するパラメータを調整するときに、カメラへの[レンダリング] (Rendering)ダイアログ ボックスでこのコールバックが作成されます。
このハンドラはオプションです。
この「'val'
」パラメータには、新しいレンダラーの口径値が設定されます。このハンドラは、通常、[レンダリング] (Rendering)ダイアログ ボックスの[出力イメージ サイズ](Output Size)ドロップダウンで新しい口径を選択したとき、またはカスタム モードでスピナーを調整したときに呼び出されます。
このハンドラは、次の場合に呼び出されます。
[シーンをレンダリング](Render Scene)ダイアログ ボックスで、[イメージ アスペクト](Image Aspect)のロックが解除されているときに、[幅] (Width)、[高さ] (Height)、または[ピクセル アスペクト](Pixel Aspect)を変更した場合
[シーンをレンダリング](Render Scene)ダイアログ ボックスで、出力サイズのプリセット ボタンのいずれかをクリックした場合
[シーンをレンダリング](Render Scene)ダイアログ ボックスで、[イメージ アスペクト](Image Aspect)がロックされているときに[幅] (Width)、[高さ] (Height)、または[ピクセル アスペクト](Pixel Aspect)を変更するか、[口径幅](Aperture Width)を変更してから[レンダリング] (Render)または[閉じる] (Close)をクリックした場合
ハンドラに渡される値は口径幅です。それ以外の値は、renderWidth
、renderHeight
、および 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 を返す場合は、ノードのワイヤ カラーが使用されます。このハンドラが true を返す場合は、ノードのワイヤ カラーが使用されます。 false を返す場合は、オブジェクト タイプの UI カラーが使用されます。イベント ハンドラを指定しない場合は、ワイヤ カラーが使用されます。getDisplayMesh
ハンドラを指定した場合に限って、このハンドラを使用できます。3ds Max 8 以降 で使用可能です。