使用Python OpenGL绘制多个对象并找到好的方法

我是OpenGL的新手,并在python中将其用于项目。我试图绘制多个东西,只是创建一个缓冲区。我只想知道这是否是一个方法,否则,我想念的是什么。另外,我想知道多个缓冲区是否有用。另外,在此代码中,我没有看到 glEnable(GL_MULTISAMPLE)的任何效果,这是为了改善视觉效果。当我尝试关闭窗口时,程序显示出一些滞后。

为了简化起见,我只是介绍这两个函数而不是整个代码 initialize()函数创建一个着色器程序并绑定一个缓冲区。在 render()函数中,进行实际的绘制操作。 顶点数组包含圆形坐标,而 triangle 数组包含三角形坐标。我正在执行三个绘制操作。

VERTEX_SHADER = """
#version 330
    layout (location = 0) in vec4 position;
    uniform vec4 MVP;

    
    void main() {
    gl_Position = position;
    

}

"""

FRAGMENT_SHADER = """
#version 330
    out vec4 FragColor;
    uniform vec4 ourColor;
    
    
    void main() {

    FragColor = ourColor;

    }

"""

#global varialbles
shaderProgram = None
VBO = None
triangles = []
vertices = []

def initialize():
    global VERTEXT_SHADER
    global FRAGMENT_SHADER
    global shaderProgram
    global triangles
    global vertices 

    #compiling shaders
    vertexshader = shaders.compileShader(VERTEX_SHADER,GL_VERTEX_SHADER)
    fragmentshader = shaders.compileShader(FRAGMENT_SHADER,GL_FRAGMENT_SHADER)

    #creating shaderProgram
    shaderProgram = shaders.compileProgram(vertexshader,fragmentshader)

    a = 5 
    vertices = []

    for t in np.arange(-4,4,0.01):
        x = a*math.cos(t)
        y = a*math.sin(t)
        
        vertices.append(x)
        vertices.append(y)
        vertices.append(0.0)
 
    vertices = np.array(vertices,dtype=np.float32)
    vertices = vertices/10   
   
    triangles = [-0.5,-0.5,0.0,0.5,0.0]


    triangles = np.array(triangles,dtype=np.float32)

    
    VBO = glGenBuffers(1)
    glBindBuffer(GL_ARRAY_BUFFER,VBO)


def render(window):
    global shaderProgram
    global triangles
    global vertices 

    #accessing ourColor variable from shaderProgram
    vertexColorLoc = glGetUniformlocation(shaderProgram,"ourColor")

    #####draw figures in screen####
    glClearColor(0,1)
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)

    glEnable(GL_MULTISAMPLE);
    gluseProgram(shaderProgram)


    #draw 1 - circle with fill color
    glBufferData(GL_ARRAY_BUFFER,vertices.nbytes,vertices,GL_STATIC_DRAW)
    glVertexAttribPointer(0,3,GL_FLOAT,GL_FALSE,None)
    glEnabLevertexAttribArray(0)
    gluniform4f(vertexColorLoc,100/255.0,28/255.0,20/255.0,1);
    glDrawArrays(GL_TRIANGLE_FAN,800)

    #draw 2 - circle border
    gluniform4f(vertexColorLoc,1,1);
    gllinewidth(3)
    glDrawArrays(GL_LInes,800)



    #draw 3 - triangle from different vertex array 
    glBufferData(GL_ARRAY_BUFFER,triangles.nbytes,triangles,GL_STATIC_DRAW)
    glEnabLevertexAttribArray(0)
    gluniform4f(vertexColorLoc,1);
    glDrawArrays(GL_TRIANGLES,3)
       
    gluseProgram(0)   

    glfw.swap_buffers(window)

enter image description here

相关文章

功能概要:(目前已实现功能)公共展示部分:1.网站首页展示...
大体上把Python中的数据类型分为如下几类: Number(数字) ...
开发之前第一步,就是构造整个的项目结构。这就好比作一幅画...
源码编译方式安装Apache首先下载Apache源码压缩包,地址为ht...
前面说完了此项目的创建及数据模型设计的过程。如果未看过,...
python中常用的写爬虫的库有urllib2、requests,对于大多数比...