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
1.0.0:custommesh [2023/03/23 13:48] – [Example] admin1.0.0:custommesh [2023/03/23 14:01] (current) – [Create FMX Components from Definition] admin
Line 137: Line 137:
 |function AddTriangle(const AIndexOffset : Integer; const ATriangle : TTriangleID; const AVertices : TList<TVertexData>; const AIndices : TList<TTriangleIndex>; const AVertexOrder : TVertexOrder = TVertexOrder.CCW) : Integer;|Adds triangle vertices and indices to AVertices and AIndices based on the index values inside of TTriangleID VertexData values are taken from Cache.PositionSource and so on...| |function AddTriangle(const AIndexOffset : Integer; const ATriangle : TTriangleID; const AVertices : TList<TVertexData>; const AIndices : TList<TTriangleIndex>; const AVertexOrder : TVertexOrder = TVertexOrder.CCW) : Integer;|Adds triangle vertices and indices to AVertices and AIndices based on the index values inside of TTriangleID VertexData values are taken from Cache.PositionSource and so on...|
 |function AddPolygon(const AIndexOffset : Integer; const APolygon : TPolygonID; const AVertices : TList<TVertexData>; const AIndices : TList<TTriangleIndex>; const AVertexOrder : TVertexOrder = TVertexOrder.CCW) : Integer;|Adds polygon vertices and indices to AVertices and AIndices based on the index values inside of TPolygonID VertexData values are taken from Cache.PositionSource and so on... //__CAUTION:__ this method triangulates the polygon automatically!//| |function AddPolygon(const AIndexOffset : Integer; const APolygon : TPolygonID; const AVertices : TList<TVertexData>; const AIndices : TList<TTriangleIndex>; const AVertexOrder : TVertexOrder = TVertexOrder.CCW) : Integer;|Adds polygon vertices and indices to AVertices and AIndices based on the index values inside of TPolygonID VertexData values are taken from Cache.PositionSource and so on... //__CAUTION:__ this method triangulates the polygon automatically!//|
-=== Example ===+ 
 +==== Example ====
  
 In this detailed example, let's create a mesh the same like in the "fast-way" example above. In this detailed example, let's create a mesh the same like in the "fast-way" example above.
Line 145: Line 146:
 In the first step we're going to show the usage of TVertexCache to setup mesh data. In the first step we're going to show the usage of TVertexCache to setup mesh data.
  
-== Adding MeshData ==+=== Adding MeshData ===
  
 <file pascal> <file pascal>
Line 285: Line 286:
 </file> </file>
  
-==== Add Hierarchy ====+=== Add Hierarchy ===
  
 Since v1.0 most objects in DefTypes are inherited from TTransformDef.   Since v1.0 most objects in DefTypes are inherited from TTransformDef.  
Line 327: Line 328:
  
  
-===Vertex Groups ====+=== How To Use Vertex Groups ===
  
 VertexGroups are helper structures referring to an owner mesh, which holds original vertex data and complete indices list, while this structure only holds a separated index source for partially rendering a mesh. VertexGroups are helper structures referring to an owner mesh, which holds original vertex data and complete indices list, while this structure only holds a separated index source for partially rendering a mesh.
Line 351: Line 352:
 end; end;
 </file> </file>
-==== Add Material ====+=== Add Material ===
  
 To expand the dynamic model setup, let's add a material to our sub-mesh. To expand the dynamic model setup, let's add a material to our sub-mesh.
Line 380: Line 381:
 </file> </file>
  
-==== Add Animation ====+=== Add A Simple Animation ===
  
 Adding animations can become a very challenging part due to complexity. Adding animations can become a very challenging part due to complexity.
Line 432: Line 433:
  
  
-==== Add Armature & SkinController ====+=== Add Armature & SkinController ===
  
 To make skin- or skeleton-animations possible you will need an armature with a hierarchy of joints representing the internal skeleton of a body. To make skin- or skeleton-animations possible you will need an armature with a hierarchy of joints representing the internal skeleton of a body.
Line 489: Line 490:
   LCtrl.Skin.Skeletons.Add(LJtRef);   LCtrl.Skin.Skeletons.Add(LJtRef);
  
-  // We have to link all relevant joint to the skin and add weights and joint-indices+  // We have to link all relevant joint to the skin and add weights and vertex-indices 
 +  // "Weights" and "Indices" arrays has to have the same size. 
 +  // The sum of all weights (over all joints) for a specific vertex has to be 1.0!
   LJtRef := LCtrl.Skin.LinkJoint(Result.Root);   LJtRef := LCtrl.Skin.LinkJoint(Result.Root);
   LJtRef.Weights := [0.75, 0.75, 0.75, 0.75, 0.25, 0.25, 0.25, 0.25, 0, 0, 0, 0];   LJtRef.Weights := [0.75, 0.75, 0.75, 0.75, 0.25, 0.25, 0.25, 0.25, 0, 0, 0, 0];
Line 517: Line 520:
 </file> </file>
  
-To animate the armature and it's necessary to have compatible animation stages and interpolators.+=== Add a Skin-Animation ===
  
-Regarding our skin-animation example, the code could look something like this:+To animate the armature it's necessary to have compatible animation stages and interpolators. 
 + 
 +Related to our armature and bones (joints) before, the code could look something like this:
  
 <file pascal> <file pascal>
Line 603: Line 608:
 __NOTICE:__ You will need a stage for each joint to be modified during the animation. __NOTICE:__ You will need a stage for each joint to be modified during the animation.
  
-==== Create FMX Components from Definition ====+=== Create FMX Components from Definition === 
 + 
 +After we have build our TModelDef object, we can visualize it easily by pushing it into the **TGorillaModel.LoadNewModelFromDef()** method. 
 +It will take care of all necessary actions and will automatically build all FMX components for you.
  
 <file pascal> <file pascal>