Как включить цветные вершины в OpenGL ES (используя GLKit)?

Я начал изучать OpenGL на этих выходных и обнаружил довольно много времени для обучения. Со многими вещами мне удалось справиться, но теперь я застрял...

Я создал массив вершин. Каждая вершина (vertexT) состоит из 3-х векторов (положения, нормали и цвета). Каждый вектор (GLKVector3) представляет собой тройку чисел с плавающей запятой (т. е. x, y, z или r, g, b). Поскольку GLKVector3 определен как применимый к цветам, я предполагаю, что opengl счастлив работать со значениями цвета, которые не указывают третье число с плавающей запятой (т.е. альфу)

Моя функция для настройки объектов gl выглядит так: glBindVertexArrayOES(_vertexArrayObject);

glGenBuffers(1, &_vertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, _vertexBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertexT) * _vertexCount, [_vertexData mutableBytes], GL_STATIC_DRAW);

glEnableVertexAttribArray(GLKVertexAttribPosition);
glVertexAttribPointer(GLKVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, sizeof(vertexT), BUFFER_OFFSET(0));

glEnableVertexAttribArray(GLKVertexAttribNormal);
glVertexAttribPointer(GLKVertexAttribNormal, 3, GL_FLOAT, GL_FALSE, sizeof(vertexT), BUFFER_OFFSET(sizeof(GLKVector3)));

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

glBindVertexArrayOES(_vertexArrayObject);
glDrawElements(GL_TRIANGLES, _triangleCount * 3, GL_UNSIGNED_SHORT, [_triangleData mutableBytes]);

Итак, теперь я хочу настроить цвет каждой вершины для моей модели, поэтому я добавил следующее:

glEnableVertexAttribArray(GLKVertexAttribColor);
glVertexAttribPointer(GLKVertexAttribColor, 3, GL_FLOAT, GL_FALSE, sizeof(vertexT), BUFFER_OFFSET(sizeof(GLKVector3)*2));

Но все равно белый. Мне удалось найти вопрос на SO, который звучал как моя проблема, но предложенное решение состояло в том, чтобы вызвать glEnable с GL_COLOR_MATERIAL и насколько Я могу сказать, что эта константа недействительна в OpenGL ES (согласно страница SDK на Khronos).

Я уверен, что это что-то простое. Но я этого не вижу. Небольшая помощь?


person AJ Bertenshaw    schedule 02.10.2012    source источник


Ответы (1)


В конце концов нашел способ включить цветные материалы в GLKit.

Эта строка делает свое дело:

self.effect.colorMaterialEnabled = GL_TRUE;
person AJ Bertenshaw    schedule 02.10.2012
comment
Вы уверены, что это была проблема? Я добавил ваш код для установки цветов в примере, над которым я работаю, чтобы нарисовать два треугольника. Это сработало в первый раз, нигде не устанавливая colorMaterialEnabled. Я также новичок в OpenGL-ES. - person Max MacLeod; 18.01.2013