Edited at

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

More than 1 year has passed since last update.


はじめに

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 にモデルデータを読み込ませる手順は以下の通りです。

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

image.png

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

image.png

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

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


対策

結論から言えば テクスチャを TGA から PNG に変換すればいいのです。Paint.NET 等で変換できます。

image.png


  • Monkey_ambient.tga

  • Monkey_diff.tga

  • Monkey_nml.tga

  • Monkey_eye.tga

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


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 で書き換えます。


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


おわりに

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

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

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

image.png