Warning: Undefined array key "translationlc" in /usr/www/users/fabook/_diggets/doc/v2/lib/plugins/translation/action.php on line 237

Warning: Cannot modify header information - headers already sent by (output started at /usr/www/users/fabook/_diggets/doc/v2/lib/plugins/translation/action.php:237) in /usr/www/users/fabook/_diggets/doc/v2/inc/Action/Export.php on line 104

Warning: Cannot modify header information - headers already sent by (output started at /usr/www/users/fabook/_diggets/doc/v2/lib/plugins/translation/action.php:237) in /usr/www/users/fabook/_diggets/doc/v2/inc/Action/Export.php on line 104

Warning: Cannot modify header information - headers already sent by (output started at /usr/www/users/fabook/_diggets/doc/v2/lib/plugins/translation/action.php:237) in /usr/www/users/fabook/_diggets/doc/v2/inc/Action/Export.php on line 104
====== Loading models ====== You can find the model component in the toolbar under Gorilla3D > TGorillaModel A TGorillaModel component automatically manages sub-meshes, materials and animations for you. So this is the best component for loading complex mesh data. Every model contains a number of TGorillaMesh instances which holds the vertex data of a specific child mesh. At least one mesh will be available in a valid model. When loading models from file / stream, all materials and animations, defined in the source file / stream, are loaded too. In case you are using explicit animation files (only for Collada DAE format), you need to load them afterwards by AddAnimationFromFile(). A TGorillaModel instance needs to be a child / sub-child of a TGorillaViewport instance, otherwise it will not be displayed. ===== Supported file formats ===== Currently it is allowed to use the following file-formats: G3D, DAE, OBJ, STL, FBX, X3D, glTF (modified: 2020-10-02) ^ Format ^ MeshData ^ Materials ^ Animations ^ Export ^ | G3D | ✔ | ✔ | ✔ | ✔ | | DAE | ✔ | ✔ | ✔ | ✘ | | OBJ | ✔ | ✔ | ✘ | ✘ | | STL | ✔ |✘ | ✘ | ✔ | | FBX | ✔ | ✔ | ✘ | ✘ | | X3D | ✔ | ✔ | ✔ | ✘ | | glTF |✔ |✔ | ✘ | ✘ | | Babylon | ✔ |✔ | ✘ | ✘ | | Sketchfab | ✔ | ✔ | ✘ | ✘ | ===== Loading a new model from file at runtime ===== Creating a model instance at runtime is very easy and often very helpful for creating dynamically loaded scenes. uses Gorilla.DefTypes, Gorilla.G3D.Loader, Gorilla.DAE.Loader, Gorilla.OBJ.Loader, Gorilla.STL.Loader, Gorilla.FBX.Loader, Gorilla.GLTF.Loader, Gorilla.Babylon.Loader, Gorilla.Model; // in our form (TForm1) we added a field named "FModel" procedure TForm1.FormCreate(Sender: TObject); var LPath : String; LAssetPckg : TGorillaAssetPackage; begin LPath := 'c:\my3dfile.dae'; LAssetPckg := nil; FModel := TGorillaModel.LoadNewModelFromFile(FGorilla, LAssetPckg, OpenDialog1.FileName, GORILLA_ANIMATION_CACHING_DEFAULT); FModel.Parent := FGorilla; end; For the moment you can ignore the last parameter "GORILLA_ANIMATION_CACHING_DEFAULT" of the LoadNewModelFromFile() call. We will explain this in the [[animations|Animations]] section. You also can ignore the AssetPckg parameter currently. We will explain assets management in the [[assetsmanager|AssetsManager]] section. ===== Loading a model from file into an existing TGorillaModel instance ===== In case you've dragged a TGorillaModel component onto your viewport, you can load the model by the following method. uses Gorilla.G3D.Loader, Gorilla.DAE.Loader, Gorilla.OBJ.Loader, Gorilla.STL.Loader, Gorilla.FBX.Loader, Gorilla.GLTF.Loader, Gorilla.Babylon.Loader, Gorilla.Model; // in our form (TForm1) we added a field named "FModel" procedure TForm1.FormCreate(Sender: TObject); var LPath : String; LAssetPckg : TGorillaAssetPackage; begin LPath := 'c:\my3dfile.dae'; LAssetPckg := nil; GorillaModel1.LoadFromFile(LAssetPckg, OpenDialog1.FileName, GORILLA_ANIMATION_CACHING_DEFAULT); end; To load a specific file format you need to include the format unit: * Gorilla.G3D.Loader * Gorilla.DAE.Loader * Gorilla.OBJ.Loader * Gorilla.STL.Loader * Gorilla.FBX.Loader * Gorilla.GLTF.Loader * Gorilla.Babylon.Loader * Gorilla.Sketchfab.Loader (uses glTF format) * Gorilla.X3D.Loader * Gorilla.X3DZ.Loader * Gorilla.X3DVZ.Loader Only then the format loader is able to load the specific file. ===== Plugins ===== ==== Sketchfab Plugin ==== Since 0.8.2.1675 we provide a Sketchfab plugin directly by using our loading mechanism. Before implementation you'll need to ensure you've got a valid Sketchfab account with username and password. https://sketchfab.com/ **Remarks:** You'll also need a new clientid and clientsecret for your application. To request those credentials contact support at https://sketchfab.com/developers/oauth#registering-your-app The usage of the plugin is simular to other file formats in Gorilla3D. But instead of using the simple method headers, you'll have to use the extended method call with a TGorillaLoadOptions parameter. // setup loading options to connect to sketchfab LOpts := TGorillaLoadOptions.Create(FUID, '.sketchfab', FPackage); LOpts.FileInfo.OpenFormat := TGorillaFileOpenFormat.fofDownload; LOpts.FileInfo.URL := Gorilla.Sketchfab.Loader.GORILLA_SKETCHFAB_URL; LOpts.FileInfo.ClientId := ; LOpts.FileInfo.ClientSecret := ; LOpts.FileInfo.Username := ; LOpts.FileInfo.Password := ; // set an individual download folder, where data is written to // leave empty to use system temporary folders LOpts.ExtractDirectory := ''; try // try loading sketchfab model FModel := TGorillaModel.LoadNewModelFromFile(GorillaViewport1, LOpts); if Assigned(FModel) then FModel.Parent := GorillaViewport1; except on E:Exception do ShowMessage('Failed to load Sketchfab model: ' + E.Message); end; The plugin will automatically download a zip-archive with a glTF file to your preferred folder ("ExtractDirectory"). On successful download it extracts this data and tries to load the contained model. Before requesting Sketchfab, the loader checks the ExtractDirectory for an already existing download of UID. If a zip and gltf file already exists it will directly load it, instead of downloading again. You have to take care yourself in case a previous download is invalid or decprecated. ===== Exporting a model ===== We provide 2 export formats at the moment: G3D and STL, which are easy to use. ==== G3D Export ==== uses Gorilla.G3D.Exporter; procedure TForm1.MenuItem1Click(Sender: TObject); var LG3DExp : TGorillaG3DExporter; LToBinary : Boolean; LZipped : Boolean; LBeautified : Boolean; begin LToBinary := true; LZipped := true; LBeautified := true; if Assigned(fModel) then begin if SaveDialog1.Execute() then begin LG3DExp := TGorillaG3DExporter.Create(); try if LToBinary then LG3DExp.Format := TGorillaG3DFormat.BSONFormat else LG3DExp.Format := TGorillaG3DFormat.JSONFormat; LG3DExp.Zipped := LZipped; LG3DExp.Beautified := LBeautified; LG3DExp.SaveToFile(fModel.Def as TModelDef, SaveDialog1.FileName); finally FreeAndNil(LG3DExp); end; ShowMessage('File successfully stored:'#13#10+ SaveDialog1.FileName); end; end; end; ==== STL Export ==== uses Gorilla.STL.Exporter; procedure TForm1.MenuItem1Click(Sender: TObject); var LSTLExp : TGorillaSTLExporter; LToBinary : Boolean; LAllowMultipleMeshes : Boolean; LUseMultipleFiles : Boolean; begin // ascii and binary format supported LToBinary := true; // because STL supports only single meshes per file (per default), // we can split up a model with multiple meshes into multiple files LAllowMultipleMeshes := true; // but this exporter also allows to export multiple meshes to a single file // just set UseMultipleFiles to false LUseMultipleFiles := true; if Assigned(FModel) then begin if SaveDialog1.Execute() then begin LSTLExp := TGorillaSTLExporter.Create(); try LSTLExp.Binary := LToBinary; LSTLExp.AllowMultipleMeshes := LAllowMultipleMeshes; LSTLExp.UseMultipleFiles := LUseMultipleFiles; LSTLExp.SaveToFile(FModel.Def as TModelDef, SaveDialog1.FileName); finally FreeAndNil(LSTLExp); end; ShowMessage('File successfully stored:'#13#10+ SaveDialog1.FileName); end; end; end; Next step: [[animations|Animations]]