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
|
Zaslal: 15. říjen 2007, 20:12:40 Předmět: PhysX - ConvexShapes |
|
|
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 |
|
|
|
|
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