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]]