Bonjour a tous,
c´est incroyable ! !! je n´arrive pas a dessiner un carre avec OpenGL et je ne sais pas pourquoi... voila pourtant les coordonnées que je rentre:
glBegin(GL_QUADS);
glVertex2i(10, 10);
glVertex2i(150, 10);
glVertex2i(10, 150);
glVertex2i(150, 150);
glEnd();
ca ne me fait pas un carré et je ne sais pas pourquoi... quelqu´un peut m´aider svp ! !!
Merci par avance...
Bob
non c´est bon laissé tombé je viens de comprendre... je croyai qu´on pouvait definir les points comme on voulait, mais non, il faut qu´ils se suivents ! !!
pour que ca marche le bon code est:
glBegin(GL_QUADS);
glVertex2i(10, 10);
glVertex2i(10, 150);
glVertex2i(150, 150);
glVertex2i(150, 10);
glEnd();
le piege aussi, c´est de mettre sa caméra en face ![]()
sinon la j´essai de deplacer ce carré de 10 pixels quand on appuie sur la touche ´a´ ( pour la reception des entrées au clavier j´utilise GLUT), mais je ne sais pas trop comment faire...
le truc a faire : tu crees un tableau :
char Key[256];
qui donne 1 ou 0 selon que la touche soit enfoncée ou non.
Si tu as cela, c´est simple :
if ( Key[´a´]) / / bouge le carre...
pour avoir cela, c´est simple : avant le glutmainloop, tu mets :
glutKeyboardFunc(keydown);
glutKeyboardUpFunc(keyup);
et au dessus tu implémentes :
void keydown(unsigned char key,int x, int y)
{
Key[key]=1;
}
void keyup(unsigned char key,int x, int y)
{
Key[key]=0;
}
pour la gestion de clavier ca va, mais c´est pour faire deplacer le carré que j´y arrive pas ! !!
Si tu veux deplacer le carré, tu devras faire, au moment de rendre ton carré :
glPushMatrix();
glTranslatef(mouvement_x, mouvement_y, mouvement_z);
dessin_de_ton_carre();
glPopMatrix();
et puis ensuite pour la camera, glLoadIdentity(); puis ta fonction normale, soit gluLookAt(...);
ou glLoadMatrixf(ta_matrice_de_transformation);
les glPushMatrix() et glPopMatrix() sont important, ils indiquent que toutes les transformations qui seront effectués n´auront d´influence qu´entre ces deux fonctions. En les enlevant, ton cube se deplacera, mais avec toute ta scene.
Tu noteras que le deplacement est en unités OpenGL. En tout cas ne deplace pas tes objets en touchant a leur vertices, c´est tres sale !
déplacer un objet revient a le dessiner un peu plus loin a la frame suivante, c´est tout ![]()
une derniere question et je vous laisse tranquil pour un moment
... comment je peux charger un jpg en OpenGL?
faut une autre lib.
freeimage ( je ne connais pas)
ou SDL_image
ok, c´est juste ce que je voulais savoir ![]()
merci pour vos differentes reponses ! !!
bonne prog
en fait la je nage un peu, beaucoup meme ! !!
je voudrais avoir un exemple ! !! en fait j´ai mon carré, je voudrais ne pas le voir, puis en fait, on se rapproche de lui juska ce que l´image prenne toute la place de la fenetre... en fait j´aimerais bien un petit exemple...
merci par avance...
Bob...
http://nehe.gamedev.net/
Y a pas mieux ![]()
dites j´ai une question sur la " propreté" d´un code: je voudrais savoir si on peut travailler avec des coordonées tout en 3D pour avoir un resultat final en 2D?
Bien sûr.
Cela n´entache pas la propreté du code ![]()
ca m´enerve ! !! voici mon code:
/ / header
/ / fonction redimensionnemnt
void reshape(int w, int h)
{
glViewport(0, 0, ( GLsizei) w, ( GLsizei) h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0, ( GLdouble) w, 0.0, ( GLdouble) h);
}
/ / fonction d´affichage
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT); / / vide écran
glColor3f(1.0, 1.0, 1.0); / / couleur blanche
glEnable(GL_TEXTURE_2D); / / active les textures
glBindTexture(GL_TEXTURE_2D, 1); / / creation texture
// on trace un carré
glBegin(GL_QUADS);
glTexCoord2i(0, 0); glVertex2i(0, 0);
glTexCoord2i(0, 1); glVertex2i(0, 600);
glTexCoord2i(1, 1); glVertex2i(800, 600);
glTexCoord2i(1, 0); glVertex2i(800, 0);
glEnd();
glFlush(); / / on force l´affichage
glDisable(GL_TEXTURE_2D); / / desactive les textures
glutSwapBuffers(); / / on inverse les buffers
glutPostRedisplay(); / / fenetre redessiné
}
/ / fonction gestion du clavier
void clavier(unsigned char key, int x, int y)
{
switch(key)
{
case 27: / / touche ECHAP
glutDestroyWindow(glutGetWindow());
exit(0);
break;
}
}
/ / fonction principale
int main(int argc, char** argv)
{
glutInit(&, argv); / / init GLUT
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); / / double buffering, couleur RGB
glutInitWindowPosition(0, 0); / / position de depart
glutInitWindowSize(800, 600); / / taille fenetre
glutCreateWindow("Love Demo"); / / creation fenetre
// on charge l´image
loadTGA("data\\coeur.tga", 1);
glClearColor(0.0, 0.0, 0.0, 0.0); / / " vidage" noir
glShadeModel(GL_FLAT); / / pas de degradé
glutDisplayFunc(display); / / fonction d´affichage
glutReshapeFunc(reshape); / / fonction de redimensionnement
glutKeyboardFunc(clavier); / / fonction de gestion du clavier
glutMainLoop(); / / boucle GLUT
return 1;
}
mais j´aimerais que le coeur ( l´image) que l´on voit ki occupe tout la fenetre, arrive mais progressivement... je ne sais pas trop comment faire, aucun tutorial n´explique l´animation ! !!
help ! !!
Pourquoi mets-tu :
glEnable(GL_TEXTURE_2D); / / active les textures
glBindTexture(GL_TEXTURE_2D, 1); / / creation texture
Dans ta DisplayFunc ?
Mets les dans une InitFunc et supprime glDisable( GL_TEXTURE_2D ) .
Euh non, laisse le glBind dans la fonction display, erreur de copier/collé
Mais jette un oeil la dessus : tout est expliqué http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=06
pour:
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, 1);
j´ai lu un bouquin sur OpenGL et c´est comme ca qu´ils disent de faire, alors je fais comme ca ! !!
glTexCoord2i(1, 1);
FAUX : avec ça tu as une texture d´un seul pixel
-->
glTexCoord2f(1, 1);
et pareil pour les 3 autres
un conseil aussi : le meme que lagit : le glenable dans le init, et pas dans la boucle