AFsoft WebSite(エーエフソフト・ウェブサイト)
 

オペレーティング・システムについて

プログラミングについて
ホームページについて
キャドについて
電子カタログについて
書籍・雑誌
イベント
リンク集
DelphiXE3 [3D-FMX] 3Dアプリケーションテスト(1) 2014/04/20
 
前回で 3D FireMonkey アプリケーションのコンポーネントの紹介は終了しました。今回は少しだけテストプログラムを作ってみます。
 
2Dアプリケーションでの図形の作図は、コンポーネントでの作図以外でも、PaintBox の Canvas でのメソッド実行により各種図形作図を行う事が出来ますが、3Dアプリケーションでは、今のところ、同様にプログラム上での任意図形作図を行う方法が分かりません。
 
静的に3Dコンポーネントを貼り付ける方法はこれまで行なってきたように可能ですが、プログラム上で任意に3D作図をさせるには、この方法では不便です。そのため、動的に3Dオブジェクトを生成して、表示させてみます。
 
下記は、立方体 Cube を 100個作図して表示するテストプログラムです。
type
 TForm1 = class(TForm3D)
  ・・・
 end;
 
var
 Form1: TForm1;
 boxn: integer ;
 box : array of TCube ;
 
implementation
 
{$R *.fmx}
 
procedure TForm1.Form3DShow(Sender: TObject);
var
 i : integer ;
begin
 boxn := 0 ;
 for i := 0 to 99 do begin
  Inc(boxn);
  if ((boxn mod 20) = 1) then
   SetLength(box, boxn+19);
   box[boxn-1] := nil ;
   try
    box[boxn-1] := TCube.Create(Self);
    box[boxn-1].Visible := False ;
    box[boxn-1].Name := 'Cube' + IntToStr(boxn) ;
    box[boxn-1].Tag := boxn ;
    box[boxn-1].Parent := Form1 ;
    box[boxn-1].Position.X := (i mod 10)*1.5 - 6.75 ;
    box[boxn-1].Position.Y := 0 ;
    box[boxn-1].Position.Z := (i div 10)*1.5 - 6.75 ;
    box[boxn-1].Width := 1 ;
    box[boxn-1].Height:= 1 ;
    box[boxn-1].Depth := 1 ;
    box[boxn-1].Visible := True ;
   except
    ;
   end;
  end;
 end;
end;
しかしこれでは、色は全て赤色になってしまいますので、少し寂しいですから、ライトを配置し、ライト材質ソースも複数生成して、それぞれ乱数で色を指定してみます。
 
type
 TForm1 = class(TForm3D)
  ・・・
 end;
 
var
 Form1: TForm1;
 mtrn: integer ;
 mtr : array of TLightMaterialSource;
 boxn: integer ;
 box : array of TCube ;
 
implementation
 
{$R *.fmx}
 
procedure TForm1.Form3DShow(Sender: TObject);
var
 i : integer ;
begin
 mtrn := 0 ;
 boxn := 0 ;
 for i := 0 to 99 do begin
  Inc(mtrn);
  if ((mtrn mod 20) = 1) then
   SetLength(mtr, mtrn+19);
  mtr[mtrn-1] := nil ;
  try
   mtr[mtrn-1] := TLightMaterialSource.Create(Self);
   mtr[mtrn-1].Name := 'Mtr' + IntToStr(mtrn) ;
   mtr[mtrn-1].Parent := Form1 ;
   mtr[mtrn-1].Diffuse := $FF000000 + Cardinal(Random(256)
          + Random(256)*256 + Random(256)*65536);
  except
   ;
  end;
  
  Inc(boxn);
  if ((boxn mod 20) = 1) then
   SetLength(box, boxn+19);
  box[boxn-1] := nil ;
  try
   box[boxn-1] := TCube.Create(Self);
   box[boxn-1].Visible := False ;
   box[boxn-1].Name := 'Cube' + IntToStr(boxn) ;
   box[boxn-1].Tag := boxn ;
   box[boxn-1].MaterialSource := mtr[mtrn-1] ;
   box[boxn-1].Parent := Form1 ;
   box[boxn-1].Position.X := (i mod 10)*1.5 - 6.75 ;
   box[boxn-1].Position.Y := 0 ;
   box[boxn-1].Position.Z := (i div 10)*1.5 - 6.75 ;
   box[boxn-1].Width := 1 ;
   box[boxn-1].Height:= 1 ;
   box[boxn-1].Depth := 1 ;
   box[boxn-1].Visible := True ;
  except
   ;
  end;
 end;
end;
 
更に、カメラとタイマーを配置し、カメラを移動させる事により簡易のアニメーションをさせるようにしてみます。 カメラの高さは、トラックバー TrackBar1 によって変えられるようにしておきます。トラックバーは3Dレイヤの上に配置しておきます。

 
ソース・実行プログラムのダウンロード(ZIP圧縮;3,248KB)
 
 
バッチファイル
BASIC
C言語のお勉強
拡張子な話
DOSプログラム
Delphi
>Dehi入門編
>Delphi2010
>DelphiXE3
▲2014/04/10
 2014/04/20
▼2014/04/30
 
シェアウェア
Script!World
データベース
 
お問い合わせ 
本サイトはリンクフリーです
リンクバナー
(C)Copyright 1999-2015. By AFsoft All Rights Reserved.