首页 > 解决方案 > PyOpenGL。glVertexPointer 将 RAM 加载到无穷大

问题描述

一切正常,但 RAM 加载速度非常快,我认为它的 glVertexPointer 在循环中。这是我的简化代码

...
pygame.init()
display = (800, 600)
screen = pygame.display.set_mode(display, DOUBLEBUF|OPENGL)
glClearColor(4/255, 4/255, 22/255, 1)
glEnableClientState(GL_VERTEX_ARRAY)
VBO = glGenBuffers(1)
...

while True:
    ....

    vertices = vertices @ A           # A = np.array((3, 3)), vertices = np.array((N, 3)), N~2000
    vertices1 = np.ravel(vertices)
    glBindBuffer(GL_ARRAY_BUFFER, VBO)
    glVertexPointer(3, GL_FLOAT, 0, vertices1)
    # glBufferSubData(GL_ARRAY_BUFFER, 0, vertices1.nbytes, vertices1)
    glDrawArrays(GL_LINES, 0, l_v)
...

如果对此发表评论,则 RAM 不会加载:

# glVertexPointer(3, GL_FLOAT, 0, vertices1)

我是 OpenGL 的新手,不知道做我想做的事情的正确方法。我想及时动态地操作顶点。碰巧我的电脑很旧,安装了OpenGL 2.0。请帮帮我

标签: pythonopenglpyopengl

解决方案


这解决了我的 RAM 问题

import array
vertices1 = array.array('f', vertices1)
glVertexPointer(3, GL_FLOAT, 0, vertices1.tobytes() )

但是将 fps 从 100 转换为 30,我使用两个转换循环

更新。

这很理想

vertices1 = np.ravel(vertices)
vertices1 = np.array(vertices1, dtype='f')
glVertexPointer(3, GL_FLOAT, 0, vertices1.tobytes() )   

推荐阅读