OpenGL: линии не отображаются - PullRequest
       30

OpenGL: линии не отображаются

2 голосов
/ 15 сентября 2011

Используя OpenGL, я пытаюсь нарисовать простую линию между точками p1 и p2, но она не работает.Тем не менее, я могу рендерить кубы на этих позициях.

        glEnable(GL_LIGHTING);
        glEnable(GL_LIGHT0);

        GLfloat   mat_ambient[]     = {0.0, 0.0, 1.0, 1.0};
        GLfloat   mat_flash[]       = {0.0, 0.0, 1.0, 1.0};
        GLfloat   mat_flash_shiny[] = {50.0};
        GLfloat   light_position[]  = {100.0,-200.0,200.0,0.0};
        GLfloat   ambi[]            = {0.1, 0.1, 0.1, 0.1};
        GLfloat   lightZeroColor[]  = {0.9, 0.9, 0.9, 0.1};


        glLightfv(GL_LIGHT0, GL_POSITION, light_position);
        glLightfv(GL_LIGHT0, GL_AMBIENT, ambi);
        glLightfv(GL_LIGHT0, GL_DIFFUSE, lightZeroColor);
        glMaterialfv(GL_FRONT, GL_SPECULAR, mat_flash);
        glMaterialfv(GL_FRONT, GL_SHININESS, mat_flash_shiny);  
        glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
        glMatrixMode(GL_MODELVIEW);

        glLoadIdentity(); 

        glTranslatef(p1.x, p1.y, p1.z); 
        glutSolidCube(20); 

        glLoadIdentity(); 
        glTranslatef(p2.x, p2.y, p2.z); 
        glutSolidCube(20); 
        glDisable( GL_LIGHTING );
        glDisable( GL_DEPTH_TEST );

Я использую следующий код для рендеринга строки.Но я не могу найти проблему, почему она не отображается:

        glDisable(GL_LIGHTING); 
        glEnable(GL_COLOR_MATERIAL); 

        glLoadIdentity(); 

        glColor3f(1,0,0); 
        glLineWidth(10.0); 

        glBegin(GL_LINES); //doesnt work with GL_LINE either

            glVertex3f(p1.x, p1.y, p1.z); 
            glVertex3f(p2.x, p2.y, p2.z);  
        glEnd();

Ответы [ 2 ]

1 голос
/ 15 сентября 2011

Я предполагаю, что происходит то, что линии фактически визуализируются, но все еще есть набор нормалей вершин, указывающий в сторону от источника света или равный 0. Легкое исправление: отключите освещение при рисовании линий.

Покаможно «осветить» линии, вся операция не имеет смысла, если принять «обычные» модели освещения на нормальной основе.У линий нет нормального направления, у них есть нормальная плоскость (или, другими словами, линия, это сама касательная).

Таким образом, правильный способ осветить линию - это затенение по касательной.Фиксированная функция OpenGL не может этого сделать, но реализовать ее с помощью шейдера тривиально.

0 голосов
/ 22 марта 2013

Несколько предложений для вас, во втором фрагменте кода:

1) Возможно, вам не нужен 'glEnable (GL_COLOR_MATERIAL)', попробуйте закомментировать эту строку.2) Вы передаете int в glColor3f ().Попробуйте использовать glColor3f (1.0f, 0.0f, 0.0f);вместо этого.

Кроме того, вы проверили рисование линий без куба в той же позиции?(т. е. закрыто или нет)

...