Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Next revisionBoth sides next revision
0.8.3:models [2022/04/08 13:38] – [Loading a model from at runtime] admin0.8.3:models [2022/04/25 11:25] – [Instanced Rendering] admin
Line 21: Line 21:
 | OBJ         | ✔             | ✔                 | ✘          | ✘      | ✘       | ✘      | ✘       | ✘      |           | only ascii format| | OBJ         | ✔             | ✔                 | ✘          | ✘      | ✘       | ✘      | ✘       | ✘      |           | only ascii format|
 | STL         | ✔             |✘                   | ✘          | ✘     | ✘        | ✘      | ✘       | ✔     | 1.0       | ascii and binary format, Standard + Solidworks-Format| | STL         | ✔             |✘                   | ✘          | ✘     | ✘        | ✘      | ✘       | ✔     | 1.0       | ascii and binary format, Standard + Solidworks-Format|
-| FBX         | ✔             | ✔                 ✘          | ✘      | ✘       | ✘      | ✘       | ✘      | 7.1 - 7.5 | only binary (v0.8.3.1931+). Animation import for 7.3-7.4 validated, 7.5 not working properly yet|+| FBX         | ✔             | ✔                 ✔          | ✘      | ✘       | ✘      | ✘       | ✘      | 7.1 - 7.5 | only binary (v0.8.3.1931+). Animation import for 7.3-7.4 validated, 7.5 not working properly yet|
 | X3D         | ✔             | ✔                 | ✔         | ✘      | ✘       | ✘      | ✘       | ✘      |           | deprecated | | X3D         | ✔             | ✔                 | ✔         | ✘      | ✘       | ✘      | ✘       | ✘      |           | deprecated |
 | glTF        | ✔             |✔                  | ✘          | ✘      | ✘       | ✘      | ✘       | ✘      | 2.0       | only glTF json format, not glb| | glTF        | ✔             |✔                  | ✘          | ✘      | ✘       | ✘      | ✘       | ✘      | 2.0       | only glTF json format, not glb|
Line 150: Line 150:
 You can also take advantage of the designtime mechanisms at runtime. You can also take advantage of the designtime mechanisms at runtime.
  
-==== Loading a model from package ==== 
  
-<file pascal Form1.pas> 
-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.PLY.Loader, 
-  Gorilla.SKP.Loader, 
-  Gorilla.AssetsManager, 
-  Gorilla.Model; 
-   
-[...] 
- 
-var FAssetsManager : TGorillaAssetsManager; 
-       FPackage : TGorillaAssetsPackage; 
-       FModel : TGorillaModel; 
- 
-// in our form (TForm1) we added a field named "FModel" 
-procedure TForm1.FormCreate(Sender: TObject); 
-var LPath : String; 
-begin 
-  // setup the assets manager and load an existing package from file 
-  FAssetsManager := TGorillaAssetsManager.Create(Self); 
-  FPackage := FAssetsManager.LoadPackageFromFile('{HOME}mypackage.zip'); 
-  FPackage.DisplayName := 'MyPackage'; 
-   
-  // prepare the model for loading from package 
-  FModel := TGorillaModel.Create(GorillaViewport1); 
-  FModel.Parent := GorillaViewport1; 
-   
-  // start linking to assets manager like at designtime 
-  FModel.AssetsManager := FAssetsManager; 
-  FModel.PackageName := 'MyPackage'; 
-  FModel.Source := 'myfile.dae'; 
-end; 
-</file> 
 ==== Loading a new model from file ==== ==== Loading a new model from file ====
  
Line 229: Line 188:
  
  
-==== Loading a model from file into an existing TGorillaModel instance ====+==== Loading 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. In case you've dragged a TGorillaModel component onto your viewport, you can load the model by the following method.
Line 276: Line 235:
 Only then the format loader is able to load the specific file.  Only then the format loader is able to load the specific file. 
  
 +
 +==== Loading a model from package ====
 +
 +To adopt the behaviour used in the IDE at design time, you can load model data from assets package
 +also at runtime by the following method.
 +
 +<file pascal Form1.pas>
 +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.PLY.Loader,
 +  Gorilla.SKP.Loader,
 +  Gorilla.AssetsManager,
 +  Gorilla.Model;
 +  
 +[...]
 +
 +var FAssetsManager : TGorillaAssetsManager;
 +    FPackage : TGorillaAssetsPackage;
 +    FModel : TGorillaModel;
 +
 +// in our form (TForm1) we added a field named "FModel"
 +procedure TForm1.FormCreate(Sender: TObject);
 +begin
 +  // setup the assets manager and load an existing package from file
 +  FAssetsManager := TGorillaAssetsManager.Create(Self);
 +  FPackage := FAssetsManager.LoadPackageFromFile('C:\Temp\mypackage.zip');
 +  FPackage.DisplayName := 'MyPackage';
 +  
 +  // prepare the model for loading from package
 +  FModel := TGorillaModel.Create(GorillaViewport1);
 +  FModel.Parent := GorillaViewport1;
 +  
 +  // start linking to assets manager like at designtime
 +  FModel.AssetsManager := FAssetsManager;
 +  FModel.PackageName := 'MyPackage';
 +  FModel.Source := 'myfile.dae';
 +end;
 +</file>
 +
 +==== Loading a model from source ====
 +
 +This is another way to load model data from file at runtime.
 +The difference to //LoadFromFile()// and //LoadNewModelFromFile()// is, that it will store model data in the BinaryData property too.
 +
 +<file pascal Form1.pas>
 +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.PLY.Loader,
 +  Gorilla.SKP.Loader,
 +  Gorilla.AssetsManager,
 +  Gorilla.Model;
 +  
 +[...]
 +
 +var FModel : TGorillaModel;
 +
 +// in our form (TForm1) we added a field named "FModel"
 +procedure TForm1.FormCreate(Sender: TObject);
 +begin  
 +  // prepare the model for loading from package
 +  FModel := TGorillaModel.Create(GorillaViewport1);
 +  FModel.Parent := GorillaViewport1;
 +  FModel.Source := 'c:\Temp\myfile.dae';
 +end;
 +</file>
  
 ===== Instancing / Model duplication ===== ===== Instancing / Model duplication =====
 +
 +==== Instanced Rendering ====
 +
 +Since 0.8.3.2265 instanced rendering of the same mesh for x-times was implemented.
 +
 +Use this method to render for example grass or trees. It is not recommended to use it for animated charaters,
 +because they would be rendered the same (with the same animation frame).
 +
 +You can simply setup instanced rendering in your TGorillaModel or TGorillaMesh object.
 +
 +<file pascal>
 +/// we create 4 instances in a row
 +GorillaModel1.AddInstance(TMatrix3D.CreateTranslation(Point3D(-10, 0, 0)));
 +GorillaModel1.AddInstance(TMatrix3D.CreateTranslation(Point3D(-5, 0, 0)));
 +GorillaModel1.AddInstance(TMatrix3D.CreateTranslation(Point3D(5, 0, 0)));
 +GorillaModel1.AddInstance(TMatrix3D.CreateTranslation(Point3D(10, 0, 0)));
 +
 +/// afterwards we can modify a specific instance
 +var LTransf : TMatrix3D;
 +LTransf := TMatrix3D.CreateScaling(Point3D(2, 2, 2));
 +LTransf := LTransf * TMatrix3D.CreateRotationY(DegToRad(90));
 +LTransf := LTransf * TMatrix3D.CreateScaling(Point3D(2, 2, 2));
 +
 +GorillaModel1.Instances[2] := LTransf;
 +</file>
 +
 +
 +==== Instancing by TModelDef ====
  
 Since 0.8.3.1966+ we've refactored the way to instanciate models. The previous method was incomplete in handling animated models. Since 0.8.3.1966+ we've refactored the way to instanciate models. The previous method was incomplete in handling animated models.