У меня был быстрый вопрос по openGL ES 2.0. Я пытаюсь создать на экране несколько рисунков, которые потребуют нескольких геометрий. Вот как я создаю геометрию.
(void)setupBoxGeometry{
GLuint vertexBuffer;
glGenBuffers(1, &vertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(BoxVertices), BoxVertices, GL_STATIC_DRAW);
GLuint indexBuffer;
glGenBuffers(1, &indexBuffer);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexBuffer);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(BoxIndices), BoxIndices, GL_STATIC_DRAW);
}
- (void)setupLineGeometry{
GLuint vertexBuffer;
glGenBuffers(1, &vertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(LineVertices), LineVertices, GL_STATIC_DRAW);
GLuint indexBuffer;
glGenBuffers(1, &indexBuffer);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexBuffer);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(LineIndices), LineIndices, GL_STATIC_DRAW);
}
Это моя функция рендеринга
- (void)render:(CADisplayLink*)displayLink {
glClearColor(0.0/255.0, 0.0/255.0, 0.0/255.0, 1.0);
glClear(GL_COLOR_BUFFER_BIT);
float h = 4.0f * self.frame.size.height / self.frame.size.width;
glViewport(0, 0, self.frame.size.width, self.frame.size.height);
glVertexAttribPointer(_positionSlot, 3, GL_FLOAT, GL_FALSE,
sizeof(Vertex), 0);
glVertexAttribPointer(_colorSlot, 4, GL_FLOAT, GL_FALSE,
sizeof(Vertex), (GLvoid*) (sizeof(float) * 3));
// Do some thing to the projection
CC3GLMatrix *projection = [CC3GLMatrix matrix];
[projection populateFromFrustumLeft:-2 andRight:2 andBottom:-h/2 andTop:h/2 andNear:4 andFar:10];
glUniformMatrix4fv(_projectionUniform, 1, 0, projection.glMatrix);
// Create the base for the square to be drawn on the screen
_baseMatrix = [CC3GLMatrix matrix];
[_baseMatrix populateFromTranslation:CC3VectorMake(-3.0, -5.2 + _yIncrease, -10)];
[_baseMatrix scaleByX:0.5];
[_baseMatrix scaleByY:_yIncrease];
[_baseMatrix rotateBy:CC3VectorMake(0, _rotationAngle, 0)];
glUniformMatrix4fv(_modelViewUniform, 1, 0, _baseMatrix.glMatrix);
glDrawElements(GL_TRIANGLES, sizeof(BoxIndices)/sizeof(BoxIndices[0]),
GL_UNSIGNED_BYTE, 0);
}
Я вызываю функцию геометрии ящика перед вызовом функции геометрии линии. Проблема в том, что теперь моя функция рендеринга рисует только линии. Он не рисует никаких коробок. Что я делаю неправильно. Если вопрос не ясен, я могу дать больше разъяснений /