GlutDisplayMode

Signaler
Messages postés
8
Date d'inscription
dimanche 23 mai 2004
Statut
Membre
Dernière intervention
22 mars 2006
-
Messages postés
78
Date d'inscription
lundi 14 avril 2003
Statut
Membre
Dernière intervention
23 avril 2010
-
bonjour tout le monde j'ai besoin de vous c'est urgent!!!!!!



je programme un jeu de rubik's cube en opengl donc initialement j'initialise

glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

et puis a un moment donné je veux passer en

glutInitDisplayMode(GLUT_RGBA | GLUT_SINGLE);

je ne sais pas quelle fonction utiliser pour changer mon mode et comment

SVP aidez moi c'est urgent

merci d'avance

3 réponses

Messages postés
78
Date d'inscription
lundi 14 avril 2003
Statut
Membre
Dernière intervention
23 avril 2010

Je vois pas l'interet de passer de GLUT_DOUBLE( double buffer, le plus rapide et le plus utilisé couremment) à GLUT_SIMPLE (simple couche graphique, beaucoup moins "beau" quand utilisé par rapport a GLUT_DOUBLE). Reste en GLUT _DOUBLE ca sera très bien je pense quelque soit le projet en opengl que tu entreprends.

De plus, il est à noter que dans les dernieres versions de GLUT, GLUT_RGB et GLUT_RGBA sont strictement équivalents.
Voici le code de glut.h qui confirme ce que je dis (avec les numéros de ligne associés dans mon fichier "glut.h" ):
<hr size="2" width="100%">// ...
/* display mode bit masks */
63 #define GLUT_RGB 0
64 #define GLUT_RGBA GLUT_RGB
// ...
<hr size="2" width="100%">Voilà en espérant avoir été assez clair.
Bonne prog.

Mess with the best, die like the rest
Messages postés
8
Date d'inscription
dimanche 23 mai 2004
Statut
Membre
Dernière intervention
22 mars 2006

en fait le probleme qui se pose c'est que je veux que l'utilisateur puissse rentrer son nom
et pour ça j'ai fait un truk vite fais regardes le code ci_dessou
mais je dois l'integrer a une partie qui est initialiser avec un GL_DOUBLE eyt dans ce cas quand l'utulisateur saisis son nom on voit pas les caracteres s'afficher stp esseyes de m'aimer ou de me passer une autre fonction pour la saisie stp
merci d'avance c'est urgent

#include <glut.h>
#include<stdlib.h>
#include<stdio.h>
#include<math.h>
#include<glaux.h> // Header File For The GLaux Library
#include<gl.h> // Header File For The OpenGL32 Library

#define WIDTH 640
#define HEIGHT 480
#define CTOI(C) (*(int*)&C)
int X=130,Y=WIDTH/1.5; //coordonnées de l'affichage
char nom[15]; //un pointeur vers un tableau qui contien le nom
int n=0; //l'emblacement ans le tableau du nom

int score=1; //temporaire juste pour tester ajouterscore en attendant de recuperer le score du min du jeu
char nom1[10]="joane";

typedef struct InfoScore{ //structure qui contient le nom et le score d'un joueur
char nom[40];
int score;
}Score;

char chaine[50],chaine1[50]; //tableau qui sauvrede l'ecriture
void DisplayEntrerScore();
void ReshapeEntrerScore(int,int);

void debut2d(unsigned int largeur,unsigned int hauteur);
void fin2d();
int AfficherTexte(float x,float y,char* s);

void keyboardEntrerScore(unsigned char key, int x, int y);
unsigned int ChargerBMP(char *nom);
void InitialiserScore();

AjouterScore(int score,char* nom);
////////////////////////////////////////////////////////////////////////////

int main( int argc, char *argv[ ])
{
glutInit(&argc,argv);
//glutInitDisplayMode(GLUT_RGBA | GLUT_SINGLE);
//glutInitDisplayMode( GLUT_SINGLE);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

glutInitWindowSize(WIDTH,HEIGHT);
glutInitWindowPosition(50,50);
glutCreateWindow("Fenetre OpenGL");
// init ();

glutDisplayFunc(DisplayEntrerScore);
glutReshapeFunc(ReshapeEntrerScore);
glutKeyboardFunc(keyboardEntrerScore); //spécifie la fonction à appeler lorsqu'une touche est pressée

glutMainLoop(); // lance le gestionnaire glut
return 0;
}
/*
int init(void)
{

image[1]= ChargerBMP("rubix.bmp");

glEnable(GL_TEXTURE_2D); // Enable Texture Mapping ( NEW )

glClearColor(0.3f, 0.5f, 1.0f, 0.6f); // Couleur du fond de la scene
glClearDepth(1.0f); // Nettoie le Depth Buffer
glDepthFunc(GL_LEQUAL); // Selectionne le Type du Depth Test
glShadeModel(GL_SMOOTH); // active le "Smooth Color Shading"
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // Rend la perspective vraiment tres belle



glEnable(GL_DEPTH_TEST); // active le test de profondeur


return 1;
}

*/
/*
la fonction qui ecrit les noms dans le fichier score.txt
.le probleme c'est qu'il faut pas ecraser ce qui existe deja
.rajouter aussi le score qui va etre recuperer a la fin d'une partie
*/
/*
void SauvgarderFichier(){

FILE* fichier;


fichier=fopen("score.txt","a+");
if(!fichier)
printf("erreur lors de louverture du fichier\n");

fprintf(fichier,"\n");
fprintf(fichier,"%s",nom);

fclose(fichier);

}

*/
void debut2d(unsigned int largeur,unsigned int hauteur)
{
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
glOrtho(0,largeur,hauteur,0,1,-1);
}

void fin2d()
{
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
glPopMatrix();
}

int AfficherTexte(float x,float y,char* s)
{
int i,b;
glColor3f(1,1,1);
if(s==NULL)
return 0;

i=strlen(s);
glRasterPos2d(x, y);
for(b=0; b=k;j--)
if(tab_structure[j+1].score<tab_structure[j].score){
//score
temp=tab_structure[j+1].score;
tab_structure[j+1].score=tab_structure[j].score;
tab_structure[j].score=temp;
//nom
strcpy(t,tab_structure[j+1].nom);
strcpy(tab_structure[j+1].nom,tab_structure[j].nom);
strcpy(tab_structure[j].nom,t);
}

f=fopen("score.txt","w");

for(i=0;i<10;i++)
fwrite(&tab_structure[i],sizeof(Score),1,f);

fclose(f);

}
Messages postés
78
Date d'inscription
lundi 14 avril 2003
Statut
Membre
Dernière intervention
23 avril 2010

Bon, j'ai fait un programme tres minimaliste de saisie de caracteres sous opengl utilisant GLT.
Je l'ai fait assez rapidement mais j'esp^ère qu'il sera clair malgré tout.
Reagrde si tu peux l'utiliser pour ton code.
(le copier coller du code dans ce message rend le resultat tres illisible mais tu pourras faire la mise en forme que tu veux en reprenant ce code dans ton IDE favori)


<HR>

#include
<windows.h>


#include


#include
<gl/glut.h>


using
namespace std;


#define _CRT_SECURE_NO_DEPRECATE // pour la compatibilité avec VS 2005


#define WIDTH 640


#define HEIGHT 480


#define MAXLENGTH 20


char chaine[MAXLENGTH];


int numFenetre=0;


int nbCaracTapes=0;


void foncDisplay(
void);


void foncKeyboard(
unsigned
char,
int,
int);


void afficherTexte(
char*,
float,
float);


void foncIdle(
void);


int main(
int argc,
char **argv)


{


glutInit(&argc,argv);


glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);


glutInitWindowSize(WIDTH,HEIGHT);


glutInitWindowPosition(50,50);


numFenetre=glutCreateWindow(
"Fenetre OpenGL");


glutDisplayFunc(foncDisplay);


glutKeyboardFunc(foncKeyboard);


glutIdleFunc(foncIdle); // fonction appelee quand l'ordi n'est pas occupé, utile pour appeler les fonctions de rafraichissement de l'image



// initialisation de la matrice de projection


glMatrixMode(GL_PROJECTION);


glLoadIdentity();


glOrtho(0,WIDTH,0,HEIGHT,-1,1);


glMatrixMode(GL_MODELVIEW);



// ensuite on est pret pour utiliser opengl dans le nouveau repere



// ce code peut etre mis dans la fonction d'affichage directement



// c'est selon le besoin



// initialisation a 0 de la chaine contenant les caracteres qui seront saisis


memset(chaine,0,MAXLENGTH);


glutMainLoop();



return 0;


}


void foncDisplay(
void)


{


glClearColor(0.f,0.f,0.f,0.f);


glClear(GL_COLOR_BUFFER_BIT);


glLoadIdentity();



//todo : affichage de ce qu'on veut


afficherTexte(
"ENTRER VOTRE NOM : ",10,WIDTH/1.5);



// pour gagner en rapidité on evite trop d'appels de fonction tels que strlen etc.



// donc on utilise un compteur global du nombres d'appuis sur touche faits (mis a jour dans la



// fonction de gestion du clavier)



if(nbCaracTapes>0)


afficherTexte(chaine,200,WIDTH/1.5);


glutSwapBuffers();


}


void foncIdle(
void)


{


glutPostRedisplay(); // on force le rafraichissement si l'ordi n'est pas occupé par autre chose


}


void foncKeyboard(
unsigned
char c,
int x,
int y)


{



if(c==27)
// ECHAP


{


glutDestroyWindow(numFenetre);


exit(0);


}



// on evite les erreurs de segmentation en verifiant qu'on a encore la place



// d'ajouter une lettre, si oui on ajoute



if(nbCaracTapes<(MAXLENGTH-1))


{


chaine[nbCaracTapes]=c;


++nbCaracTapes;


}


}


void afficherTexte(
char* texte,
float x,
float y)


{



if(texte)


{



int longueurTexte=(
int)strlen(texte);



float decalage=10.f;



float decX=x;


glPushMatrix();


glLoadIdentity();


glColor3f(1.f,1.f,1.f);



for(
int i=0;i<longueurTexte;i++)


{


glRasterPos2f(decX,y);


glutBitmapCharacter(GLUT_BITMAP_8_BY_13,texte[i]);


decX+=decalage;


}


glPopMatrix();


}


}


<HR>
Voilà en espérant que ca va t'aider.
Bonne prog.
++

Mess with the best, die like the rest