C++,locator,maya,pluginこんにちは。開発部の齊藤です今回は、カスタムLocatorのViewport2.0対応版のサンプル解説しながらViewport1.0とViewport2.0で何が変わったのか見ていこうと思いますMaya2015からViewportは2.0が標準となって、Maya2014まで標準だったものはLegacyという扱いになりました何が変わったのでしょうか?Locatorからすると、描画の流れが変わります。Viewport2.0対応していないロケーターは、Viewport2.0上では表示されません。Viewport2.0Viewport2.0で変わる事Viewport1.0と2.0では、大きく2つ変わります。描画の流れの違いまずはじめに、描画の流れがどのように変わったのかを見ていきます各関数の詳しいことは後述します。Viewport1.0の、Locator作成から描画までの流れです次にViewport2.0の描画ですViewport2.0では、新たにMUserDataクラスとMPxDrawOverrideクラスの2つが加わりますMPxDrawOverrideクラスは描画の処理担当し、MUserDataは描画に必要な情報を格納します描画の処理は、Viewport1.0ではMPxLocatorのdraw関数1つで処理が終わっていました。Viewport2.0では、描画の事前準備をMPxDrawOverrideのprepareForDraw関数が、実行を同クラスのdraw関数と2つに分かれますViewport1.0と2.0では描画する流れが違う為、両方に処理を書く必要があります。uninitializePluginの違い次に、initializePluginの登録です。DFCustomLocator::drawRegistrantId("DFCustomLocatorNodePlugin");重要なのが、分類文字列と呼ばれるものを定義しているdrawDbClassification変数です。Locator登録とDrawOverride登録の2箇所で登場しています。前述の通り、これによりLocatorとDrawOverrideは紐付けられ、Locator描画時に同じ文字列を持ったDrawOverrideが使われるようになります。この分類文字列は必ず、”drawdb/geometry/”から始まる必要があります。MHWRender::kOpenGL;}supportedDrawAPIsは、LocatorDrawOverrideがサポートAPIを返しますOpenGLなのか、DirectXなのか。1.0f));}BoundingBoxのサイズを返します。描画するかしないかに用いられます。prepareForDrawいよいよ、描画の前に呼ばれるprepareForDraw関数です。draw_data;}Viewport1.0との違いが、この描画の準備と実行が分かれていることですViewport2.0では、描画メソッドでDGからデータを取得することは、Mayaが不安定になるという理由からここを分けています。glPopMatrix();}Viewport1.0と違いは、M3dViewのbeginGLとengGLが無いWorldMatrixとProjectionMatrix両方とも取得してセットしてあげる必要があるというところです。今回Viewport1.0と両立する為、drawにはViewport2.0で描画するのに必要な準備を書き実際の描画は、DFCusotmeLocator::display関数内に書いていますこうすることで、Viewport1.0の時はViewport1.0で描画をするのに必要な処理を書いてDFCusotmeLocator::display関数内を呼び出すことで、目的の描画が出来ます。最後に駆け足でしたが、なんとなくViewport2.0におけるLocator描画の流れを掴めましたでしょうか。公開している全ての手法・コードの有用性、安全性について、当方は一切の保証を与えるものではありません。これらのコードを使用したことによって引き起こる直接的、間接的な損害に対し、当方は一切責任を負うものではありません。自己責任でご使用ください。(※必須):Website:Comment:コメントは承認制ですので、即時に反映されません。上に表示された文字を入力してください。月別アーカイブ2018年5月2017年1月2月3月4月6月10月11月2016年1月2月3月4月5月6月7月8月10月11月12月2015年1月2月3月4月5月6月7月8月9月10月11月12月2014年1月2月3月4月5月6月7月8月9月10月11月12月2013年1月2月3月4月5月6月7月8月9月10月11月12月2012年2月3月4月5月6月7月8月9月10月11月12月2011年1月2月3月4月5月6月7月8月9月10月11月12月2010年12月Footer。