2017-10-14 14 views
0

J'essaie de faire pivoter un cercle avec OpenGL, mais seule la moitié du cercle est affichée lors de la rotation. Je suppose qu'il y a quelque chose qui ne va pas dans init(). Voici le code:ne voit que la moitié de l'objet lors de la rotation opengl

float angle = 0.0f; 

void display(void) 
{ 

    glClearColor(1.0f, 1.0f, 1.0f,1.0f); 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 


    glColor3f(0.0, 0.0, 0.0); 
    glPushMatrix(); 
    //glTranslatef(x, y, 0); // Move circle to desired location. 
    glRotatef(angle, 0, 0, 1); 
    drawCircle(10.0, 50.0); 

    glPopMatrix(); 

    glutSwapBuffers(); 
} 

void timer(int val) 
{ 
    angle += 0.5f; 
    glutTimerFunc(val, timer, val); 
    glutPostRedisplay(); 
} 

void init() 
{ 
    glEnable(GL_DEPTH_TEST); 

    glViewport(0, 0, width, height); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glOrtho(-15.0, 15.0, -15.0, 15.0, 0.0, 200); 
    } 

int main(int argc, char **argv) 
{ 
    .. 
    glutDisplayFunc(display); 

    glutTimerFunc(10, timer, 10); 

    init(); 
    glutMainLoop(); 
    return 0; 
} 

Répondre

0

Depuis le plan est proche de 0 dans votre projection orthographiques, je suppose, que la moitié du cercle est coupé par le plan proche.

La matrice de projection décrit la correspondance entre les points 3D d'une scène et les points 2D de la fenêtre. Il se transforme de l'espace des yeux en espace de clip, et les coordonnées dans l'espace du clip sont transformées en coordonnées de périphérique normalisées (NDC) en divisant par le composant w des coordonnées du clip. Les NDC sont compris entre (-1, -1, -1) et (1,1,1). Chaque géométrie qui est hors du NDC est découpée.
Lors de la projection orthographique, les coordonnées dans l'espace des yeux sont mappées linéairement aux coordonnées de l'appareil normalisées.

enter image description here

Cela signifie, toute la géométrie qui se trouve dans le quadrilatère défini par left, right, bottom, top, near et far, est dessiné sur la vue. Si la géométrie n'est pas entre le plan proche et le plan éloigné, ce n'est pas un dessin. Vous devez choisir le plan proche et lointain de cette façon, que toute la géométrie est entre les deux. Les valeurs pour left, right, bottom, top, near et far sont définies par glOrtho. Adaptez votre code comme ceci:

glOrtho(-15.0, 15.0, -15.0, 15.0, -200.0, 200.0);