代码之家  ›  专栏  ›  技术社区  ›  Jared Forsyth appas

pyglet opengl图形反走样

  •  11
  • Jared Forsyth appas  · 技术社区  · 14 年前

    我一直在寻找一种在opengl中消除别名的方法,但是它们似乎都不起作用……下面是一些示例代码:

    import pyglet                                                                      
    from pyglet.gl import *                                                            
    
    window = pyglet.window.Window(resizable=True)                                      
    
    @window.event                                                                      
    def on_draw():                                                                     
        window.clear()                                                                 
        pyglet.gl.glColor4f(1.0,0,0,1.0)                                               
        glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)                             
        glEnable (GL_BLEND)                                                            
        glEnable (GL_LINE_SMOOTH);                                                     
        glHint (GL_LINE_SMOOTH_HINT, GL_DONT_CARE)                                     
        glLineWidth (3)                                                                
        pyglet.graphics.draw(2, pyglet.gl.GL_LINES,                                    
            ('v2i', (10, 15, 300, 305))                                                
        )                                                                              
    
    pyglet.app.run() 
    

    有人知道我做错了什么吗?

    2 回复  |  直到 14 年前
        1
  •  11
  •   Xavier Ho    14 年前

    允许pyglet使用额外的示例缓冲区可能会有所帮助。将窗口线更改为:

    config = pyglet.gl.Config(sample_buffers=1, samples=4)
    window = pyglet.window.Window(config=config, resizable=True) 
    

    这对我有用。

        2
  •  8
  •   Community TheSoundDefense    7 年前

    很难说清楚。第一件事可能是把你的暗示从“不在乎”改为“最好”。它可能不会对大多数显卡有太大的影响,但可能会有点帮助。

    除此之外,有点难说。这里有一点代码(C++中的,对不起):

    void draw_line(float y_offset) { 
        glBegin(GL_LINES);
            glColor3f(1.0f, 1.0f, 1.0f);
            glVertex3f(-1.0f, 0.0f+y_offset, -1.0f);
            glVertex3f(1.0f, 0.1f+y_offset, -1.0f);
        glEnd();
    }
    
    void draw() { 
        glClearColor(0.0f, 0.0f, 0.2f, 1.0f);
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
    
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
    
        glFrustum(-1.2f, 1.2f, -0.2f, 0.2f, 0.8f, 5.0f);
    
        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();
    
        glEnable(GL_DEPTH_TEST);
        glEnable(GL_BLEND);
        glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    
        glLineWidth(3.0f);
        glDisable(GL_LINE_SMOOTH);
        draw_line(0.0f);
        glEnable(GL_LINE_SMOOTH);
        glHint(GL_LINE_SMOOTH_HINT, GL_DONT_CARE);
        draw_line(-0.1f);
        glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);
        draw_line(-0.2f);
    
        glFlush();
    }
    

    下面是我从中得到的输出:

    alt text

    启用“线平滑”(Line Smoothing)时的差异似乎非常明显。不在乎和最好的区别是 许多 少一些。