2016-12-23 1 views
0

Я пытаюсь нарисовать двумерную сетку в зависимости от заданного значения сетки, заданного пользователем (сетка всегда квадратная). Однако для некоторых значений сетки верхняя и правая линии сетки не рисуются. Для моей жизни я не могу понять, что не так с моим кодом здесь.чертеж сетки freeGLUT не полностью рисован при определенных значениях

Это мой код в моем методе визуализации, чтобы нарисовать сетку:

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 является только вводом пользователя размера сетки. Я делю на 2.0, так как Я хочу, чтобы моя сетка имела постоянную ширину и высоту 2.0x2.0.

значения, как 10, 25, 100 все работает нормально, но значения, такие как 50 не нарисовать верхнюю и левую линию, как показано here

Это может быть какой-то тупой деталь, что я не хватает, но я просто не вижу ничего плохого в моем коде.

ответ

0

Используйте переменную целочисленного цикла & вычислить положение с плавающей точкой внутри цикла:

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(); 

Все вместе:

#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; 
} 
Смежные вопросы