2

我正在尝试学习为 iPhone 编写 OpenGL 应用程序。如何移植以下代码以使用 OpenGL-ES?我知道我必须将顶点存储在一个数组中,然后调用 glDrawArrays(),但是有没有最佳的方法来做到这一点?我的想法是创建一个非常大的数组,并简单地保留一个计数器来计算填充了多少空间。这有更好的办法吗?使用 NSArray 然后转换回 ac 数组怎么样?

glBegin(GL_LINE_STRIP);

z = -50.0f;
for(angle = 0.0f; angle <= (2.0f*3.1415f)*3.0f; angle += 0.1f)
    {
    x = 50.0f*sin(angle);
    y = 50.0f*cos(angle);

    // Specify the point and move the Z value up a little   
    glVertex3f(x, y, z);
    z += 0.5f;
    }

// Done drawing points
glEnd();
4

2 回答 2

1

听起来像是经典的速度/内存权衡。如果内存非常稀缺,请尝试使用动态的数据结构。如果您对数组的大小有一个合理的界限,并且从该等式中您确切地知道需要多少个顶点,那么只需像您建议的那样使用带有计数器的普通旧静态数组。

看起来你知道数组,并绘制数组,所以我不会深入讨论。

祝你好运!

于 2009-05-05T18:40:32.180 回答
1

如果您有足够的空间并且知道数组的最大大小,最简单的方法是使用一个静态分配的大数组并跟踪其当前的逻辑大小。

如果内存不足但处理器资源充足,则动态打包数组,然后注册数组并调用 glDrawArrays()。

混合方法是使用可以更新(如有必要)的动态分配数组。您可以通过在动态数组快满时重新分配动态数组或使用某种 NSMutableArray 来手动执行此操作。(NB NSArray 用于静态数组;NSMutableArrays(子类)是动态的。请参见此处。

希望这有帮助:)

于 2009-05-05T20:17:31.993 回答