.[ ČeskéHry.cz ].
PhysX - ConvexShapes

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Fyzikální modely
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
am!go



Založen: 19. 08. 2007
Příspěvky: 61
Bydliště: Praha

PříspěvekZaslal: 15. říjen 2007, 20:12:40    Předmět: PhysX - ConvexShapes Odpovědět s citátem

Zdravim, nevím, jestli tady někdo má zkušenosti s tímhle fyzikálním engine, ale řek sem si, že zkusim štěstí.
Začal jsem s nim nějak experimentovat, prodral sem se úplnýma základama a došel na ConvexShapes. Tady sem narazil na problém. Nevim, jak správně přetransformovat vertexy a indexy z DXMeshe, aby tomu rozuměl NxConvexMeshDesc. Našel jsem tuhle funkci, ale krachuje mi tam funkce NxCookConvexMesh. Jestli to už někdo z vás řešil, tak bych byl vděčnej za radu.

kód:

void GenerateConvexFromDXMesh(ID3DXMesh* &Mesh, NxActor* &PhysXActor, NxVec3& pos)
{
   //Used to retrieve information from X file
   typedef struct {
      D3DXVECTOR3 VertexPos;
      D3DXVECTOR3 Normal;
      D3DXVECTOR2 TexCoord;
   } Mesh_FVF;

   int NumVerticies = Mesh->GetNumVertices();
   DWORD FVFSize = D3DXGetFVFVertexSize(Mesh->GetFVF());

   //Create pointer for vertices
   NxVec3* verts = new NxVec3[NumVerticies];

   ofstream fout("vertexy.txt");
   char *DXMeshPtr;
   Mesh->LockVertexBuffer(D3DLOCK_READONLY, (void**)&DXMeshPtr);
   for(int i = 0; i < NumVerticies; i++)
   {
      Mesh_FVF *DXMeshFVF = (Mesh_FVF*)DXMeshPtr;
      verts[i] = NxVec3(DXMeshFVF->VertexPos.x, DXMeshFVF->VertexPos.y, DXMeshFVF->VertexPos.z);
      DXMeshPtr += FVFSize;
      fout << verts[i].x << "\t" << verts[i].y << "\t" << verts[i].z << "\n";
   }
   Mesh->UnlockVertexBuffer();

   // Create descriptor for convex mesh
   NxConvexMeshDesc convexDesc;
   convexDesc.numVertices         = NumVerticies;
   convexDesc.pointStrideBytes      = sizeof(NxVec3);
   convexDesc.points            = verts;
   convexDesc.flags            = NX_CF_COMPUTE_CONVEX;
   
   // Cooking from memory
   MemoryWriteBuffer buf;
   if(NxCookConvexMesh(convexDesc, buf))
   {
      NxConvexShapeDesc convexShapeDesc;
      convexShapeDesc.meshData = gPhysicsSDK->createConvexMesh(MemoryReadBuffer(buf.data));

      if(convexShapeDesc.meshData)
      {
         // Create body
         NxBodyDesc BodyDesc;
         BodyDesc.angularDamping   = 0.5f;

         NxActorDesc ActorDesc;
         ActorDesc.shapes.pushBack(&convexShapeDesc);
         ActorDesc.body         = &BodyDesc;
         ActorDesc.density      = 10.0f;
         ActorDesc.globalPose.t  = pos;
         PhysXActor = gScene->createActor(ActorDesc);
      }
   }
   else MessageBox(NULL, "NxCookConvexMesh neproslo", "IMPORTANT MESSAGE!", MB_OK);
   delete[] verts;
}
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Fyzikální modely Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna