将遗留管道转换为现代openGL的问题

问题描述 投票:0回答:1

我正在将openGL ver 1.0应用程序转换为更现代的版本。我被困在一个函数上,需要一些帮助。

基本上,我们从文件[.SLC]格式读取数据点数据然后位于vector<vector<vector<float, float, float>>>

旧的渲染图:

for [size of first vector]
   for [size of second vector]

       glBegin(GL_LINE_LOOP);       
           for [size of third vector]
                glVertex3f(float, float, float);
       glEnd();

此3层循环表示单个对象,我正尝试通过一次调用类似于此方法的方法来呈现该对象。我似乎无法正确地做到这一点。

glVertexAttribPointer(vp, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(GLfloat), nullptr);
glDrawElements(GL_LINE_LOOP, indices.size() / sizeof(uint32_t), GL_UNSIGNED_INT, NULL);

有人能指出我正确的方向吗?如果您需要更多信息,请让我知道,我会尝试进一步解释。谢谢

我的问题是将顶点/索引的集合放在一起以发送给render函数。

如示例所示,存在3个循环。我以为在第三个循环开始之前就开始收集顶点数据。

这部分很简单,但是索引集合使我感到困惑。如果第三个循环具有[N]个顶点,我也应该具有[N]个索引。

此时,我应该将这两个集合发送到render函数吗?如果是的话,那可能会导致对render函数的数百次调用,因此下一个问题是是否有一种方法可以合并所有数据并将其作为单个调用发送?

c++ opengl shader vbo
1个回答
0
投票

如果要通过绘制调用渲染多个GL_LINE_LOOP基元,那么我建议使用GL_LINE_LOOP

© www.soinside.com 2019 - 2024. All rights reserved.