Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
524 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Coordonnées de texture foireuses avec lib3ds

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Coordonnées de texture foireuses avec lib3ds

n°1492490
akalash47
Posté le 17-12-2006 à 23:31:00  profilanswer
 

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
mood
Publicité
Posté le 17-12-2006 à 23:31:00  profilanswer
 

n°1492494
IrmatDen
Posté le 17-12-2006 à 23:55:05  profilanswer
 

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?

n°1492712
akalash47
Posté le 18-12-2006 à 14:55:05  profilanswer
 

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


Message édité par akalash47 le 18-12-2006 à 14:56:11
n°1492932
bjone
Insert booze to continue
Posté le 18-12-2006 à 19:13:32  profilanswer
 

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

n°1493012
akalash47
Posté le 18-12-2006 à 22:48:49  profilanswer
 

...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
n°1493061
bjone
Insert booze to continue
Posté le 19-12-2006 à 00:47:16  profilanswer
 

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.

n°1493063
bjone
Insert booze to continue
Posté le 19-12-2006 à 00:52:28  profilanswer
 
n°1493271
akalash47
Posté le 19-12-2006 à 11:15:54  profilanswer
 

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
n°1493504
IrmatDen
Posté le 19-12-2006 à 15:28:26  profilanswer
 

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 :)

n°1493601
bjone
Insert booze to continue
Posté le 19-12-2006 à 16:33:56  profilanswer
 

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.

mood
Publicité
Posté le 19-12-2006 à 16:33:56  profilanswer
 

n°1493603
bjone
Insert booze to continue
Posté le 19-12-2006 à 16:35:19  profilanswer
 

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.

n°1493651
IrmatDen
Posté le 19-12-2006 à 17:15:43  profilanswer
 

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 :))

n°1493663
bjone
Insert booze to continue
Posté le 19-12-2006 à 17:26:11  profilanswer
 

tout à fait.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Coordonnées de texture foireuses avec lib3ds

 

Sujets relatifs
[glut] texture ?Opengl+Qt impossible de charger une texture
[GDI+] Comment récupérer les coordonnées des points d'un objet CRgn ?Connaitre coordonnées d'un formulaire
[Opengl] coordonnées des textures...[OpenGL] Charger une texture BMP
classes SGT - pb système de coordonnées[OpenGL] Texture et ColorTable
Coordonnées cellules sélectionnées[openGL]: passage coordonnées camera -> globales
Plus de sujets relatifs à : Coordonnées de texture foireuses avec lib3ds


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR