This is an old revision of the document!
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 (modified: 2019-09-23)
Format | MeshData | Materials | Animations | Export |
---|---|---|---|---|
G3D | ✔ | ✔ | ✔ | ✔ |
DAE | ✔ | ✔ | ✔ | ✘ |
OBJ | ✔ | ✔ | ✘ | ✘ |
STL | ✔ | ✘ | ✘ | ✔ |
FBX | ✔ | ✔ | ✘ | ✘ |
X3D | ✔ | ✔ | ✔ | ✘ |
glTF | ✔ | ✔ | ✘ | ✘ |
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.
- Form1.pas
uses Gorilla.DefTypes, Gorilla.G3D.Loader, Gorilla.DAE.Loader, Gorilla.OBJ.Loader, Gorilla.STL.Loader, Gorilla.FBX.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 section.
You also can ignore the AssetPckg parameter currently. We will explain assets management in the 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.
- Form1.pas
uses Gorilla.G3D.Loader, Gorilla.DAE.Loader, Gorilla.OBJ.Loader, Gorilla.STL.Loader, Gorilla.FBX.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,…
Only then the format loader is able to load the specific file.
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
<file pascal> 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