python - 合并多个线段

标签 python opengl merge pyopengl line-segment

我的程序使用 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/

相关文章:

python - Tkinter 获取图像以跟随光标并进行先前的移动

python - 在 PyQt 中使用 matplotlib 图

c - Opengl 什么也没画,只是告诉我没有错误

c++ - 哪个缓存最友好?

Pandas 将切割中的列添加到 DataFrame

python - 如何在theano中保存/序列化训练好的模型?

python - 替换字符串中的特定单词 (Python)

c++ - 如何在现代opengl中绘制圆柱体

java - 在 pdfbox 2.00 中使用 PDFMergerUtility 合并文档

r - 将一个非空的 data.frame 与一个空的合并时的奇怪行为