読者です 読者をやめる 読者になる 読者になる

Shoggoth から SceneNode::getWorldPosition() と getWorldOrientation() がなくなった

 リリース候補版として検証が続いている Ogre 1.6.0 RC1 では、 SceneNode クラスから getWorldPosition() と getWorldOrientation() が取り除かれました。このメンバ関数は、ワールド空間における座標と姿勢を取得するために使用されます。この変更が原因で、 1.6.0 に乗り換えた一部の開発者がコンパイルエラーに遭遇するようになってしまいました。

'getWorldOrientation' : is not a member of 'Ogre::SceneNode' (Ogre Forums)

 Changelog によると Renderable インターフェイスからこの2つのメソッドが削除された(Renderable はエンジン側ではフルトランスフォームマトリクスでしかやりとりしていなかった)のに併せて SceneNode からも削ったとのこと。_getDerivedPosition() と _getDerivedOrientation() を代わりに使うようにということです。

 この関数は元々 Eihort でも deprecated (非推奨メンバ関数)になっていました。getWorld* は _getDerived* の完全なエイリアスでしたから、 _getDerived* に置き換えるだけで移植は終わりです。 OgreSceneNode.h に2行加える方法もあります。

 これは大きな問題ではありません。しかし Ogre では public メンバ関数の先頭にアンダースコアをつけることで、指定クラスのみのアクセス許可を示唆するコードスタイルがしばしばとられます。SceneNode を NULL ノードとみなして計算結果を抜き取る用途を多用するスタイルの自分にとっては getWorld* がなくなり、 _getDerived* にまとめられたことで、別のやり方をとれと言われてるような気分で、ちょっと気になったトピックでした。