Необычные световые эффекты - случайные цветные полигоны
Я работаю над созданием загрузчика объектов для использования с 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);
Видео выпуска можно найти здесь:
Спасибо,
Павел
[РЕДАКТИРОВАТЬ]
для дальнейшей информации нормали также предоставляются следующим кодом, они в настоящее время находятся в большом массиве нормалей или 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.