Durchführen einfacher Anpassungen für ein importiertes 3D-Modell
Nach oben zu Tutorial: Importieren von 3D-Modellen (FireMonkey)
Inhaltsverzeichnis
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:
- 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.
Programmgesteuertes Anpassen der Eigenschaften des 3D-Modells
- 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.
- 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:
-
- Setzen Sie im Objektinspektor folgende Eigenschaften:
- 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;
}
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;
}
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";
}
}
[[