Pb affichage de polygone

Signaler
Messages postés
9
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
11 juin 2003
-
Messages postés
9
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
11 juin 2003
-
J'essaie d'afficher un polygone. Quand je fait tourner le polygone, il disparaît par moment.
Si j'aligne le polygone sur les axes et que je le tourne, çà marche bien, mais dès que je le mets en biais, le polygone se transforme en triangle ou disparaît complètement pour certains angles de rotation.

Merci pour toute aide.

5 réponses

Messages postés
252
Date d'inscription
mercredi 25 octobre 2000
Statut
Membre
Dernière intervention
1 mai 2005

tu peux mettre ton code, surtout l'initialisation, pour qu'on voit un peu?
Messages postés
9
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
11 juin 2003

OK: voici des morceaux du code
void init()
{
char* arPath[]={"texture/wood4.bmp"};
texture=new CTexture(1,arPath);
figure0=new CFigure(texture);
cadre=new CCadre(texture);

glClearColor(0.0,0.0,0.0,0.0);
}
void reshape(int w,int h)
{
glViewport(0,0,(GLsizei)w,(GLsizei)h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(75,1.33,0,120);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(50,50,25,50,0,-50,0,1,0);
}
void main(int argc, char** argv)
{
raw_key=0;
action=action1;
action();
//lastKbVect=_dos_getvect(0x09);
//_dos_setvect(0x09,scannetouches);
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB| GLUT_DEPTH);
midscreenx=300;
glutInitWindowSize(2*midscreenx,500);
glutInitWindowPosition(1,1);
//glutFullScreen(); //qui bizarrement ne marche pas
glutCreateWindow("simple");
init();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
ShowCursor(FALSE);
glutMotionFunc(souris);
glutPassiveMotionFunc(souris);
glutIdleFunc(anime);
_beginthread(scannetouches,0,NULL);
glutMainLoop();
end();
}

Et le truc que j'affiche:
CFigure::CFigure(CTexture *texture):theta(0),x(50),y(0),z(-20)
{
this->texture=texture;
listeFigure=glGenLists(8);
float rayon=20, taille=30,angle=PISUR2/2;
short v1[3]={0,taille+rayon,0};
short v2[3]={0,taille,0};
short v3[3]={0,taille,0};
unsigned short i;
// float n[3]={0,0,1};
for(i=0;i<4;i++)
{
glNewList(listeFigure+i,GL_COMPILE);
{
glPushAttrib(GL_CURRENT_BIT);
glColor3f(fabs(cos(angle)),fabs(sin(angle)),0);
glBegin(GL_TRIANGLES);
v2[0]=rayon*cos(angle);
v2[2]=rayon*sin(angle);
angle+=PISUR2;
v3[0]=rayon*cos(angle);
v3[2]=rayon*sin(angle);
glVertex3sv(v1);
glVertex3sv(v2);
glVertex3sv(v3);
glEnd();
glPopAttrib();
}
glEndList();
}
...etc
}
void CFigure::affiche()
{
glPushMatrix();
glTranslatef(x,y,z);
glRotatef(theta,0,1,0);
glCallList(listeFigure);
glCallList(listeFigure+1);
glCallList(listeFigure+2);
glCallList(listeFigure+3);
glCallList(listeFigure+4);
glCallList(listeFigure+5);
glCallList(listeFigure+6);
glCallList(listeFigure+7);
glPopMatrix();
}
Messages postés
252
Date d'inscription
mercredi 25 octobre 2000
Statut
Membre
Dernière intervention
1 mai 2005

c'est peut etre un probleme de masquage des faces avant/faces arriere. essaies en rajoutant ca dans ta fonction d'initialisation:
glDisable(GL_CULL_FACE);
glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);

dis moi si ca marche
Messages postés
9
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
11 juin 2003

-------------------------------
Réponse au message :
-------------------------------

> c'est peut etre un probleme de masquage des faces avant/faces arriere. essaies en rajoutant ca dans ta fonction d'initialisation:
> glDisable(GL_CULL_FACE);
> glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);
>
> dis moi si ca marche
>
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > OK: voici des morceaux du code
> > void init()
> > {
> > char* arPath[]={"texture/wood4.bmp"};
> > texture=new CTexture(1,arPath);
> > figure0=new CFigure(texture);
> > cadre=new CCadre(texture);
> >
> > glClearColor(0.0,0.0,0.0,0.0);
> > }
> > void reshape(int w,int h)
> > {
> > glViewport(0,0,(GLsizei)w,(GLsizei)h);
> > glMatrixMode(GL_PROJECTION);
> > glLoadIdentity();
> > gluPerspective(75,1.33,0,120);
> > glMatrixMode(GL_MODELVIEW);
> > glLoadIdentity();
> > gluLookAt(50,50,25,50,0,-50,0,1,0);
> > }
> > void main(int argc, char** argv)
> > {
> > raw_key=0;
> > action=action1;
> > action();
> > //lastKbVect=_dos_getvect(0x09);
> > //_dos_setvect(0x09,scannetouches);
> > glutInit(&argc,argv);
> > glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB| GLUT_DEPTH);
> > midscreenx=300;
> > glutInitWindowSize(2*midscreenx,500);
> > glutInitWindowPosition(1,1);
> > //glutFullScreen(); //qui bizarrement ne marche pas
> > glutCreateWindow("simple");
> > init();
> > glutDisplayFunc(display);
> > glutReshapeFunc(reshape);
> > ShowCursor(FALSE);
> > glutMotionFunc(souris);
> > glutPassiveMotionFunc(souris);
> > glutIdleFunc(anime);
> > _beginthread(scannetouches,0,NULL);
> > glutMainLoop();
> > end();
> > }
> >
> > Et le truc que j'affiche:
> > CFigure::CFigure(CTexture *texture):theta(0),x(50),y(0),z(-20)
> > {
> > this->texture=texture;
> > listeFigure=glGenLists(8);
> > float rayon=20, taille=30,angle=PISUR2/2;
> > short v1[3]={0,taille+rayon,0};
> > short v2[3]={0,taille,0};
> > short v3[3]={0,taille,0};
> > unsigned short i;
> > // float n[3]={0,0,1};
> > for(i=0;i<4;i++)
> > {
> > glNewList(listeFigure+i,GL_COMPILE);
> > {
> > glPushAttrib(GL_CURRENT_BIT);
> > glColor3f(fabs(cos(angle)),fabs(sin(angle)),0);
> > glBegin(GL_TRIANGLES);
> > v2[0]=rayon*cos(angle);
> > v2[2]=rayon*sin(angle);
> > angle+=PISUR2;
> > v3[0]=rayon*cos(angle);
> > v3[2]=rayon*sin(angle);
> > glVertex3sv(v1);
> > glVertex3sv(v2);
> > glVertex3sv(v3);
> > glEnd();
> > glPopAttrib();
> > }
> > glEndList();
> > }
> > ...etc
> > }
> > void CFigure::affiche()
> > {
> > glPushMatrix();
> > glTranslatef(x,y,z);
> > glRotatef(theta,0,1,0);
> > glCallList(listeFigure);
> > glCallList(listeFigure+1);
> > glCallList(listeFigure+2);
> > glCallList(listeFigure+3);
> > glCallList(listeFigure+4);
> > glCallList(listeFigure+5);
> > glCallList(listeFigure+6);
> > glCallList(listeFigure+7);
> > glPopMatrix();
> > }
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > > tu peux mettre ton code, surtout l'initialisation, pour qu'on voit un peu?
> > >
> > >
> > >
> > > -------------------------------
> > > Réponse au message :
> > > -------------------------------
> > >
> > > > J'essaie d'afficher un polygone. Quand je fait tourner le polygone, il disparaît par moment.
> > > > Si j'aligne le polygone sur les axes et que je le tourne, çà marche bien, mais dès que je le mets en biais, le polygone se transforme en triangle ou disparaît complètement pour certains angles de rotation.
> > > >
> > > > Merci pour toute aide.
> > >
> >
>
Messages postés
9
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
11 juin 2003

bizarre, mon msg de 19 h 30 n'a pas été enregistré.
Je voulais dire que çà ne marche toujours pas. J'ai essayé des valeurs différentes pour le culling. C'est vrai que le problème semble être un truc de ce genre.
J'ai essayé de comparer avec d'autres prgms sur le net mais je ne trouve vraiment pas.

merci quand même