CLASSE SDL JPEG (OPENGL)

cs_Batman60 Messages postés 71 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 21 octobre 2007 - 3 févr. 2006 à 13:47
cs_Batman60 Messages postés 71 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 21 octobre 2007 - 11 févr. 2006 à 16:24
au secours je n'arrive pas à afficher la texture voulue sur les faces choisie du cube
LE CLASSE .H:
class Csdl
{
public:

Csdl();
~Csdl();


void LoadTexture(const char *);


void glBindTexture( GLenum , GLuint );


GLuint texture_name;
GLuint texName[10];

};

LE CLASSE.CPP:
Csdl::Csdl()
{
GLuint texture_name;
GLuint texName[10];
}
Csdl::~Csdl()
{
GLuint texture_name;
GLuint texName[10];
}
void Csdl::LoadTexture(const char*file)
{
SDL_Surface *image=IMG_Load(file);

if (image==NULL)
{
MessageBox(NULL,"Image pas chargée","debug",MB_ICONSTOP|MB_OK);
}

glGenTextures(1,&texture_name);

glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
gluBuild2DMipmaps(GL_TEXTURE_2D, 3, image->w, image->h,
GL_RGB, GL_UNSIGNED_BYTE, image->pixels);

glEnable(GL_TEXTURE_2D);
}

void Csdl::glBindTexture( GLenum target, GLuint texture)
{}

MAIN.CPP dans void RePaint ():
jpeg1.glBindTexture(GL_TEXTURE_2D,jpeg1.texName[0]);
glBegin(GL_POLYGON);
glTexCoord2f(1.0,1.0);glVertex3f(-0.5,0.5,0.5);
glTexCoord2f(0.0,1.0);glVertex3f(-0.5,-0.5,0.5);
glTexCoord2f(0.0,0.0);glVertex3f(0.5,-0.5,0.5);
glTexCoord2f(1.0,0.0);glVertex3f(0.5,0.5,0.5);
glEnd();

jpeg2.glBindTexture(GL_TEXTURE_2D,jpeg2.texName[1]);
glBegin(GL_POLYGON);
glTexCoord2f(0.0,1.0);glVertex3f(0.5,0.5,0.5);
glTexCoord2f(0.0,0.0);glVertex3f(0.5,-0.5,0.5);
glTexCoord2f(1.0,0.0);glVertex3f(0.5,-0.5,-0.5);
glTexCoord2f(1.0,1.0);glVertex3f(0.5,0.5,-0.5);
glEnd();

DANS case WM_CREATE:
jpeg1.LoadTexture("photo2.jpg");
jpeg2.LoadTexture("photo3.jpg");

Le problème c'est qu'il n'y a que la "photo3.jpg" qui s'afiche sur toutes les faces du cube
pourquoi

2 réponses

MrdJack Messages postés 146 Date d'inscription jeudi 22 avril 2004 Statut Membre Dernière intervention 8 mars 2008 2
3 févr. 2006 à 17:45
deja faudrai savoir si tu utilises texName ou si tu utilises texture_name....



car d'un coté tu crées la texture dans la zone memoire pointée par
texture_name et puis d'un autre, tu appelles la texture dans la
fonction glBindTexture() avec texName alors faudrais savoir...

a moins qu'il n'y ai un truc qu'on ne voit pas dans le post, mais
là je me demande comment t'a réussi a afficher la deuxieme de cette
maniere...



et pûis je suppose que tu declares jpeg1 et jpeg2 comme suit :

Csdl jpeg1;

Csdl jpeg2;



donc ca veux dire deux instances de classe Csdl si je me trompe pas...

donc en gros, dans chaque classe, il y a un texName[10] de declaré,

ya un autre hic là... car tu melanges les deux instances de classes nommées jpeg1 et jpeg2...





sinon, LA question existantiele de ce post est pourquoi veux tu mettre chaque image dans une classe différente ?!?

un conseil utile, mets un autre parametre dans loadTexture() indiquant dans quels id sera enregistré l'image.

et puis tu ne feras qu'un appel vers cette classe que tu nommera
textures par exemple (j'insiste sur le pluriel car chaque texture sera
chargée dasn cette classe et non pas une classe par texture qui sert a
rien a part t'embrouiller.

va faire un tour sur le site de NeHe, faudrait que tu revoie les tutos ca te ferai pas de mal !



bref revoies un peu tout ca et donnes nous de tes nouvelles



@++
0
cs_Batman60 Messages postés 71 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 21 octobre 2007
11 févr. 2006 à 16:24
salut
merci MrdJack de m'avoir répondu mais entre temps j'ai résolu le problème comme ceci:

dans le ".h"

class Csdl
{
public:
GLuint texture_name;

void LoadTexture(const char*file,GLuint texture)
{
SDL_Surface *image=IMG_Load(file);

if (image==NULL)
{
MessageBox(NULL,"Image pas chargée","debug",MB_ICONSTOP|MB_OK);
}
glGenTextures(1,&texture_name);
glBindTexture(GL_TEXTURE_2D,texture);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
gluBuild2DMipmaps(GL_TEXTURE_2D, 3, image->w, image->h,
GL_RGB, GL_UNSIGNED_BYTE, image->pixels);

glEnable(GL_TEXTURE_2D);
}
};

et puis dans le".cpp":
glBindTexture(GL_TEXTURE_2D,1);
glBegin(GL_POLYGON);

glTexCoord2f(1.0,1.0);glVertex3f(-0.5,0.5,0.5);
glTexCoord2f(0.0,1.0);glVertex3f(-0.5,-0.5,0.5);
glTexCoord2f(0.0,0.0);glVertex3f(0.5,-0.5,0.5);
glTexCoord2f(1.0,0.0);glVertex3f(0.5,0.5,0.5);
glEnd();

jpeg1.LoadTexture("photo1.jpg",1);

ca rejoint ce que tu m'a dit je pense.
comme je suis débutant c'est ma première création de classe
0
Rejoignez-nous