【delphi】Firemonkeyで動的に立方体を配置する

実行結果


適用状況:

  • Firemonkeyで動的に3Dを配置したい

課題:

  • 3Dオブジェクトの動的配置方法

方法:

  • TControl3Dを利用する

機能仕様:

機能 仕様
インクルードユニット FMX.objects3D
参考URL FireMonkey の立体をコードで書けますか?

unit CubeTestUnit ;

interface

  uses
    System.SysUtils ,
    System.Types ,
    System.UITypes ,
    System.Rtti ,
    System.Classes ,
    System.Variants ,
    FMX.Types ,
    FMX.Controls ,
    FMX.Forms ,
    FMX.Dialogs ,
    FMX.Types3D ,
    FMX.Materials ,
    FMX.objects3D ;

  type
    TForm1 = class( TForm )
      Viewport3D1 : TViewport3D ;
      Dummy1 : TDummy ;
      Light1 : TLight ;
      LightMaterialSource1 : TLightMaterialSource ;
      procedure FormCreate( Sender : TObject ) ;
      private
        { private 宣言 }
      public
        { public 宣言 }
    end ;

  var
    Form1 : TForm1 ;

implementation

{$R *.fmx}

  procedure TForm1.FormCreate( Sender : TObject ) ;
  // ================================================
  //
  // ================================================
  const
    W = 10 ;
    H = 5 ;
    Z = 10 ;
    S = 1.2 ;
  var
    I , J , K : Integer ;
    img :       TControl3D ;
  begin
    BeginUpdate ;
    for I     := 1 to W do
      for J   := 1 to H do
        for K := 1 to Z do
        begin
          img                         := TCube.Create( nil ) ;
          img.Parent                  := Dummy1 ;
          TCube( img ).MaterialSource := LightMaterialSource1 ;
          img.SetSize( 0.95 , 0.95 , 0.95 ) ;
          img.Position.Point := Point3D( - W / 2 * S + I * S , 1 + H / 2 * S - J * S , K * S ) ;
        end ;
    EndUpdate ;
  end ;

end.