Durchführen einfacher Anpassungen für ein importiertes 3D-Modell

Aus Appmethod Topics
Wechseln zu: Navigation, Suche

Nach oben zu Tutorial: Importieren von 3D-Modellen (FireMonkey)

In diesem Tutorial wird gezeigt, wie die Skalierung, der Drehwinkel, das Licht und die Position eines importierten 3D-Modells geändert werden.

Anpassen des importierten 3D-Modells

Führen Sie nach Erstellen des Formulars und Importieren des gewünschten 3D-Modells in das Formular (siehe Importieren eines 3D-Modells in eine FireMonkey-Anwendung) die folgenden Schritte zum Anpassen des Modells aus.

Verwenden des Formular-Designers

Sie können die Position und die Drehwinkel im FireMonkey-Formular-Designer mithilfe des blauen Steuerungswürfels des Modells anpassen. Der Steuerungswürfel wird angezeigt, wenn das Modell in der Strukturansicht ausgewählt ist:

Control Cub.png

  • Sie können das Modell verschieben, indem Sie den Steuerungswürfel per Drag&Drop verschieben.
  • Mit den 3 blauen Griffen des Steuerungswürfels können Sie importierte Modell drehen. Jeder Griff dreht das Modell in der zugeordneten Ebene im Raum (X-, Y- oder Z-Vertex). Ein aktiver Griff (ein Griff, auf den Sie geklickt haben) wird rot dargestellt.

Verwenden des Objektinspektors

Sie können des Modell beim Entwurf durch Setzen von Eigenschaften im Objektinspektor wie folgt skalieren, verschieben und drehen:

  • Skalieren Sie das importierte Modell durch Festlegen aller Koordinaten der Eigenschaft Scale für jede Ebene (X, Y, Z).
  • Verschieben Sie das importierte Modell durch Festlegen aller Koordinaten der Eigenschaft Position für jede Ebene (X, Y, Z).
  • Ändern Sie die Drehwinkel durch Festlegen der RotationAngle-Eigenschaften des Modells.

3d model properties.png

Programmgesteuertes Anpassen der Eigenschaften des 3D-Modells

  1. Wenn Sie eine Geräteübergreifende 3D-Anwendung verwenden, führen Sie die Schritte in Erstellen einer 2D-Benutzeroberfläche in einer 3D-Anwendung aus, um dem Formular 2D-Steuerelemente hinzuzufügen.
  2. Fügen Sie dem Formular die folgenden 2D-Komponenten hinzu:
    • TGroupBox mit 3 TLabel- und 3 TTrackBar-Komponenten, um die Drehwinkel für jede Ebene zu ändern. Ändern Sie die Eigenschaft Text für die TGroupBox in Rotate model und für die drei Beschriftungen in X, Y und Z.
    • TGroupBox mit 3 TLabel-Komponenten, 3 TTrackBar-Komponenten zum Ändern der Skalierungen des Modells für jede Achse und eine TCheckBox zum Auswählen, ob das Verhältnis beim Skalieren des Modells beibehalten werden soll. Ändern Sie die Eigenschaft Text für die TGroupBox in Scale model, für die drei Beschriftungen in X, Y und Z und für die TCheckBox in Preserve aspect.
    • TButton zum Ein- oder Ausschalten des Lichtes für die Szene. Ändern Sie die Eigenschaft Text der Schaltfläche in ON.
    Das Formular sollte wie folgt aussehen:
    Form for customize a 3D imported model.png
  3. Setzen Sie im Objektinspektor folgende Eigenschaften:
    • Die Eigenschaft Max für jede TTrackBar-Komponente im Gruppenfeld Rotate model auf 360.
    • Die Eigenschaft Max für jede TTrackBar-Komponente im Gruppenfeld Scale model auf 2.
    • Die Eigenschaft Frequency für jede TTrackBar-Komponente im Gruppenfeld Scale model auf 0.01.
  4. Doppelklicken Sie auf jede TTrackBar-Komponente, um die OnChange-Ereignisbehandlungsroutinen zuzuordnen, und doppelklicken Sie auf die Schaltfläche, um die gewünschte Funktionalität hinzuzufügen.

Implementierung der Schieberegler in "Rotate model"

// Delphi version of the implementation
 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++ version of the implementation
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.pngRoated model2.png

Implementierung der Schieberegler in "Scale model"

// Delphi version of the implementation
 procedure TForm1.TrackBar4Change(Sender: TObject);
begin
 if(CheckBox1.IsChecked)then
 begin
   //uses the same scale for all 3 planes
   Model3D1.Scale.X:=TrackBar4.Value;
   Model3D1.Scale.Y:=TrackBar4.Value;
   Model3D1.Scale.Z:=TrackBar4.Value;
   //updates the values of the Y and Z trackbars
   TrackBar5.Value:=TrackBar4.Value;
   TrackBar6.Value:=TrackBar4.Value;
end
else
begin
   //scales only the model on the X axis
  Model3D1.Scale.X:=TrackBar4.Value;
end;
 
end;
 
procedure TForm1.TrackBar5Change(Sender: TObject);
begin
if(CheckBox1.IsChecked)then
 begin
   //uses the same scale for all 3 planes
   Model3D1.Scale.X:=TrackBar5.Value;
   Model3D1.Scale.Y:=TrackBar5.Value;
   Model3D1.Scale.Z:=TrackBar5.Value;
   //updates the values of the X and Z trackbars
   TrackBar4.Value:=TrackBar5.Value;
   TrackBar6.Value:=TrackBar5.Value;
 end
 else
 begin
    //scales only the model on the Y axis
   Model3D1.Scale.Y:=TrackBar5.Value;
 end;
end;
 
procedure TForm1.TrackBar6Change(Sender: TObject);
begin
if(CheckBox1.IsChecked)then
 begin
  //uses the same scale for all 3 planes
   Model3D1.Scale.X:=TrackBar6.Value;
   Model3D1.Scale.Y:=TrackBar6.Value;
   Model3D1.Scale.Z:=TrackBar6.Value;
   //updates the values of the X and Y trackbars
   TrackBar4.Value:=TrackBar6.Value;
   TrackBar5.Value:=TrackBar6.Value;
 end
 else
 begin
   //scales only the model on the z axis
   Model3D1.Scale.Z:=TrackBar6.Value;
 end;
end;
 // C++ version of the implementation
void __fastcall TForm3D1::TrackBar4Change(TObject *Sender)
{
     if(CheckBox1->IsChecked
     {
        //uses the same scale for all 3 planes
        Model3D1->Scale->X=TrackBar4->Value;
        Model3D1->Scale->Y=TrackBar4->Value;
        Model3D1->Scale->Z=TrackBar4->Value;
        //updates the values of the Y and Z trackbars
        TrackBar5->Value=TrackBar4->Value;
        TrackBar6->Value=TrackBar4->Value;   
     }
     else
       //scales only the model on the X axis
       Model3D1->Scale->X=TrackBar4.Value;
}
 
void __fastcall TForm3D1::TrackBar5Change(TObject *Sender)
{
     if(CheckBox1->IsChecked
     {
        //uses the same scale for all 3 planes
        Model3D1->Scale->X=TrackBar5->Value;
        Model3D1->Scale->Y=TrackBar5->Value;
        Model3D1->Scale->Z=TrackBar5->Value;
        //updates the values of the X and Z trackbars
        TrackBar4->Value=TrackBar5->Value;
        TrackBar6->Value=TrackBar5->Value;   
     }
     else
       //scales only the model on the Y axis
       Model3D1->Scale->Y=TrackBar5.Value;
}
 
void __fastcall TForm3D1::TrackBar6Change(TObject *Sender)
{
     if(CheckBox1->IsChecked
     {
        //uses the same scale for all 3 planes
        Model3D1->Scale->X=TrackBar6->Value;
        Model3D1->Scale->Y=TrackBar6->Value;
        Model3D1->Scale->Z=TrackBar6->Value;
        //updates the values of the X and Y trackbars
        TrackBar4->Value=TrackBar6->Value;
        TrackBar5->Value=TrackBar6->Value;   
     }
     else
       //scales only the model on the Z axis
       Model3D1->Scale->Z=TrackBar6.Value;
}

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

Implementierung der Schaltfläche zum Ein- und Ausschalten des Lichtes für die Szene

// Delphi version of the implementation
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++ version of the implementation
 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.pngForm for customize a 3D imported model light off.png

Zurück

Siehe auch