OpenGL structure - texture...

un4given Messages postés 42 Date d'inscription dimanche 14 novembre 2004 Statut Membre Dernière intervention 19 juillet 2006 - 19 mai 2005 à 18:03
un4given Messages postés 42 Date d'inscription dimanche 14 novembre 2004 Statut Membre Dernière intervention 19 juillet 2006 - 20 mai 2005 à 10:35
Hello !

Bon j'etais deja venu recolter vos precieux conseils y a un bon mois de cela pendant la creation d'une simulation de tir a l'arc... Je suis toujours sur le projet (que j'avais du lacher 3 semaines...) et j'ai bientot fini, il ne me reste plus qu'a finir la partie OpenGL.
Or la j'ai un petit probleme :

Comment charger une texture ???? Alors oui je sais ou trouve des sources un peu partout... Mais le probleme c'est qu'elle sont souvent mal commentées pour le debutant qu eje suis... Ou alors elles necessitent des fichiers en plus que je ne possede pas... Donc si vous avez une source accessible sans grandes difficultés je suis preneur !! Et si il faut en plus certains headers indiquez les moi que je l'ai cherche... Pour le format de l'image, de preference du bmp ou jpg...

Merci pour votre aide !!!

7 réponses

un4given Messages postés 42 Date d'inscription dimanche 14 novembre 2004 Statut Membre Dernière intervention 19 juillet 2006
19 mai 2005 à 21:01
Bon pour la texture j'y arrive toujours pas...

Sinon une autre petite question :
Mon programme fonctionne sous fenetre DOS pour le moment (oui c'est moche) et seul l'affichage du tir en 3D s'effectue en openGL (car on peut choisir d'etudier la trajectoire avec des graphiques sinon). Seulement une fois la fenetre opengl lancée, comment faire pour attribuer a une touche la fonction "quitter la fenetre opengl et poursuivre le programme dos" ?? J'arrive a faire quitter la fenetre en appuyant sur une touche mais cela quitte egalement le programme !!
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
19 mai 2005 à 21:54
http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=06



Bon la encore, on utilise glaux.h il me semble, mais de toute facon, tu
utiliseras forcément une librairie. Tu vas pas t'amuser toi même à
gérer le chargement de texture à partir d'un format.



Aller ++
0
un4given Messages postés 42 Date d'inscription dimanche 14 novembre 2004 Statut Membre Dernière intervention 19 juillet 2006
19 mai 2005 à 22:20
merci luthor !
En fait cette lecon je l'avais deja trouvée... le fait que ca utilise glaux est pas important car j'utilise glut donc c'est compris. Mais quand j'ai voulu utiliser leur loader ben... ca a pas marché ! Qu'est ce qu'il faut que je copie la dedans ?? Moi j'avais copié la partie "AUX_RGBImageRec *LoadBMP(char *Filename)" et "int LoadGLTextures()". Le probleme est que mon compilateur buggue avec le "AUX_RGBImageRec *LoadBMP(char *Filename)" !! Je ne sais trop pourquoi ! Est ce que son vcl.h est important dans les include ? Car je n'ai pas cet header la.
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
19 mai 2005 à 23:10
#include <windows.h>
#include <stdio.h>
#include <gl\gl.h>
#include <gl\glu.h>
#include <gl\glaux.h>

Il n'a que ca comme include.
Oui tu prends ce deux fonctions:
AUX_RGBImageRec *LoadBMP(char *Filename);
int LoadGLTextures();

Mais c'est vrai que moi meme j'ai eu du mal a utiliser ces fonctions,
car elle ne sont prévu que pour une texture.
Si tu veux un exemple, j'utilise ca dans la source opengl que j'avais poster il y a longtemps:
http://www.cppfrance.com/code.aspx?ID=27055

GLuint texture[3]; // en variable globale

AUX_RGBImageRec *LoadBMP(char *Filename) // Loads A Bitmap Image
{
FILE *File=NULL; // File Handle

if (!Filename) // Make Sure A Filename Was Given
{
return NULL; // If Not Return NULL
}

File=fopen(Filename,"r"); // Check To See If The File Exists

if (File) // Does The File Exist?
{
fclose(File); // Close The Handle
return auxDIBImageLoad(Filename); // Load The Bitmap And Return A Pointer
}

return NULL; // If Load Failed Return NULL
}

int LoadGLTextures()
{
int Status=FALSE;
AUX_RGBImageRec *TextureImage[3];
memset (TextureImage, 0, sizeof(void*)*1);

glGenTextures(3, texture);

if (TextureImage[0]=LoadBMP("textures/briques2.bmp"))
{
Status=TRUE;
}

glBindTexture(GL_TEXTURE_2D, texture[0]);

glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

if (TextureImage[1]=LoadBMP("textures/parquet1.bmp"))
{
Status=TRUE;
}
//glGenTextures(2, &texture[1]);
glBindTexture(GL_TEXTURE_2D, texture[1]);

glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[1]->sizeX, TextureImage[1]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[1]->data);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

if (TextureImage[2]=LoadBMP("textures/rocher.bmp"))
{
Status=TRUE;
}
//glGenTextures(3, &texture[2]);
glBindTexture(GL_TEXTURE_2D, texture[2]);

glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[2]->sizeX, TextureImage[2]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[2]->data);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

if (TextureImage[0])
{
if (TextureImage[0]->data)
{
free(TextureImage[0]->data);
}
free(TextureImage[0]);
}
if (TextureImage[1])
{
if (TextureImage[1]->data)
{
free(TextureImage[1]->data);
}
free(TextureImage[1]);
}
if (TextureImage[2])
{
if (TextureImage[2]->data)
{
free(TextureImage[2]->data);
}
free(TextureImage[2]);
}
return Status;
}



Et après dans ta fonction d'affichage, tu appels les textures:

glBindTexture(GL_TEXTURE_2D, texture[2]);

glBegin(GL_QUADS);

{

glTexCoord2f(-t,-t);
glVertex3f(cub_x - cub_c,cub_z + cub_c,cub_y -
cub_c);


glTexCoord2f(t,-t); glVertex3f(cub_x + cub_c,cub_z + cub_c,cub_y
- cub_c);


glTexCoord2f(t,t); glVertex3f(cub_x + cub_c,cub_z +
cub_c,cub_y + cub_c);


glTexCoord2f(-t,t); glVertex3f(cub_x - cub_c,cub_z + cub_c,cub_y
+ cub_c);

}

glEnd();



Enfin tu vois le genre. C'est pas jolie comme mémorisation, car tu vois
bien je code en hard le chargement de 3 textures, mais tu peux
généraliser ca facilement après.



Aller ++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
un4given Messages postés 42 Date d'inscription dimanche 14 novembre 2004 Statut Membre Dernière intervention 19 juillet 2006
20 mai 2005 à 07:51
ok merci ej vasi essayer de faire ca tout a l'heure pour verifier que chez moi ca marche bien aussi (j'suis un peu polio des fois moi...). Lors de ta compilation il ne te pose pas de probleme avec le type "AUX_RGBImageRec " ?
0
un4given Messages postés 42 Date d'inscription dimanche 14 novembre 2004 Statut Membre Dernière intervention 19 juillet 2006
20 mai 2005 à 10:11
bon je viens d'essayer... J'ai passé le probleme du AUX_RGBImageRec qui etait pas reconnu. Par contre lorsque je compile j'ai deux warnings et une erreur!

Warning :
1) Il me dit que 'File' est jamais utilisé dans la fonction AUX_RGBImageRec ... Bizzare !
2) Il me dit que j'ai peut etre mal tapé "if (TextureImage[0]=LoadBMP("herbe.bmp"))". Je pense que c'est a cause du signe = et non == mais est ce bien normal ?

Erreur :
Il a un probleme et n'arrive pas a resoudre auxDIBImageLoad...

Pourquoi ???
0
un4given Messages postés 42 Date d'inscription dimanche 14 novembre 2004 Statut Membre Dernière intervention 19 juillet 2006
20 mai 2005 à 10:35
Toujours plus loins toujous plus fort je me reponds a moi meme !

Bon pour les warnings j'ai rien de nouveaux, pour l'erreur par contre cela venait du fait que j'avais supprimé la librairie GLAUX de mon projet sans le faire expres ! Bref je l'ai remise et la... une nouvelle erreur!!
Error: 'I:\PROJET INFO - TIR À L'ARC\SOURCES\GLAUX.LIB' contains invalid OMF record, type 0x21

C'est quoi ca ???
0
Rejoignez-nous