LoginSignup
5
1

More than 3 years have passed since last update.

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

Last updated at Posted at 2018-03-19

はじめに

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

5
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1