Application de personnalisations simples à un modèle 3D importé
Remonter à Tutoriel : Importation de modèles 3D (FireMonkey)
Sommaire
Ce tutoriel montre comment modifier l'échelle, l'angle de rotation, la lumière et la position d'un modèle 3D importé.
Ajuster le modèle 3D importé
Après la création de la fiche et l'importation du modèle 3D désiré dans la fiche (voir Importation d'un modèle 3D dans une application FireMonkey), suivez les étapes ci-dessous pour ajuster le modèle.
Utiliser le Concepteur de fiches
Vous pouvez ajuster la position et les angles de rotation dans le Concepteur de fiches FireMonkey en utilisant le cube de contrôle bleu attaché au modèle. Le cube de contrôle apparaît quand le modèle est sélectionné dans la vue Structure :
- Pour déplacer le modèle, effectuez une opération glisser-déposer avec le cube de contrôle.
- Pour pivoter le modèle importé, utilisez les 3 poignées bleues du cube de contrôle. Chaque poignée pivote le modèle dans le plan associé de l'espace (c'est-à-dire, le sommet x, y ou z). Quand vous cliquez sur une poignée, elle devient rouge pour indiquer que c'est la poignée active.
Utiliser l'inspecteur d'objets
Vous pouvez mettre à l'échelle, déplacer et pivoter le modèle à la conception en définissant des propriétés dans l'inspecteur d'objets, comme suit :
- Mettez à l'échelle le modèle importé en définissant chaque coordonnée de la propriété Scale, associée à chaque plan (X, Y, Z).
- Déplacez le modèle en définissant chaque coordonnée de la propriété Position, associée à chaque plan (X, Y, Z).
- Changez les angles de rotation en définissant les propriétés RotationAngle du modèle.
Ajuster par programme les propriétés du modèle 3D
- Si vous utilisez une application FireMonkey 3D, suivez les étapes de la rubrique Création d'une interface 2D dans une application 3D pour ajouter des contrôles 2D à la fiche.
- Ajoutez les composants 2D suivants à la fiche
-
- TGroupBox avec 3 TLabels et 3 TTrackBars pour changer les angles de rotation sur chaque plan. Définissez la propriété Text sur Rotate the model pour le TGroupBox et sur X, Y et Z pour les trois libellés.
- TGroupBox avec 3 TLabels, 3 TTrackBars pour changer les échelles du modèle sur chaque axe, et un TCheckBox pour définir si l'aspect est préservé quand le modèle est mis à l'échelle. Définissez la propriété Text sur Scale the model pour le TGroupBox, sur X, Y et Z pour les 3 libellés, et sur Preserve aspect pour le TCheckBox.
- TButton pour activer ou désactiver la lumière sur la scène. Définissez la propriété Text du bouton sur ON.
- La fiche doit ressembler à ceci :
-
- Dans l'inspecteur d'objets, définissez les propriétés suivantes :
- Double-cliquez sur chaque TTrackBar pour attacher les gestionnaires d'événements OnChange, et double-cliquez sur le bouton pour y ajouter une fonctionnalité.
Implémentation des barres de suivi de la zone de groupe 'Rotate the 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;
}
Implémentation des barres de suivi de la zone de groupe 'Scale the 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;
}
Implémentation du bouton pour ouvrir et fermer la lumière sur la scène
// 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";
}
}
[[