Delphi
FMX
C++builder
FireMonkey

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

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

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