【问题标题】:OpenGL: lines dont get renderedOpenGL:线条不会被渲染
【发布时间】:2011-09-15 01:23:24
【问题描述】:

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

【问题讨论】:

    标签: opengl 3d rendering line


    【解决方案1】:

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

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

    因此,照亮一条线的正确方法是使用基于切线的着色。固定功能OpenGL做不到,但是用shader实现就小菜一碟了。

    【讨论】:

    • 我忘了说,我也尝试在我的代码开头包含 glDisable(GL_LIGHTING),但仍然没有任何反应。
    【解决方案2】:

    给你一些建议,w.r.t 你的第二个代码 sn-p:

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

    2) 您将 int 传递给 glColor3f()。尝试使用 glColor3f(1.0f, 0.0f, 0.0f);而是。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-14
      相关资源
      最近更新 更多