python - 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。请帮帮我
解决方案
这解决了我的 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() )
推荐阅读
- raku - List repetition (xx) without evaluation?
- python - 如何使用 Python 中的 smtplib 发送文本或 word 文件?
- opencv - Can I move my camera after intrinsic calibration?
- c# - 如何使用 lambda 表达式从 LINQ 中的左连接中提取 max(property)
- python - python-docx 检测枚举列表
- liferay - liferay Dxp:当单击超链接时,如何从一个页面中的 portel 重定向到包含不同 portlet 的另一个页面
- node.js - 将文件从一个节点 js 服务器发送到另一个
- django - Django 表单未保存,终端显示数据并添加了保存方法
- ios - 集合视图更改间距
- ios - 启用 UiNavigationController 的边缘滑动手势但隐藏导航栏