OpenGL:线条不会渲染

时间:2011-09-15 01:23:25

标签: 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};
        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 个答案:

答案 0 :(得分:1)

我假设发生的事情是线条实际渲染,但仍有顶点法线设置,指向远离光源,或为0.简单修复:绘制线条时禁用光照。

虽然可以“照亮”线条,但如果假定“常规”基于法线的照明模型,则整个操作没有意义。线条没有法线方向,它们有一个法线平面(换句话说,它是一条直线切线)。

因此照亮线条的正确方法是基于切线的着色。固定功能OpenGL无法做到这一点,但使用着色器实现它是微不足道的。

答案 1 :(得分:0)

为您提出几点建议,请问您的第二个代码段:

1)您可能不需要'glEnable(GL_COLOR_MATERIAL)',尝试注释掉该行。

2)你将int传递给glColor3f()。尝试使用glColor3f(1.0f,0.0f,0.0f);代替。

另外,你是否在没有立方体的情况下检查线条图? (即,是否被遮挡)