我的程序使用 PyOpenGL(所以它是 Python)和 psyco。
我需要在渲染的每一帧中渲染大约 21,000 条线段(除非用户放大,在这种情况下线段会被剔除并且根本不会发送到卡片)。目前每帧大约需要 1.5 秒才能完成。这还不够好,所以我正在寻找减少不同线段数量的方法。
我想会有多个线段可以合并成一条大线的情况,但老实说,我什至不知道从哪里开始。我确实存储了每条线的起点和终点,所以这可能会有所帮助。请注意,我可以在启动时花费尽可能长的时间,并且内存使用量不是太大的问题。
任何想法将不胜感激。
最佳答案
几乎可以肯定,所有即时模式函数调用的开销都会降低您的性能。我会做以下事情。
不要使用 GL_LINE_STRIPS
,而是使用 GL_LINES
的单个列表,这样它们就可以一次性呈现。
使用 glDrawArrays
而不是即时模式渲染:
float* coordinates = {....}; //x and y coordinate pairs for all line segments
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(2, GL_FLOAT, 2 * sizeof(float), coordinates);
glDrawArrays(GL_LINES, 0, 2 * linecount);
glDisableClientState(GL_VERTEX_ARRAY);
(为了获得更好的性能,您可以将顶点缓冲区存储在称为顶点缓冲区对象的东西中,但这应该没问题)
最后一件事,如果您在每行的基础上进行剔除,那么跳过它并将所有行发送到 GPU 可能会更快。
关于python - 合并多个线段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1938831/