无法将某些 GL 线条移植到核心轮廓

Trouble porting some GL line strips to core profile

提问人:Jason C 提问时间:10/30/2023 最后编辑:Jason C 更新时间:10/31/2023 访问量:33

问:

我必须将一些遗留的 OpenGL 代码移植到 3.3+ 核心配置文件(我只是有点熟悉),但有一个特定的部分我遇到了一些麻烦,因为我能想到的唯一方法涉及相当膨胀的代码量。

基本上,我有这个:

def lines (*points):
    glBegin(GL_LINE_STRIP)
    for p in points:
        glVertex3fv(p)
    glEnd()

glLineWidth(1)
for camera in self._cameras.values():
    for b in camera.cameraPparts.values():
        lines(b.head, b.neck, b.center)
        lines(b.neck, b.lshoulder, b.lelbow, b.lwrist)
        lines(b.neck, b.rshoulder, b.relbow, b.rwrist)
        lines(b.center, b.lhip, b.lknee, b.lankle)
        lines(b.center, b.rhip, b.rknee, b.rankle)

也就是说,我画了一堆多段线,使用 .GL_LINE_STRIP

每个条带都是一条单独的折线,因此它总共有五条线条。此外,该循环中还有三个“摄像机”,因此总共有 15 条线条。

到目前为止,我知道如何使用我所知道的核心配置文件来做到这一点的唯一方法是:

  1. 创建 15 个单独的 VAO
  2. 为每个 VBO 创建一个 VBO(15 次)
  3. 将每条多边线加载到其自己的 VBO 中(15 次)
  4. glDrawArray每个VBO(15次)

这似乎是五行的大量代码和数据管理。

有没有一种更流畅、更冗长的方法来实现这一目标?

我在其他地方也有类似的问题,所以这里的任何东西也可以适用于它。GL_LINE_LOOP

蟒蛇 opengl-3

评论

2赞 BDL 10/30/2023
如果将它们转换为 ,则可以使用单个 VAO/VBO 渲染所有这些。如果您只有一堆,那么额外的内存可能会被忽略。因此,对于线条 A-B-C,您必须将 A-B-B-C 与线条一起使用。GL_LINES
2赞 Rabbid76 10/30/2023
请参见顶点渲染 - 基元重启

答: 暂无答案