Необычные световые эффекты - случайные цветные полигоны - PullRequest
1 голос
/ 30 сентября 2011

Я работаю над созданием загрузчика объектов для использования с 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 Ответ

1 голос
/ 01 октября 2011

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

glNormalPointer(GL_FLOAT, 3, normals);

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

glNormalPointer(GL_FLOAT, 0, normals);

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

...