Application de personnalisations simples à un modèle 3D importé

De RAD Studio
Aller à : navigation, rechercher

Remonter à Tutoriel : Importation de modèles 3D (FireMonkey)

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 :

Control Cub.png

  • 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.

3d model properties.png

Ajuster par programme les propriétés du modèle 3D

  1. 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.
  2. 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 :
    Form for customize a 3D imported model.png
  3. Dans l'inspecteur d'objets, définissez les propriétés suivantes :
    • La propriété Max de chaque TTrackBar de la zone de groupe Rotate the model sur 360.
    • La propriété Max de chaque TTrackBar de la zone de groupe Scale the model sur 2.
    • La propriété Frequency de chaque TTrackBar de la zone de groupe Scale the model sur 0.01.
  4. 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;
 }

Roated model1.pngRoated model2.png

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;
 }

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

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";
      }
 }
 [[

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

Précédent

Voir aussi