je programme de l´opengl sous windows avec dev c++.
Tout marche bien jusqu´a ce que j´essaie de mettre des textures au format . rgb ( n´importe quel format d´ailleurs), l´application se lance et s´arrete avant d´afficher quoi que ce soit.
Si qqn a la solution, qu´il me fasse signe, ca serait sympa
Il faut bien mettre en place ta texture, sinon ça foire.
tu as déja mis des textures ?
sinon, je te renvoie sur la leçon 06 du tutorial de NEHE
http://nehe.gamedev.net
si tu as soucis malgré cela, je t´aiderai
En fait, si tu veux, à l´ecole, on utilise linux et il y a pas de pb lors de l´execution, on met les textures dans le meme repertoire et c tout.
Par contre, avec dev c++, ca ne marche pas de la meme facon, il faut lui indiquer un lien ou je ne sais quoi.
Donc si tu connais un logiciel sous windows avec lequel t´arrive a mettre des textures, ca serait sympa de me dire quel logiciel t´as utilisé et comment t´as fait pour configurer le logiciel
Merci
Tu devrais regarder le Tuto de nehe ( comme l´as dit JY²) car je l´ai fait avec Dev C++ et ça marche nickel.
Tu as bien vérifié le chemin que tu indiquais pour trouver l´image, normalement, tu peux faire un test avant sur l´ouverture du fichier pour savoir si celui-ci existe bien, toujours dans le tutorial, c´est :
FILE *File=NULL;
File=fopen("toto.rgb","r");
if ( File)
{
fclose(File);
return auxDIBImageLoad(Filename);
}
Essaie ca juste après l´ouverture du fichier et met un test dans le if pour avoir un log, tu sauras s´il s´ouvre ou non
l´image est dans le meme repertoire que le fichier . c donc il ne me semble pas necessaire de lui indiquer le chemin.
j´utilise " assert(file!=NULL);"
dans le projet créé, on insere le code source mais doit on inserer egalement l´image ? ??
Sinon, je veux bien afficher le code source dans mon prochain message ou l´envoyer par mail si c plus pratique
non : inutile d´insérer ta texture dnas le projet
si tu fais assert(file!=NULL) alors C bon pour ton fichier.
Si sous Linux tu utilises GLUT, alors c´est completement portable sous Windows.
si tu n´utilises pas GLUT, qu´utilises tu ?
normalement si ça se compile, ce n´est pas un probleme de lien ( adapter le Makefile).
Qu´utilises tu pour charger ta texture ? QT ? ou alors tu lis ton fichier manuellement ?
marque ici le code de chargement de texture
depuis le load propre, jusqu´au glGenTexture
ainsi que le
glBind, glTexture2D ou glMipampTexture, puis glTexParameter
( excuse pour les fautes de noms de fonctions, je n´arrive jamais a les retenir)
sinon, comme on te disais, Nehe a fait des fonctions qui chargent la texture.
En fait, je viens a peine de commencer la programmation openGL depuis 1 semaine maintenant et on a deja des morceaux de code source comme pour la texture par exemple. Voici la fonction pour les textures:
unsigned char texture[256*256*3];
void loadTexture(char *filename)
{
int i, x, y, c;
FILE *file=fopen(filename, " r");
assert(file!=NULL);
for ( i=0; i<512; i++)
fgetc(file);
for ( c=0; c<3; c++)
for ( y=0; y<256; y++)
for ( x=0; x<256; x++)
texture[y*3*256+x*3+c]=fgetc(file);
fclose(file);
}
void initTexture()
{
loadTexture("terre.rgb");
glEnable(GL_TEXTURE_2D);
//pour les GL_TEXTURE_MAG_FILTER et GL_TEXTURE_MIN_FILTER,
//tester aussi la valeur GL_LINEAR
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, 3,
256, 256, 0, GL_RGB, GL_UNSIGNED_BYTE,
texture);
}
Voila pour la texture, j´envoie dans le prochain message l´appel de la structure
La texture est un carré representant le monde et le but est de l´afficher sur chaque face d´un cube. Voici l´appel de la texture sur le cube:
void cube3()
{
initTexture();
glBegin(GL_POLYGON);
glTexCoord2f(0,1); point(0);
glTexCoord2f(1,1); point(1);
glTexCoord2f(1,0); point(3);
glTexCoord2f(0,0); point(2);
glEnd();
glBegin(GL_POLYGON);
glTexCoord2f(1,1); point(4);
glTexCoord2f(1,0); point(6);
glTexCoord2f(0,0); point(7);
glTexCoord2f(0,1); point(5);
glEnd();
glBegin(GL_POLYGON);
glTexCoord2f(0,0); point(7);
glTexCoord2f(0,1); point(6);
glTexCoord2f(1,1); point(2);
glTexCoord2f(1,0); point(3);
glEnd();
glBegin(GL_POLYGON);
glTexCoord2f(0,0); point(4);
glTexCoord2f(0,1); point(5);
glTexCoord2f(1,1); point(1);
glTexCoord2f(1,0); point(0);
glEnd();
glBegin(GL_POLYGON);
glTexCoord2f(0,0); point(5);
glTexCoord2f(0,1); point(7);
glTexCoord2f(1,1); point(3);
glTexCoord2f(1,0); point(1);
glEnd();
glBegin(GL_POLYGON);
glTexCoord2f(0,0); point(6);
glTexCoord2f(0,1); point(4);
glTexCoord2f(1,1); point(0);
glTexCoord2f(1,0); point(2);
glEnd();
}
et j´ajoute
glMatrixMode(GL_TEXTURE);
dans ma fonction d´affichage
Le tout marche tres bien sous linux
donc, je dois oublier qqch
G regarder le site de Nehe et y a 2 includes que je ne comprends pas trop a quoi ca peut servir:
Je ne les ai pas mis dans mon programme sous win
Tu n´as pas mis les includes dans ton source ? ??
si c´est le cas tu dois le faire au début
et tu dois linker comme ça avec dev-C++ sous win
( peut etre que tu l´as bien fait mais je le mets quand meme^^)
Projet>options du projet et tu mets ça dans le linker
-lopengl32 -lglaux32 -lglut32
c´est le header qui sert pour s´occuper de la gestion des fonctions openGl que tu emplois ( en l´occurence openGL, glaux et glut ( indispensable je crois))
Je ne sais pas si c´est ce que tu voulais savoir, tout en sachant qu´étant un noob de l´oGL ( et du coding...)mes réponses ne sont pas précises enfin si cela peut t´aider je serais happy ![]()
n´hésites pas au cas où...
++
je précise qu´il faut que tu ais les dll files pour openGL comme glaux.dll GLUT.dll ( un truc dans le genre)
je sais pas si tu l´as fait mais quand on a des probs il faut revoir meme les trucs à la c... ( c´est ce que je fais ^_^)
J´avais bien mis
-lopengl32 -lglu32 -lglut32
la librairie glaux, je m´en sert pas donc je ne l´ai pas mis.
En fait, l´opengl marche bien sous windows tant qu´on n´utilise pas de textures.
C seulement dans l´application d´une texture sur un objet que le programme bug et sans comprendre pourquoi
Merci de tes conseils ! !! ; )
Juste une question, il faut que ton image soit à l´emplacement de ton executable ( par ex, si ton executable est dans /Release, mais tes sources sous /, il faut que ton image soit sous /Release).
Ensuite, essaie de faire le même test avec une image classique ( comme un BMP), ceci peut permettre de savoir si c´est ton image qui ne peut pas être prise ou autre.
De rien on m´aide bcp en prog alors j´essais de trnasmettre les conseils qu´on me donne comme ça c´est utile à tout le monde et ca permet d´éviter des erreurs betes ![]()
Ce WE, je ne suis pas sur le pc ou je programme donc je pourrais pas de suite de repondre Diwi mais j´ai laissé la configuration par defaut de dev c++ donc il se peut en effet que l´executable soit autre part que dans le rep des fichier sources. Il me semblait qu´il les placé tout seul dans le rep des fichiers sources.
Je te dirais quoi dimanche soir ou lundi
++
Le probleme, c t bien que l´image etait pas dans le meme rep que l´executable. Je croyais qu´il creer l´executable au meme endroit que le code source mais apparemment non.
Donc, l´execution du prog se lance bien mise. Mais la texture se retrouve plaqué sur 2 mm en bas et les couleurs sont bizarres ! !!!!
ouais..............