2009-08-06 7 views
0

Ok, donc je travaille sur une application OpenGL ES pour l'iPhone, et j'ai rencontré un problème intéressant.Pointer arithmétique et navigation malloc'ed tableaux

J'ai une fonction qui calcule les sommets, les normales et les coordonnées de texture d'une sphère en fonction d'un niveau de détail et d'une plage de coordonnées sphériques.

A l'origine, le stockage d'un sommet dans un tableau ressemblait à ceci:

//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; 

Ce avéré être une catastrophe. Je me suis retrouvé avec quelque chose comme le logo AT &. :-) Un peu plus de travail que j'ai découvert l'ajout d'un compteur et en utilisant que pour indexer le tableau tout fixe:

vertPosition[(vertexCount * 3) + 0] = px; 
vertPosition[(vertexCount * 3) + 1] = py; 
vertPosition[(vertexCount * 3) + 2] = pz; 
vertexCount++; 

Mes questions sont les suivantes: Qu'est-ce qui est arrivé avec l'aide d'un pointeur temporaire et en le déplaçant en avant? Est-ce que ce que j'ai maintenant est tout aussi efficace, ou est-ce que l'arithmétique du pointeur serait meilleure?

Répondre

2

De l'apparence de ce que vous avez posté, il devrait être exactement le même. La première chose à laquelle je peux penser est que le bug est ailleurs dans votre code. La seule autre chose que je peux penser est si au lieu de prendre un tableau de verts, il pourrait effectivement prendre un tableau de coeurs et les cordes pourraient avoir un remplissage en eux alors cela pourrait aussi expliquer la différence.