Devoir 3

Devoir 3

par Alexandre Aubry,
Nombre de réponses : 5

Bonjour à tous,

Dans le devoir 3, afin de charger les fichiers, j'utilise readOBJ dans les fonctions loadNeutral et loadBlendShape. J'ai indiqué la ligne : #include <igl/readOBJ.h>

Lors de l’exécution, j'obtiens l'erreur : error C3861: 'readOBJ' : identificateur introuvable.  Malgré des recherches je ne comprend pas pourquoi j'ai cette erreur.

De plus je ne comprend pas ce que signifie igl::opengl::glfw::Viewer* viewer de la fonction updateViewer.

Merci d'avance pour vos éclaircissements,

Bonne soirée,

Alexandre

En réponse à Alexandre Aubry

Re: Devoir 3

par Eric Paquette,
L'erreur me semble étrange. C'est à la compilation ou à l'exécution?

Ceci étant dit, les maillages de blend shapes fournis sont composés de quadrilatères au lieu de triangles. Le plus simple est d'utiliser read_triangle_mesh qui se charge de faire la triangulation :
#include <igl/read_triangle_mesh.h>
...
MatrixXd V;
MatrixXi F;
read_triangle_mesh(path, V, F);
En réponse à Eric Paquette

Re: Devoir 3

par Alexandre Aubry,
L'erreur a lieu à la compilation, j'ai la même erreur avec read_triangle_mesh
En réponse à Alexandre Aubry

Re: Devoir 3

par Eric Paquette,
Il y a probablement quelque chose d'incorrect au niveau de la syntaxe de C++ de votre code. Vous pouvez regarder l'exemple « libigl-demo v1.02 » qui se trouve dans le fichier « seance01-videos-demos.zip » (https://drive.google.com/drive/folders/1BubXNe1HmLU38C18Wqhe23AF35bAmerx?usp=sharing). Cet exemple utilise readOBJ. Si vous arrivez à le compiler, ça devrait vous donner des idées de ce qui peut être incorrect dans votre code en comparant avec celui de « libigl-demo v1.02 ». Vous pouvez également me faire suivre votre code par courriel. Finalement, il sera aussi possible de vérifier ce qui ne fonctionne pas au cours la semaine prochaine.
En réponse à Alexandre Aubry

Re: Devoir 3

par Eric Paquette,
Le problème se situait au niveau de l'espace de noms. La fonction « read_triangle_mesh » n'est pas trouvé car elle est dans le « namespace igl ». Il faut donc soit :
  • écrire « igl::read_triangle_mesh » partout (à la place de seulement « read_triangle_mesh »)
  • ajouter « using namespace igl » au début du fichier
En réponse à Alexandre Aubry

Re: Devoir 3

par Eric Paquette,
void updateViewer(igl::opengl::glfw::Viewer* viewer):
Cette fonction est appelée chaque fois qu'il est nécessaire de rafraicher l'affichage du viewer 3D, par exemple quand de nouvelles blend shapes sont chargées ou quand un poids de blend shape est changé. Vous avez besoin du pointeur :

igl::opengl::glfw::Viewer* viewer
afin d'être en mesure de charger les faces (seulement nécessaire la première fois) ainsi que les sommets (à chaque changement de poids de blend shape) du visage à afficher.