Results 1 to 10 of 12

Thread: Irrlicht and Newton ConvexHull

Threaded View

Previous Post Previous Post   Next Post Next Post
  1. #1

    Irrlicht and Newton ConvexHull

    Hi there, long time no see, looking for a little help, i am currently using Irrlicht 1.71 and Newton 2.29. i have so far got everything working apart from convex hull objects, i read that newton and irrlicht both use different sizes, i have fiddled around trying to get it to work with no luck, it "kind of" works, anyways this is my code for creating the collision hull

    Code:
    function CreateConvexHullCollisionFromMesh(nWorld: PNewtonWorld; node: ISceneNode; irr_mesh: IMesh): PNewtonCollision;
    var
      nMeshBuffer       : Integer; //Mesh Buffer count
      nVertices         : LongWord;
      mesh_buffer       : IMeshBuffer;
      tCounter          : LongWord;
      vertices          : array of Vector3df;
      _vertices         : PS3DVertex;
      i                 : Integer;
    begin
      nMeshBuffer := 0;
      nVertices := 0;
    
      //get number of vertices
      for nMeshBuffer := 0 to irr_mesh.getMeshBufferCount() - 1 do begin
        nVertices := nVertices + irr_mesh.getMeshBuffer(nMeshBuffer).getVertexCount();
      end;
    
      //create buffer for vertices
      SetLength(vertices, nVertices);
      tCounter := 0;
    
      //get (irr_)mesh buffers and copy face vertices
      for nMeshBuffer := 0 to irr_mesh.getMeshBufferCount() - 1 do begin
        mesh_buffer := irr_mesh.getMeshBuffer(nMeshBuffer);
    
        //get pointer to vertices and indices
        _vertices := PS3DVertex(mesh_buffer.getVertices());
    
        {$POINTERMATH ON}
        //copy vertices from mesh to buffer
        for i := 0 to mesh_buffer.getVertexCount() - 1 do begin
          vertices[tCounter].x := _vertices[i].Pos.x;
          vertices[tCounter].y := _vertices[i].Pos.y;
          vertices[tCounter].z := _vertices[i].Pos.z;
    
          Inc(tCounter);
        end;
        {$POINTERMATH OFF}
      end;
    
      //Create Newton collision object
      Result := NewtonCreateConvexHull(nWorld, nVertices, @vertices[0].x, sizeof(vector3df), 0, 0, nil);
    
      //remove from mem space
      vertices := nil;
    end;
    currently i have tried with several objects, i am loading it with a cube just to test with... what happens is the cube falls, hits the ground, then gradually (slowly) falls through and then off it goes falling to bottom of newton world size. im guessing my ground is fine since creating newtonbox works just fine, all physics work for this with many objects, 1000s even, just not the convex hull, hope you can help, thanks.
    Last edited by Colin; 17-01-2011 at 01:48 PM.

Bookmarks

Posting Permissions

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