OpenGL:线不会被渲染

OpenGL:线不会被渲染,opengl,3d,rendering,line,Opengl,3d,Rendering,Line,使用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}; GLflo

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

我假设实际渲染的是直线,但仍然有一个顶点法线集,指向远离光源,或者为0。轻松修复:绘制线时禁用照明

虽然可以“照亮”线路,但如果假设采用“常规”基于法线的照明模型,则整个操作毫无意义。直线没有法向,它们有一个法向平面(或者换句话说,一条直线本身相切)


因此,照亮直线的正确方法是基于切线的着色。固定函数OpenGL无法实现此功能,但使用着色器实现此功能非常简单。

为您提供几点建议,w.r.t您的第二个代码片段:

1) 您可能不需要“glEnable(glEnable(GL_COLOR_MATERIAL)”,请尝试注释这一行

2) 您正在将int传递给glColor3f()。尝试使用glColor3f(1.0f、0.0f、0.0f);相反


另外,您是否检查了没有立方体在同一位置的线条图?(即,它是否被遮挡)

我忘了提到,我还试图在代码的开头包含glDisable(GL_LIGHTING),但仍然没有发生任何事情。