Pb affichage de polygone

dbtm Messages postés 9 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 11 juin 2003 - 9 avril 2003 à 13:51
dbtm Messages postés 9 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 11 juin 2003 - 9 avril 2003 à 23:31
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

cs_payen Messages postés 252 Date d'inscription mercredi 25 octobre 2000 Statut Membre Dernière intervention 1 mai 2005
9 avril 2003 à 16:12
tu peux mettre ton code, surtout l'initialisation, pour qu'on voit un peu?
0
dbtm Messages postés 9 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 11 juin 2003
9 avril 2003 à 16:29
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();
}
0
cs_payen Messages postés 252 Date d'inscription mercredi 25 octobre 2000 Statut Membre Dernière intervention 1 mai 2005
9 avril 2003 à 19:02
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
0
dbtm Messages postés 9 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 11 juin 2003
9 avril 2003 à 23:27
-------------------------------
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.
> > >
> >
>
0

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

Posez votre question
dbtm Messages postés 9 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 11 juin 2003
9 avril 2003 à 23:31
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
0
Rejoignez-nous