# Thread: Newton physics and faces...

1. ## Newton physics and faces...

Hi all,

Yet another question :lol:

Iv choosen to use the Newton dynamics library for collision and physics, how ever i have no idea on how to implement this in to my world structure, i have looked around on the net but they either show how to use it with complete models or with predefined objects.

My world structure mostly consists of faces of course, 2 types i have a simple face, or a wall which consist of 6 faces in a cube shape, and i would like to assign each of these in to newton unless otherwise stated. I looked at some sources but they use the position value, which is fine if i use my simple face class but for my wall class it doesnt have a position for each of the faces.

I was thinking about doing it as the world being a huge model, but i will get problems with moving platforms, doors, and faces i dont want included in the collision detection?!

Secondly how can i go about using newton for stairs and other general actor actions?

Any help will be greatly appreciated thanx

2. ## Newton physics and faces...

for the level, terrain etc you can use a tree collision. but all moving parts of the world must not be included (tree collisions are static)

for other objects, you could use a convex hull

3. ## Newton physics and faces...

Originally Posted by tux
for the level, terrain etc you can use a tree collision. but all moving parts of the world must not be included (tree collisions are static)

for other objects, you could use a convex hull
Hey tux, thanx for the reply,

Ok i have built a function to generate the worlds collision tree from all the faces, a question before i use this:

For a face with 3 points :-
[pascal]
var
vertex: Array [0..2] Of TVertex3f;
begin
vertex[0] := Face.vertex[0];
vertex[1] := Face.vertex[1];
vertex[2] := Face.vertex[2];
NewtonTreeCollisionAddFace(nCollisionTree, 3, @vertex[0], SizeOf(TVertex3f), 1);
end;
[/pascal]

But my face's contain 4 points, and have written it like :-
[pascal]
var
vertex: Array [0..3] Of TVertex3f;
begin
vertex[0] := Face.vertex[0];
vertex[1] := Face.vertex[1];
vertex[2] := Face.vertex[2];
vertex[3] := Face.vertex[3];
NewtonTreeCollisionAddFace(nCollisionTree, 4, @vertex[0], SizeOf(TVertex3f), 1);
end;
[/pascal]

Is this the way to do this?

How do i use the convex hull procedure?

I have an actor mesh which is animated via a skeleton, how will i implement this in, i dont really want to use the sphere because the actors can be of all sorts of shapes and sizes?!

Thanx for your patients

4. ## Newton physics and faces...

from my testing app

[pascal] V[0] := V3(-150, -150, 1.0);
V[1] := V3( 150, -150, 1.0);
V[2] := V3( 150, 150, 1.0);
NewtonTreeCollisionAddFace(Collider, 3, @V, SizeOf(TVector3f), 1);

V[0] := V3( 150, 150, 1.0);
V[1] := V3(-150, 150, 1.0);
V[2] := V3(-150, -150, 1.0);
NewtonTreeCollisionAddFace(Collider, 3, @V, SizeOf(TVector3f), 1);[/pascal]

you must have at least 2 faces in a collision tree.

is the actor mesh a ragdoll? in the next big release of newton there will be a ragdoll animation system

5. ## Newton physics and faces...

Yeah i have several faces, there inside a loop and a function is called to add a found face to the collision tree, e.g.
[pascal]
procedure AddFaceToCollisionTree(const Face: TFace);
var
vertex: Array [0..3] Of TVertex3f;
i: Integer;
begin
For i := 0 To 3 Do
vertex[i] := Face.Vertices[i];
NewtonTreeCollisionAddFace(nCollisionTree, 4, @vertex, SizeOf(TVertex3f), 1);
end;

procedure AddWorldToCollisionTree;

procedure CheckItem(WorldObj: TxnWorldObject);
var
i: Integer;
begin
If WorldObj is {Face object} Then
AddFaceToCollisionTree({Face Object}.Face);
If WorldObj is {Wall object} Then
For i := 0 To 5 Do AddFaceToCollisionTree({Wall object}.Faces[i]);
If WorldObj is {Polygon object} Then
For i := 0 To {Polygon object}.Children.Count-1 Do
CheckItem({Polygon object}.Children[i]);
If WorldObj is {Group object} Then
For i := 0 To {Group object}.Children.Count-1 Do
CheckItem({Group object}.Children[i]);
end;

var
i: Integer;
min,max: TVertex3f;
Matrix: TMatrix;
begin
nCollisionTree := NewtonCreateTreeCollision(nWorld, Nil);
NewtonTreeCollisionBeginBuild(nCollisionTree);

For i := 0 To World.Objects.Count-1 Do CheckItem(World.Objects[i]);

NewtonTreeCollisionEndBuild(nCollisionTree, 0);

StaticnWorld := NewtonCreateBody(nWorld, nCollisionTree);
SetIdentity(Matrix);
NewtonBodySetMatrix(staticnWorld, @Matrix[0,0]);
NewtonCollisionCalculateAABB(nCollisionTree, @Matrix[0,0], @min[0], @max[0]);
NewtonSetWorldSize(nWorld, @min[0], @max[0]);
end;
[/pascal]
From most examples and sources i have seen the following function:
[pascal]
NewtonTreeCollisionAddFace(nCollisionTree, 3, @vertex, SizeOf(TVertex3f), 1);
[/pascal]
uses a face that consists of 3 vertices, and vertex would be an array [0..2] of TVertex3f how ever i want to pass 4 vertices instead...

Originally Posted by tux
is the actor mesh a ragdoll? in the next big release of newton there will be a ragdoll animation system
Urm, i dont reall need any moving joints on it controlled via Newton. The only movments i need would be from the skeleton (walking, etc).

What advantages would there be for using it as a ragdoll and what kinda modifications would i need to do to my actor and its skeleton??

How ever i want to have a vehicle mesh with collision detection with each of the body parts, e.g the bumpers, doors, etc and when a damage level is reached the part falls off, would the ragdoll be usefull for this?

6. ## Newton physics and faces...

i cant really see anything wrong with the code. try asking at the newton forums

http://www.newtongamedynamics.com

#### Posting Permissions

• You may not post new threads
• You may not post replies
• You may not post attachments
• You may not edit your posts
•
Comodo SSL