Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
1.0.0:physics [2023/03/16 09:00] – [Override Collider-Registration] admin | 1.0.0:physics [2023/03/16 14:18] (current) – [Override Collider-Registration] admin | ||
---|---|---|---|
Line 116: | Line 116: | ||
On collider registration you push starting transformation information and shape data to the physics world: | On collider registration you push starting transformation information and shape data to the physics world: | ||
- | * AddBoxCollider() | + | ^Method^ |
- | | + | |procedure |
- | | + | |procedure |
- | | + | |procedure |
- | | + | |procedure |
- | | + | |procedure |
+ | |procedure AddTerrainCollider(const ATerrain : TGorillaMesh; | ||
+ | |procedure | ||
+ | |procedure AddMeshCollider(const AMesh : TGorillaMesh; | ||
From there on the physics controller will compute transformation based on its own universe. | From there on the physics controller will compute transformation based on its own universe. | ||
Line 131: | Line 134: | ||
Derived components of **TControl3D**, | Derived components of **TControl3D**, | ||
+ | |||
+ | ==== 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, | ||
+ | |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: | ||
+ | |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 342: | Line 375: | ||
// Add a sphere collider for each instance with the maximum size of a side as radius | // Add a sphere collider for each instance with the maximum size of a side as radius | ||
+ | // or use another internal registration method, like DoAddBoxCollider, | ||
DoAddSphereCollider(AData, | DoAddSphereCollider(AData, | ||
LTransform, Max(ASize.X, | LTransform, Max(ASize.X, | ||
Line 349: | 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 " | 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 " | ||
+ | |||
+ | ==== 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 " | ||
+ | |||
+ | <file pascal> | ||
+ | uses | ||
+ | Gorilla.Physics.Q3.Renderer; | ||
+ | |||
+ | const | ||
+ | {$IFDEF DEBUG} | ||
+ | SHOW_PHYSICS_COLLIDERS = true; | ||
+ | {$ELSE} | ||
+ | SHOW_PHYSICS_COLLIDERS = false; | ||
+ | {$ENDIF} | ||
+ | |||
+ | procedure TForm1.Dummy1Render(Sender: | ||
+ | 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; | ||
+ | </ | ||
Next step: [[fmodaudio|FMOD Audio]] | Next step: [[fmodaudio|FMOD Audio]] |