はじめに
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.DAE のテクスチャが TGA 形式であるのに、Delphi / C++Builder が TGA に対応していないからです。
以前のバージョンでは対応していないテクスチャを読み込まなかったので、エラーにはなりませんでしたが、テクスチャなしの FireMonkey くんが読み込まれていました。
対策
結論から言えば テクスチャを TGA から PNG に変換すればいいのです。Paint.NET 等で変換できます。
- Monkey_ambient.tga
- Monkey_diff.tga
- Monkey_nml.tga
- Monkey_eye.tga
4 つの TGA ファイルを PNG 形式に変換したら、次は 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 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>
...
上記の修正を行うと、エラーもなくテクスチャ付きで読み込ませることができます。
おわりに
Delphi / C++Builder のライブラリで TGA 形式に対応すればいいのに、と思いました。
なお、macOS だと FireMonkey で TGA が読めるので、動的に 3D モデルを読み込ませればいいのかもしれません。
- [FMX サポート対象のイメージ形式 (Embarcadero)]
(https://community.embarcadero.com/blogs/entry/fmx-japan)
神野甘音のペットも FireMonkey くんですが、個人的にはこちらの 3D モデルが欲しいですねー (w