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:physics [2023/03/16 09:04] – [Colliders] admin1.0.0:physics [2023/03/16 14:18] (current) – [Override Collider-Registration] admin
Line 134: Line 134:
  
 Derived components of **TControl3D**, **TCustomMesh** and **TGorillaMesh** are supported for colliders. But for mesh or terrain colliders only TCustomMesh and TGorillaMesh/TGorillaModel are allowed. Other components do not have any vertex information. Derived components of **TControl3D**, **TCustomMesh** and **TGorillaMesh** are supported for colliders. But for mesh or terrain colliders only TCustomMesh and TGorillaMesh/TGorillaModel are allowed. Other components do not have any vertex information.
 +
 +==== ColliderSettings / ColliderPrefab ====
 +
 +Registering a collider for a 3D object expects collider settings (TGorillaColliderSettings) or a collider prefab (TGorillaPhysicsColliderPrefab).
 +
 +The collider prefab is a collection item for design time usage. It will automatically register a collider settings (TGorillaColliderSettings) for you when the physics system getting started.
 +
 +While the collider settings (TGorillaColliderSettings) is the core structure for collider registration.
 +
 +It gives you a number of possible settings:
 +
 +^Property ^Description^
 +|_Type|TGorillaPhysicsBodyType (TQ3BodyType.eStaticBody, TQ3BodyType.eDynamicBody or TQ3BodyType.eKinematicBody)|
 +|LockRotAxisX|Locked rotation on the x axis.|
 +|LockRotAxisY|Locked rotation on the y axis.|
 +|LockRotAxisZ|Locked rotation on the z axis.|
 +|LockMoveAxisX|Locked translation on the x axis.|
 +|LockMoveAxisY|Locked translation on the y axis.|
 +|LockMoveAxisZ|Locked translation on the z axis.|
 +|LinearDamping|Linear Damping controls how much the physics body or constraint resists translation.|
 +|AngularDamping|Angular Damping controls how much they resist rotating. |
 +|Slop|Additional slop value, which will be added to the computed penetration depth on collision.|
 +|AllowSubColliders|If a object hierarchy is provided as control, it will try to add the same kind of collider for all sub-elements. Caution: This may produce unexpected behaviour especially on dynamic colliders.|
 +|AllowSleep|Allows a body to go in sleeping mode and save resources. By default TRUE.|
 +|Active|Is body enabled for physics computation.|
 +|Data|Setup colliderdata: friction, restitution, density, sensor ...|
 +|Data.Friction|Friction is a force between two surfaces that are sliding, or trying to slide, across each other. For example, when you try to push a book along the floor, friction makes this difficult. Friction always works in the direction opposite to the direction in which the object is moving, or trying to move.|
 +|Data.Restitution|The coefficient of restitution is a measure of how much kinetic energy remains after the collision of two bodies. Its value ranges from 0 to 1.|
 +|Data.Density|It is the mass of a material substance per unit volume.|
 +|Data.Sensor|A sensor is a device that detects and responds to some type of input from the physical environment.|
 ===== Threading ===== ===== Threading =====
  
Line 353: Line 383:
 When you have declared this kind of helper class in your unit, the TGorillaPhysicsSystem component will then show you a new method to be callable "AddInstanceCollider". When you have declared this kind of helper class in your unit, the TGorillaPhysicsSystem component will then show you a new method to be callable "AddInstanceCollider".
  
 +
 +==== Render Colliders ====
 +
 +You can render physics colliders for debugging purposes.
 +
 +The most easy way is to insert a TDummy component into your TGorillaViewport and leave all transformation (position, rotation and scaling) zero, to not affect collider rendering.
 +The add a "OnRender" event with the following code.
 +
 +<file pascal>
 +uses 
 +  Gorilla.Physics.Q3.Renderer;
 +
 +const
 +{$IFDEF DEBUG}
 +  SHOW_PHYSICS_COLLIDERS = true;
 +{$ELSE}
 +  SHOW_PHYSICS_COLLIDERS = false; 
 +{$ENDIF}
 +
 +procedure TForm1.Dummy1Render(Sender: TObject; Context: TContext3D);
 +var LRender : TQ3Render;
 +begin
 +  // Check if we want to see physics colliders
 +  if not SHOW_PHYSICS_COLLIDERS then
 +    Exit;
 +
 +  // Here we render physics colliders for debugging
 +  LRender.Context := Context;
 +  GorillaPhysicsSystem1.Engine.Render(@LRender);
 +end;
 +</file>
  
 Next step: [[fmodaudio|FMOD Audio]] Next step: [[fmodaudio|FMOD Audio]]