Необычные световые эффекты - случайные цветные полигоны

Я работаю над созданием загрузчика объектов для использования с iOS, мне удалось загрузить данные вершин, нормалей и граней из файла OBJ, а затем поместить эти данные в массивы для реконструкции объекта. Но у меня возникла проблема с освещением, внизу - видео с симуляции моей программы - это освещение в следующей позиции:

CGFloat position[] = { 0.0f, -1.0f, 0.0f, 0.0f };
glLightfv(GL_LIGHT0, GL_POSITION, position);

Это указывается как в методе рендеринга каждого кадра, так и в методе представления настройки, который вызывается один раз при установке.

Различные другие детали освещения здесь, они вызываются один раз во время установки:

glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
CGFloat ambientLight[] = { 0.2f, 0.2f, 0.2f, 1.0f };
CGFloat diffuseLight[] = { 1.0f, 0.0f, 0.0, 1.0f };
glLightfv(GL_LIGHT0, GL_AMBIENT, ambientLight);
glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuseLight);
CGFloat position[] = { 0.0f, -1.0f, 0.0f, 0.0f };
glLightfv(GL_LIGHT0, GL_POSITION, position);
glEnable(GL_COLOR_MATERIAL);
glEnable(GL_NORMALIZE);

Видео выпуска можно найти здесь:

http://youtu.be/dXm4wqzvO5c

Спасибо,

Павел

[РЕДАКТИРОВАТЬ]

для дальнейшей информации нормали также предоставляются следующим кодом, они в настоящее время находятся в большом массиве нормалей или XYZ XYZ XYZ и т. д.

// FACE SHADING
glColorPointer(4, GL_FLOAT, 0, colors);
glEnableClientState(GL_COLOR_ARRAY);
glNormalPointer(GL_FLOAT, 3, normals);
glEnableClientState(GL_NORMAL_ARRAY);
glDrawArrays(GL_TRIANGLES, 0, 3*numOfFaces); 
glDisableClientState(GL_COLOR_ARRAY);

1 ответ

Решение

Теперь я чувствую себя невероятно глупо... Думаю, все это из-за того, что я студент-программист. Я оставлю ответ на этот вопрос, так что, если кто-то еще столкнется с этой проблемой, он тоже сможет ее решить! Ошибка была просто опечатка:

glNormalPointer(GL_FLOAT, 3, normals);

Должен был прочитать

glNormalPointer(GL_FLOAT, 0, normals);

Вторым аргументом является STRIDE, который используется только в том случае, если массив содержит другие значения, например, Vert Coords / Normals / Texture Coords. Поскольку у меня в одном массиве шаг между значениями должен быть 0.

Другие вопросы по тегам