いろいろ試した結果…
Ogre3D触ったりOpenSceneGraph触ったりした結果、GamePlay3Dが割とすんなりいけて楽しい。
しかしながら、この辺のエンジンやフレームワークは日本語がほとんど無いに等しい…。(一生懸命英語読んでた
で、この数日GamePlay3Dで遊んでて最初に嵌ったことを備忘録がてらまとめ。
- 基本サンプルはQtCreatorでビルドするエディタで作られたバイナリっぽいシーンファイルで書かれているので、空のシーンを作るのどうしたらいいのよ?
Scene::create ()
使いましょう
- フルスクリーンモードにするのはどうしたらいいの?
- 新規プロジェクト作る時にGamePlay/newproject.shを使用した前提で行くと、プロジェクトフォルダ直下にgame.configってのがあるので、fullscreen: trueにしたらいけます。 但し、 そのままだとviewportが反映されていないので、initialize関数で
setViewport(Rectangle (0, 0, getWidth(), getHeight()));
して上げましょう。じゃないと、viewportずれずれで悲しみ。
- 新規プロジェクト作る時にGamePlay/newproject.shを使用した前提で行くと、プロジェクトフォルダ直下にgame.configってのがあるので、fullscreen: trueにしたらいけます。 但し、 そのままだとviewportが反映されていないので、initialize関数で
- 行列変換とかは?
- Matrixクラスはあるので、普通にそれで慣れてる人はいけるかと。ビューポート変換はCameraクラスにproject関数があるのでそれっぽい。
camera->project (getViewport (), worldPosition, buffer)
とかそんな感じ。XNAのViewportクラスとかあんなん。
- Matrixクラスはあるので、普通にそれで慣れてる人はいけるかと。ビューポート変換はCameraクラスにproject関数があるのでそれっぽい。
- fbxはどうやって表示したらいいの?
GamePlay/bin/PF/gameplay-encoder fbxファイル
でgpbファイルに変換して、Bundle::create ("変換ファイル")->loadNode ("ルートNode名")
とかでいちころ。シェーダーとか後で弄りたい人はencoderに-mオプションつけてmaterial出力してテキストエディタでいじっていく感じ。付属のシェーダはdefineでlighting指定とかになっていくので、最初material見た時にん?ん?ってなった。Untiy慣れしすぎてるのか、loadNodeした後はclone (Instantiate的な)してしまう。
- lightingを有効にしたいけど、lightつけたのにならないよ?
- nodeからgetDrawable ()して取得したものをModel*にcastして、getMaterialでマテリアル取得後、そのマテリアルにlightの光源変更イベントつけないとダメっぽいです。
MaterialParameter* colorParam = material->getParameter("u_directionalLightColor[0]"); colorParam->bindValue(_scene->findNode("directionalLight1")->getLight(), &Light::getColor); MaterialParameter* directionParam = material->getParameter("u_directionalLightDirection[0]"); directionParam->bindValue(_scene->findNode("directionalLight1"), &Node::getForwardVectorView);
- ただ、↑のやーつが厄介で、そのメソッド中でMaterialクラスを明示的に作ってるのならば、そのメソッド中の呼び出しでいけるのですが、Bundle::loadNodeとかだとそのメソッド実行中はMaterialがnullptr...
- なので、
_scene->visit(this, &Main::initializeMaterials);
シーンのvisit関数から別途マテリアル初期化関数をinitializeの最後に呼ぶとかしてあげるとうまくいく
- なので、
とりあえず、直近嵌った内容まとめでしたー