インポートした 3D モデルに簡単なカスタマイズを適用する

提供: Appmethod Topics
移動先: 案内検索

チュートリアル:3D モデルをインポートする(FireMonkey) への移動

このチュートリアルでは、インポートした 3D モデルの倍率、回転角、光源、位置を変更する方法を示します。

インポートした 3D モデルの調整

フォームを作成し必要な 3D モデルをフォームにインポート(「FireMonkey アプリケーションに 3D モデルをインポートする」を参照)したら、以下の手順に従ってモデルを調整します。

フォーム デザイナを使用する

モデルに付加された青い制御キューブを使って、FireMonkey のフォーム デザイナで位置と回転角を調整できます。制御キューブは、モデルが[構造]ビューで選択されたときに表示されます。

Control Cub.png

  • モデルを削除するには、制御キューブでドラッグ アンド ドロップ操作を実行します。
  • インポートしたモデルを回転させるには、制御キューブの 3 つの青いハンドルを使用します。各ハンドルでは、空間内の関連する平面内で(つまり、x、y、z 軸の周りに)モデルを回転できます。ハンドルをクリックすると、その色が赤になり、アクティブ ハンドルであることを示します。

[オブジェクト インスペクタ]を使用する

[オブジェクト インスペクタ]で以下のようにプロパティを設定することで、設計時にモデルの拡大/縮小、移動、回転を行えます。

  • インポートしたモデルを拡大/縮小するには、各平面に関連した Scale プロパティの各座標(X、Y、Z)を設定します。
  • モデルを移動するには、各平面に関連した Position プロパティの各座標(X、Y、Z)を設定します。
  • 回転角を変更するには、モデルの RotationAngle プロパティを設定します。

3d model properties.png

3D モデルのプロパティをプログラムで調整する

  1. 3D マルチデバイス アプリケーションを使用している場合は、「3D アプリケーション内に 2D インターフェイスを作成する」で説明している手順に従って、フォームに 2D コントロールを追加します。
  2. フォームに以下の 2D コンポーネントを追加します。
    • 3 つの TLabel と、各平面での回転角を変更するための 3 つの TTrackBar を持つ TGroupBoxText プロパティを、TGroupBox については Rotate model に変更し、3 つのラベルについては XYZ に変更します。
    • 3 つの TLabel、各軸でのモデルの倍率を変更するための 3 つの TTrackBar、モデルの拡大/縮小時にアスペクト比を保存するかどうかを選択するための TCheckBox を持つ TGroupBoxText プロパティを、TGroupBox については Scale model に変更し、3 つのラベルについては XYZ に変更し、TCheckBox については Preserves aspect に変更します。
    • シーンでの光源のオン/オフを切り替えるための TButton。このボタンの Text プロパティを ON に変更します。
    フォームは次のようになります。
    Form for customize a 3D imported model.png
  3. [オブジェクト インスペクタ]で以下を行います。 :
    • [Rotate model]グループ ボックスの各 TTrackBarMax プロパティを 360 に設定します。
    • [Scale model]グループ ボックスの各 TTrackBarMax プロパティを 2 に設定します。
    • [Scale model]グループ ボックスの各 TTrackBarFrequency プロパティを 0.01 に設定します。
  4. TTrackBar をダブルクリックして OnChange イベントのハンドラを付加し、ボタンをダブルクリックして機能を追加します。

[Rotate model]グループ ボックスのトラックバーの実装

// Delphi 版の実装
 procedure TForm1.TrackBar1Change(Sender: TObject);
begin
   Model3D1.RotationAngle.X:=TrackBar1.Value;
end;

procedure TForm1.TrackBar2Change(Sender: TObject);
begin
   Model3D1.RotationAngle.Y:=TrackBar2.Value;
end;

procedure TForm1.TrackBar3Change(Sender: TObject);
begin
   Model3D1.RotationAngle.Z:=TrackBar3.Value;
end;
 // C++ 版の実装
void __fastcall TForm3D1::TrackBar1Change(TObject *Sender)
{
     Model3D1->RotationAngle->X=TrackBar1->Value;
}

void __fastcall TForm3D1::TrackBar2Change(TObject *Sender)
{
     Model3D1->RotationAngle->Y=TrackBar2->Value;
}

void __fastcall TForm3D1::TrackBar3Change(TObject *Sender)
{
     Model3D1->RotationAngle->Z=TrackBar3->Value;
}

Roated model1.png Roated model2.png

[Scale model]グループ ボックスのトラックバーの実装

// Delphi 版の実装
 procedure TForm1.TrackBar4Change(Sender: TObject);
begin
 if(CheckBox1.IsChecked)then
 begin
   // 3 つのすべての平面(X、Y、Z)に同じ倍率を使用する
   Model3D1.Scale.X:=TrackBar4.Value;
   Model3D1.Scale.Y:=TrackBar4.Value;
   Model3D1.Scale.Z:=TrackBar4.Value;
   // Y と Z のトラックバーの値を更新する
   TrackBar5.Value:=TrackBar4.Value;
   TrackBar6.Value:=TrackBar4.Value;
end
else
begin
   // X 軸上のモデルのみ拡大/縮小する
  Model3D1.Scale.X:=TrackBar4.Value;
end;

end;

procedure TForm1.TrackBar5Change(Sender: TObject);
begin
if(CheckBox1.IsChecked)then
 begin
   // 3 つのすべての平面(X、Y、Z)に同じ倍率を使用する
   Model3D1.Scale.X:=TrackBar5.Value;
   Model3D1.Scale.Y:=TrackBar5.Value;
   Model3D1.Scale.Z:=TrackBar5.Value;
   // X と Z のトラックバーの値を更新する
   TrackBar4.Value:=TrackBar5.Value;
   TrackBar6.Value:=TrackBar5.Value;
 end
 else
 begin
    // Y 軸上のモデルのみ拡大/縮小する
   Model3D1.Scale.Y:=TrackBar5.Value;
 end;
end;

procedure TForm1.TrackBar6Change(Sender: TObject);
begin
if(CheckBox1.IsChecked)then
 begin
  // 3 つのすべての平面(X、Y、Z)に同じ倍率を使用する
   Model3D1.Scale.X:=TrackBar6.Value;
   Model3D1.Scale.Y:=TrackBar6.Value;
   Model3D1.Scale.Z:=TrackBar6.Value;
   // X と Y のトラックバーの値を更新する
   TrackBar4.Value:=TrackBar6.Value;
   TrackBar5.Value:=TrackBar6.Value;
 end
 else
 begin
   // Z 軸上のモデルのみ拡大/縮小する
   Model3D1.Scale.Z:=TrackBar6.Value;
 end;
end;
 // C++ 版の実装
void __fastcall TForm3D1::TrackBar4Change(TObject *Sender)
{
     if(CheckBox1->IsChecked
     {
        // 3 つのすべての平面(X、Y、Z)に同じ倍率を使用する
        Model3D1->Scale->X=TrackBar4->Value;
        Model3D1->Scale->Y=TrackBar4->Value;
        Model3D1->Scale->Z=TrackBar4->Value;
        // Y と Z のトラックバーの値を更新する
        TrackBar5->Value=TrackBar4->Value;
        TrackBar6->Value=TrackBar4->Value;   
     }
     else
       // X 軸上のモデルのみ拡大/縮小する
       Model3D1->Scale->X=TrackBar4.Value;
}

void __fastcall TForm3D1::TrackBar5Change(TObject *Sender)
{
     if(CheckBox1->IsChecked
     {
        // 3 つのすべての平面(X、Y、Z)に同じ倍率を使用する
        Model3D1->Scale->X=TrackBar5->Value;
        Model3D1->Scale->Y=TrackBar5->Value;
        Model3D1->Scale->Z=TrackBar5->Value;
        // X と Z のトラックバーの値を更新する
        TrackBar4->Value=TrackBar5->Value;
        TrackBar6->Value=TrackBar5->Value;   
     }
     else
       // Y 軸上のモデルのみ拡大/縮小する
       Model3D1->Scale->Y=TrackBar5.Value;
}

void __fastcall TForm3D1::TrackBar6Change(TObject *Sender)
{
     if(CheckBox1->IsChecked
     {
        // 3 つのすべての平面(X、Y、Z)に同じ倍率を使用する
        Model3D1->Scale->X=TrackBar6->Value;
        Model3D1->Scale->Y=TrackBar6->Value;
        Model3D1->Scale->Z=TrackBar6->Value;
        // X と Y のトラックバーの値を更新する
        TrackBar4->Value=TrackBar6->Value;
        TrackBar5->Value=TrackBar6->Value;   
     }
     else
       // Z 軸上のモデルのみ拡大/縮小する
       Model3D1->Scale->Z=TrackBar6.Value;
}

Scaled model preserving aspect.png Scaled model nit preserving aspect.png

シーンにおける光源をオン/オフするためのボタンの実装

// Delphi 版の実装
procedure TForm1.Button1Click(Sender: TObject);
begin
if(Button1.Text='OFF')then
     begin
       Light1.Enabled:=false;
       Button1.Text:='ON'
     end
     else
     begin
       Light1.Enabled:=true;
       Button1.Text:='OFF'
     end;
end;
 // C++ 版の実装
void __fastcall TForm3D1::Button1Click(TObject *Sender)
{
     if(Button1->Text=="OFF"){
       Light1->Enabled=False;
       Button1->Text="ON";
     }
     else {
       Light1->Enabled=True;
       Button1->Text="OFF";
     }
}
[[

Form for customize a 3D imported model.png Form for customize a 3D imported model light off.png

前のトピック

関連項目