2016-12-23 2 views
0

J'essaye de dessiner une grille bidimensionnelle en fonction d'un gridSize donné par l'utilisateur (la grille est toujours un carré). Toutefois, pour certaines valeurs de la grille, la ligne supérieure et la ligne droite de la grille ne sont pas dessinées. Pour la vie de moi, je ne peux pas comprendre ce qui ne va pas avec mon code ici.Le dessin de la grille freeGLUT ne dessine pas entièrement à des valeurs spécifiques

Ceci est mon code dans mon procédé pour rendre dessiner la grille:

glBegin(GL_LINES); 

for (float i = -1.0f; i <= 1.0f; i += 2.0f/(gridSize)) { 
    glVertex2f(i, 1.0f); 
    glVertex2f(i, -1.0f); 

    glVertex2f(-1.0f, i); 
    glVertex2f(1.0f, i); 
} 
glEnd(); 

gridSize se trouve à l'entrée de l'utilisateur pour la taille de la grille. Je divise par 2.0, puisque je veux que ma grille ait une largeur et une taille constantes de 2.0x2.0.

Des valeurs telles que 10, 25, 100 fonctionnent tous très bien, mais des valeurs telles que 50 ne tirent pas la première ligne et à gauche, comme le montre here

Il est peut-être un détail muet que je suis absent, mais je ne peux rien voir de mal avec mon code.

Répondre

0

utiliser une variable de boucle entier & calculer la position en virgule flottante à l'intérieur de la boucle:

glBegin(GL_LINES); 
for(unsigned int j = 0; j <= gridSize; ++j) 
{ 
    const float i = -1.0f + (j * 2.0f/(gridSize)); 
    glVertex2f(i, 1.0f); 
    glVertex2f(i, -1.0f); 
    glVertex2f(-1.0f, i); 
    glVertex2f(1.0f, i); 
} 
glEnd(); 

Tous ensemble:

#include <GL/glut.h> 

void display() 
{ 
    glClearColor(0, 0, 0, 1); 
    glClear(GL_COLOR_BUFFER_BIT); 

    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glOrtho(-1.1, 1.1, -1.1, 1.1, -1, 1); 

    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 

    const unsigned int gridSize = 50; 
    glBegin(GL_LINES); 
    for(unsigned int j = 0; j <= gridSize; ++j) 
    { 
     const float i = -1.0f + (j * 2.0f/(gridSize)); 
     glVertex2f(i, 1.0f); 
     glVertex2f(i, -1.0f); 
     glVertex2f(-1.0f, i); 
     glVertex2f(1.0f, i); 
    } 
    glEnd(); 

    glutSwapBuffers(); 
} 

int main(int argc, char** argv) 
{ 
    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE); 
    glutCreateWindow("GLUT"); 
    glutDisplayFunc(display); 
    glutMainLoop(); 
    return 0; 
}