リリース前だけど Qt6 で Qt 3Dを使ってみよう

#はじめに

昨日は、@hermit4 さんの「[Qtのイベント周りをざっくり見てみよう](https://qiita.com/hermit4/items/7a3202c5f6b7be6a759d)」でした。Qt のイベント回りは柔軟性が高いので、

さて、12/1 リリース予定でありましたが、Qt6 のリリースがちょっと遅れてしまいましたので、リリース直前となってしまいたしたが、 Qt6 で Qt 3D を試してみたいと思います。 

#早速インストール

まずは、早速インストールしてみましょう。今回はメジャーバージョンアップのリリースですのでクリーンインストールしていきます。
最初の印象として、オンラインインストーラーがかなり変わってますね。（見にくいと思うのだけど...。
インストールの途中で、デフォルトで現在の安定板である 5.15.2 をインストール、もしくは、自分で構成を選択できるカスタムインストールが選べます。どちらでも構いません [^1] が、Qt6 を入れる必要がありますので、今回は手数の少ないカスタムインストールを選択していきます。 

以前は、ここで Qt のバージョン、Qt Charts などいくつかのモジュールを選択することができたのですが、今は下記の5つしか選択できません。あれ、Qt 3D は使えない？

![installer0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251604/7d7b08e0-12cd-6318-b05f-8758313ede45.png)

* Qt Quick 3D
* Qt 5 Compatibilyty Module
* Qt Quick Timeline
* Qt Shader Tools
* Qt Debug Information Files

![installer1_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251604/51ce4226-e6df-2b15-cc4a-3566988cc72e.png)


今回から新しく「Additional Libraries」 というカテゴリーが追加されており、そこには下記のモジュールがありました。この中に Qt 3D がありますね。

* Constrained Application Protocol (CoAP)
* Qt 3D
* Qt Image Formats
* Qt MQTT
* Qt Network Authorization
* Qt OPC UA

今後、Qt 直下のモジュールと、Additonal Libraries とはどのように住み分けしていくんでしょうか...

![installer2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251604/7bc027b8-d411-fb10-eb51-3dbf37729a49.png)

とりあえず、Qt6.0.0-rc2 と Qt 3D を選択してインストールを終えます。

# インストールされてる？

Qt Creator からサンプルを起動して、、、あれ、 "3d" で検索しても Qt Quick 3D のサンプルしか出てこない...

どこにインストールされているのか探してみると、下記のフォルダーにインストールされていました。

```
$HOME/Qt/AdditionalLibraries/Qt/qt3d-6.0.0
```
インストールされた内容を見てみたら

```
$ ls -la
total 0
drwxrwxr-x   5 shin1  staff   160 12  6 16:49 ./
drwxrwxr-x   9 shin1  staff   288 12  6 15:58 ../
drwxrwxr-x   3 shin1  staff    96 12  5 21:32 Docs/
drwxrwxr-x   6 shin1  staff   192 12  6 13:13 Examples/
drwxrwxr-x  40 shin1  staff  1280 12  5 21:32 Src/
```

ソースしかないんですね。。。っえ、自分でビルドしろって事なの...

# ビルドしてみる

とりあえず、cmake を実行してみて生成された CMakeCache.txt を眺めてみると、インストール先は下記となっていました。

```
CMAKE_INSTALL_PREFIX:PATH=/Users/qt/work/install
```

どこにインストールするのが正解なのかはわかりませんが、Qt 本体と同じフォルダーにインストールするには下記のように指定してください。

```
$ mkdir build
$ cd build
$ cmake -DCMAKE_INSTALL_PREFIX=$HOME/Qt/6.0.0/clang_64 ../Src
$ make -j<並列数>
$ make install
```

これで本当にインストールできましたw
それでは、サンプルを動かしてみましょう。

# サンプルを試してみる

Qt Creator から $HOME/AdditionalLibraries/Qt/qt3d-6.0.0/Examples/qt3d/simple-qml/simple-qml.pro を選んでみたのだけど...
下記のエラーが出てビルドできませんでした。

```
Project ERROR: Could not find feature qt3d-extras.
```

リリース前だからなのか、まだサンプルを動作させることはできないようです。早すぎたのですかねw

CMakeCache.txt の下記の箇所を ON にして examples も同時にビルドすれば、サンプルを実行することができました。
```
//Build Qt examples
QT_BUILD_EXAMPLES:BOOL=OFF
```

![qt3d-sample.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251604/a6267875-b6dd-7b4b-9d70-1c3b9f55e208.png)


# 最後に

Qt6 からモジュールの配布形態が変わり、Qt 3D がその対象となってしまったため、Qt 3D を取り上げてみました。残念ながらビルドはできましたが、アプリを動かすまではいかなかったので、時間があればもう一度トライしたいと思います。また、Additional Libraries は、 [conan](https://conan.io) というパッケージマネージャが採用されて、 各モジュールのインストールに関して柔軟性が高められるそうなので [^2]、次回（があれば）は、今回ビルドできなかった続報と、パッケージマネージャについて書きたいなと思います。

明日は、@Atsushi4 さんですね。乞うご期待。

[^1]: デフォルトでインストールした場合は、再度インストーラーを起動してモジュールを追加してください。
[^2]: https://www.qt.io/blog/qt-6-additional-libraries-via-package-manager