Я начал изучать 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).
Я уверен, что это что-то простое. Но я этого не вижу. Небольшая помощь?