OpenGL到OpenGL-ES - glBegin();

时间:2009-05-05 18:34:13

标签: iphone opengl-es

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

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();

2 个答案:

答案 0 :(得分:1)

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

看起来你知道数组,并绘制数组,所以我不会进入那个。

祝你好运!

答案 1 :(得分:1)

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

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

混合方法是使用可以更新的动态分配数组(如果需要)。您可以通过在动态数组接近变满时重新分配动态数组或使用某种类型的NSMutableArray来手动执行此操作。 (N.B. NSArray用于静态数组; NSMutableArrays(子类)是动态的。See here.

希望这有助于:)