Арифметика с указателями и навигация по массивам malloc - PullRequest
0 голосов
/ 07 августа 2009

Хорошо, я работаю над приложением OpenGL ES для iPhone и столкнулся с интересной проблемой.

У меня есть функция, которая вычисляет вершины, нормали и координаты текстуры сферы, зависящей от уровня детализации и диапазона сферических координат.

Изначально сохранение вершины в массиве выглядело примерно так:

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

Мои вопросы: что случилось с использованием временного указателя и его перемещением вперед? Является ли то, что у меня сейчас, столь же эффективным, или арифметика указателей будет лучше?

1 Ответ

2 голосов
/ 07 августа 2009

Судя по тому, что вы опубликовали, оно должно быть точно таким же.Первое, о чем я могу подумать, это то, что ошибка находится где-то еще в вашем коде.

Единственное, о чем я могу думать, это то, что вместо того, чтобы брать массив вершин, он может фактически принимать массивкоординат и координаты могут содержать отступы, что также может объяснить разницу.

...