Méga problème de memcpy :'(
Salut à tous,
Alors voilà à quoi j'ai perdu mon temps toute la journée et pourquoi je m'arrache les cheveux blotti sur moi même dans un coin de ma piole:
Voici un extrait de code qui marche:
Code:
1 2 3 4 5 6 7 8 9 10
|
NxTriangleMeshDesc bunnyDesc;
bunnyDesc.numVertices = BUNNY_NBVERTICES;
bunnyDesc.numTriangles = BUNNY_NBFACES;
bunnyDesc.pointStrideBytes = sizeof(NxVec3);
bunnyDesc.triangleStrideBytes = 3*sizeof(NxU32);
bunnyDesc.points = gBunnyVertices;
bunnyDesc.triangles = gBunnyTriangles;
bunnyDesc.flags = 0;
bunnyTriangleMesh = gPhysicsSDK->createTriangleMesh(bunnyDesc); |
gBunnyVertices démarre comme ça:
Code:
1 2 3 4
|
float gBunnyVertices[]={
-0.334392f,0.133007f,0.062259f,
-0.350189f,0.150354f,-0.147769f, |
et gBunnyTriangles est déclaré comme ça:
Code:
1 2 3 4
|
int gBunnyTriangles[]={
126,134,133,
342,138,134, |
Bon bref, rien de sorcier, alors j'ai voulu appliquer ce code. Alors comme je n'ai pas les tableaux comme dans l'exemple, j'ai du les créer.
Donc je commence par allouer l'espace dans la mémoire:
Code:
1 2 3
|
int* indexTab = (int*)(malloc(_mesh->GetNumFaces() * 3 * sizeof(int)));
float* vertexTab = (float*)(malloc(_mesh->GetNumVertices() * 3 * sizeof(float))); |
Ensuite je les rempli avec ce que j'ai
Code:
1 2 3 4 5 6 7 8 9 10
|
for(int i = 0; i < _mesh->GetNumVertices(); i++)
{
memcpy(vertexTab + (i * 3), (BYTE*)VB + i * _mesh->GetNumBytesPerVertex(), 3*sizeof(float));
}
for(int i = 0; i < _mesh->GetNumFaces()*3; i++)
{
indexTab[i] = IB[i];
} |
Jusqu'ici, tout va bien, j'ai déclaré des tableaux de taille constantes que j'ai rempli avec memcpy depuis mes tableaux que je viens de créer et remplir, j'ai contrôlé les valeurs obtenues, tout est correct.
Donc j'ai maintenant les deux tableaux comme dans l'exemple, j'ai plus qu'à définir les paramètres comme l'exemple et appeler la fonction:
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
NxTriangleMeshDesc levelDesc;
levelDesc.numVertices = _mesh->GetNumVertices();
levelDesc.numTriangles = _mesh->GetNumFaces();
levelDesc.pointStrideBytes = sizeof(NxVec3);
levelDesc.triangleStrideBytes = 3*sizeof(NxU32);
levelDesc.points = vertexTab;
levelDesc.triangles = indexTab;
levelDesc.flags = 0;
NxTriangleMeshShapeDesc levelShapeDesc;
levelShapeDesc.meshData = Physics::GetInstance()->GetSDK()->createTriangleMesh(levelDesc); |
Voilà, je vois aucune différence avec le code de l'exemple et pourtant...
J'obtient une erreur d'exécution lors de createTriangleMesh():
Unhandled exception at 0x100745db in BK.exe: 0xC0000005: Access violation reading location 0x00000274.
Je précise aussi que l'exemple, j'ai pu le compiler et l'exécuter sans soucis...
Quelqu'un voit quelque chose qui cloche? à part l'erreur :p
Merci,
A bientôt