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:
gBunnyVertices démarre comme ça:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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);
et gBunnyTriangles est déclaré comme ça:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 float gBunnyVertices[]={ -0.334392f,0.133007f,0.062259f, -0.350189f,0.150354f,-0.147769f,
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 int gBunnyTriangles[]={ 126,134,133, 342,138,134,
Donc je commence par allouer l'espace dans la mémoire:
Ensuite je les rempli avec ce que j'ai
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 int* indexTab = (int*)(malloc(_mesh->GetNumFaces() * 3 * sizeof(int))); float* vertexTab = (float*)(malloc(_mesh->GetNumVertices() * 3 * sizeof(float)));
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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]; }
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:
Voilà, je vois aucune différence avec le code de l'exemple et pourtant...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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);
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
Partager