好的,所以我正在为iPhone开发OpenGL ES应用程序,但遇到了一个有趣的问题。
我有一个函数,可以根据细节级别和球坐标范围来计算球的顶点,法线和纹理坐标。
最初,将顶点存储在数组中看起来像这样:
//After I figure out the size of the vertices:
GLfloat* vertices = (GLfloat *) (malloc(sizeof(GLfloat) * arraySize)));
//Later on when I'm computing vertices...
GLfloat* vertPosition = vertices;
vertPosition[0] = px;
vertPosition[1] = py;
vertPosition[2] = pz;
vertPosition += 3;
事实证明这是一场灾难。我最终得到了类似AT&T徽标的标志。 :-)我发现做了更多的工作,添加了一个计数器,并使用该计数器对数组进行索引,从而修复了所有问题:
vertPosition[(vertexCount * 3) + 0] = px;
vertPosition[(vertexCount * 3) + 1] = py;
vertPosition[(vertexCount * 3) + 2] = pz;
vertexCount++;
我的问题是:使用临时指针并将其向前移动会发生什么?是我现在获得的效率一样高,还是指针算法会更好?
最佳答案
从您发布的内容看,它应该完全相同。我能想到的第一件事是该错误在代码中的其他位置。
我唯一想到的另一件事是,如果实际上不采用一组顶点,而是实际上需要一组坐标,并且坐标中可能有填充,那么这也可以解释差异。
关于c - 指针算术和导航分配的数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1241988/