【Delphi】FireMonkey くんの 3D モデルデータを普通に読み込む

# はじめに
FireMonkey とは Delphi / C++Builder の GUI アプリケーションフレームワークです。その FireMonkey のマスコット (?) が FireMonkey くんです...正式名称は知りません (w

FireMonkey くんの 3D モデルデータは 

C:\Users\Public\Documents\Embarcadero\Studio\19.0\Samples\Object Pascal\Multi-Device Samples\User Interface\ModelViewer\FireMonkey

に格納されています (10.2.x Tokyo の場合)。データ形式は COLLADA (*.dae) です。

# FireMonkey で 3D モデルデータを扱う

TModel3D にモデルデータを読み込ませる手順は以下の通りです。

 - [FireMonkey アプリケーションに 3D モデルをインポートする (DocWiki)](http://docwiki.embarcadero.com/RADStudio/Tokyo/ja/FireMonkey_%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AB_3D_%E3%83%A2%E3%83%87%E3%83%AB%E3%82%92%E3%82%A4%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%88%E3%81%99%E3%82%8B)

...なのですが、現行バージョンでこれを行うとエラーになります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/21785/28ccd532-88cc-660e-f419-9e345f7d3d6a.png)

実際に読み込ませると...

![image.png](https://qiita-image-store.s3.amazonaws.com/0/21785/a20761f3-7ece-6e20-8bc8-813640ede360.png)

まぁ、何でかって言うとこの FireMonkey.DAE のテクスチャが [TGA 形式](https://ja.wikipedia.org/wiki/TGA)であるのに、Delphi / C++Builder が TGA に対応していないからです。

以前のバージョンでは対応していないテクスチャを読み込まなかったので、エラーにはなりませんでしたが、テクスチャなしの FireMonkey くんが読み込まれていました。

## 対策
結論から言えば テクスチャを TGA から PNG に変換すればいいのです。[Paint.NET](https://www.getpaint.net/) 等で変換できます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/21785/0ee1f184-a25b-2dcc-802e-53673237090c.png)

 - Monkey_ambient.tga
 - Monkey_diff.tga
 - Monkey_nml.tga
 - Monkey_eye.tga

4 つの TGA ファイルを PNG 形式に変換したら、次は FireMonkey.DAE をテキストエディタで開きます。

```xml:FireMonkey.DAE
<?xml version="1.0" encoding="utf-8"?>
<COLLADA xmlns="http://www.collada.org/2005/11/COLLADASchema" version="1.4.0">
  <asset>
    <contributor>
      <author></author>
      <authoring_tool>FBX COLLADA exporter</authoring_tool>
      <comments></comments>
    </contributor>
    <created>2011-06-15T11:43:03Z</created>
    <modified>2011-06-15T11:43:03Z</modified>
    <revision></revision>
    <title></title>
    <subject></subject>
    <keywords></keywords>
    <unit meter="0.010000"/>
    <up_axis>Z_UP</up_axis>
  </asset>
  <library_images>
    <image id="Map__14_image-image" name="Map__14_image">
      <init_from>file://M:\MORT\FireMonkey\Monkey\FinalTexture\Monkey_ambient.tga</init_from>
    </image>
    <image id="Map__13_image-image" name="Map__13_image">
      <init_from>file://M:\MORT\FireMonkey\Monkey\FinalTexture\Monkey_diff.tga</init_from>
    </image>
    <image id="Map__12_image-image" name="Map__12_image">
      <init_from>file://M:\MORT\FireMonkey\Monkey\FinalTexture\Monkey_nml.tga</init_from>
    </image>
    <image id="Map__15_image-image" name="Map__15_image">
      <init_from>file://M:\MORT\FireMonkey\Monkey\FinalTexture\Monkey_eye.tga</init_from>
    </image>

    ...
```
何故かフルパスで書かれているファイル記述を PNG で書き換えます。

```xml:FireMonkey.DAE
<?xml version="1.0" encoding="utf-8"?>
<COLLADA xmlns="http://www.collada.org/2005/11/COLLADASchema" version="1.4.0">
  <asset>
    <contributor>
      <author></author>
      <authoring_tool>FBX COLLADA exporter</authoring_tool>
      <comments></comments>
    </contributor>
    <created>2011-06-15T11:43:03Z</created>
    <modified>2011-06-15T11:43:03Z</modified>
    <revision></revision>
    <title></title>
    <subject></subject>
    <keywords></keywords>
    <unit meter="0.010000"/>
    <up_axis>Z_UP</up_axis>
  </asset>
  <library_images>
    <image id="Map__14_image-image" name="Map__14_image">
      <init_from>Monkey_ambient.png</init_from>
    </image>
    <image id="Map__13_image-image" name="Map__13_image">
      <init_from>Monkey_diff.png</init_from>
    </image>
    <image id="Map__12_image-image" name="Map__12_image">
      <init_from>Monkey_nml.png</init_from>
    </image>
    <image id="Map__15_image-image" name="Map__15_image">
      <init_from>Monkey_eye.png</init_from>
    </image>

    ...
```

上記の修正を行うと、エラーもなくテクスチャ付きで読み込ませることができます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/21785/a6f3789e-9969-2c2d-7f21-d6aefa2b47b9.png)


# おわりに

Delphi / C++Builder のライブラリで TGA 形式に対応すればいいのに、と思いました。

なお、macOS だと FireMonkey で TGA が読めるので、動的に 3D モデルを読み込ませればいいのかもしれません。

 - [FMX サポート対象のイメージ形式 (Embarcadero)]
(https://community.embarcadero.com/blogs/entry/fmx-japan)

神野甘音のペットも FireMonkey くんですが、個人的にはこちらの 3D モデルが欲しいですねー (w

![image.png](https://qiita-image-store.s3.amazonaws.com/0/21785/2b4d3fd4-2e3a-6dd7-b622-840940d71bdf.png)

 - [神野甘音 (Embarcadero)](https://www.embarcadero.com/jp/amane)