Coordonnées de texture foireuses avec lib3ds

Coordonnées de texture foireuses avec lib3ds - C++ - Programmation

Marsh Posté le 17-12-2006 à 23:31:00    

Bonjour,
 
J'utilise la lib3ds pour charger des mesh dans mon appli 3D.
 
Je suis un peu surpris car toutes les informations de vertex (position, normale, couleur) du mesh sont correctes...sauf les uv! Du moins avec tous les modèles que j'ai essayé, les textures ne sont pas correctement appliquées sur l'objet.
 
Voila mon code de chargement des vertex buffers:
 

Code :
  1. struct VERTEX
  2.     {
  3.     Vector3  position;
  4.     Vector3  normal;
  5.     Color    diffuse;
  6.     Vector2  texCoords0;
  7.     Vector2  texCoords1;
  8.     };
  9.   typedef unsigned short INDEX;
  10. void loadMesh ( Lib3dsMesh* currentMesh )
  11.     {
  12.     unsigned int  currentIndex = -1;
  13.     unsigned int  i, index;
  14.     Lib3dsFace*  currentFace;
  15.     vector <VERTEX> vertices ( currentMesh->points );   // tableau utilisé pour la création du vertex buffer
  16.     vector <INDEX> indices ( currentMesh->faces * 3 );  // tableau utilisé pour la création de l'index buffer
  17.     for ( i = 0; i < currentMesh->faces; ++i )
  18.       {
  19.       currentFace = &currentMesh->faceL[i];
  20.       for  ( j = 0; j < 3; ++j )
  21.         {
  22.          index = currentFace->points[j];
  23.          indices[++currentIndex] = index;
  24.          vertices[index].position = currentMesh->pointL[index].pos;
  25.          if ( currentMesh->texelL ) vertices[index].texCoords0 = currentMesh->texelL[index];
  26.          }
  27.        }
  28.      // etc...
  29.     }


 
Est-ce que ma manière de faire est incorrecte? Ou est-ce que ça pourrait provenir de la lib elle-même?
...Pour une fois, je préférerais que ce soit moi  :D


Message édité par akalash47 le 18-12-2006 à 14:59:25
Reply

Marsh Posté le 17-12-2006 à 23:31:00   

Reply

Marsh Posté le 17-12-2006 à 23:55:05    

Salut,
 
J'utilise pas cette lib, mais texelL semble être un float[2]. Tu as bien un opérateur = acceptant un float[2] défini pour Vector2?

Reply

Marsh Posté le 18-12-2006 à 14:55:05    

Oui, évidemment. J'ai également verifié ces opérateurs, au cas où... :sarcastic:


Message édité par akalash47 le 18-12-2006 à 14:56:11
Reply

Marsh Posté le 18-12-2006 à 19:13:32    

Direct3D et OpenGl n'ont pas les mêmes conventions d'UV.

Reply

Marsh Posté le 18-12-2006 à 22:48:49    

...ah...mais quelle est la différence alors?
 
Ce qui m'étonne dans ce cas, c'est que j'utilise aussi bien ma déclaration de vertex pour créer des vertex buffers avec DirectX qu'avec OpenGL (via glBindBufferARB). Donc ça signifie que faire appel aux routines glTexCoords2f (celle qui est utilisée dans les exemples de la lib3ds, donc) est un cas spécial de mappage de texture!?  :heink:


Message édité par akalash47 le 18-12-2006 à 22:59:36
Reply

Marsh Posté le 19-12-2006 à 00:47:16    

c'est pas ça mais l'origine et le sens des repères n'est pas forcément le même.
 
à vérifier, mais je pense que 3DS utilisait la convention OpenGl.

Reply

Marsh Posté le 19-12-2006 à 00:52:28    

Reply

Marsh Posté le 19-12-2006 à 11:15:54    

C'est ça! merci beaucoup!
 
Etonnant tout de même qu'OpenGL utilise 2 conventions différentes  :heink:

Message cité 1 fois
Message édité par akalash47 le 19-12-2006 à 11:16:22
Reply

Marsh Posté le 19-12-2006 à 15:28:26    

Ben, c'est la même chose pour le repère :/
Et la logique OpenGL est à mon goût plus logique que celle de D3D :)

Reply

Marsh Posté le 19-12-2006 à 16:33:56    

akalash47 a écrit :

C'est ça! merci beaucoup!
 
Etonnant tout de même qu'OpenGL utilise 2 conventions différentes  :heink:


 
normalement tu n'en as qu'une par API. (pour les coordonnées UV).
c'est juste que suivant quelle API tu utilises, ce qui provient de 3DS ou autre soft d'authoring 3D aura à être transformé ou pas.

Reply

Marsh Posté le 19-12-2006 à 16:33:56   

Reply

Marsh Posté le 19-12-2006 à 16:35:19    

IrmatDen a écrit :

Ben, c'est la même chose pour le repère :/
Et la logique OpenGL est à mon goût plus logique que celle de D3D :)


 
pour les coordonnées c'est plus rigide comme convention. par question repère main gauche/main droite, tu t'en fous tu peux prendre n'importe quelle convention du moment que tu t'y tiens tout le long de ton code.

Reply

Marsh Posté le 19-12-2006 à 17:15:43    

Le problème se pose quand tu as des fichiers exportés dans un repère que tu utilises dans une api/moteur utilisant l'autre, non? ce qui revient au même que le problème d'UV? (le problème se voit nettement plus vite c'est clair :))

Reply

Marsh Posté le 19-12-2006 à 17:26:11    

tout à fait.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed