Я, скорее, сам сейчас изучаю OpenGL ES 2.0.Я рекомендую сначала запустить новый проект в Xcode с шаблоном «OpenGL Game», который предоставляет Apple.
Помимо прочего, код шаблона Apple будет включать в себя создание GLKBaseEffect, который предоставляет некоторые функциональные возможности шейдера, которые, по-видимому, необходимы для возможности рисования с помощью OpenGL ES 2.0.(Без GLKBaseEffect вам потребуется использовать GLSL. Шаблон предоставляет пример как с явным кодом шейдера GLSL, так и без него.)
Шаблон создает функцию «setupGL», которую я изменил, чтобы она выглядела так:
- (void)setupGL
{
[EAGLContext setCurrentContext:self.context];
self.effect = [[[GLKBaseEffect alloc] init] autorelease];
// Let's color the line
self.effect.useConstantColor = GL_TRUE;
// Make the line a cyan color
self.effect.constantColor = GLKVector4Make(
0.0f, // Red
1.0f, // Green
1.0f, // Blue
1.0f);// Alpha
}
Мне удалось нарисовать линию, добавив еще несколько шагов.Все это включает в себя отправку данных в графический процессор для обработки.Вот моя функция glkView: drawInRect:
- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect
{
glClearColor(0.65f, 0.65f, 0.65f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// Prepare the effect for rendering
[self.effect prepareToDraw];
const GLfloat line[] =
{
-1.0f, -1.5f, //point A
1.5f, -1.0f, //point B
};
// Create an handle for a buffer object array
GLuint bufferObjectNameArray;
// Have OpenGL generate a buffer name and store it in the buffer object array
glGenBuffers(1, &bufferObjectNameArray);
// Bind the buffer object array to the GL_ARRAY_BUFFER target buffer
glBindBuffer(GL_ARRAY_BUFFER, bufferObjectNameArray);
// Send the line data over to the target buffer in GPU RAM
glBufferData(
GL_ARRAY_BUFFER, // the target buffer
sizeof(line), // the number of bytes to put into the buffer
line, // a pointer to the data being copied
GL_STATIC_DRAW); // the usage pattern of the data
// Enable vertex data to be fed down the graphics pipeline to be drawn
glEnableVertexAttribArray(GLKVertexAttribPosition);
// Specify how the GPU looks up the data
glVertexAttribPointer(
GLKVertexAttribPosition, // the currently bound buffer holds the data
2, // number of coordinates per vertex
GL_FLOAT, // the data type of each component
GL_FALSE, // can the data be scaled
2*4, // how many bytes per vertex (2 floats per vertex)
NULL); // offset to the first coordinate, in this case 0
glDrawArrays(GL_LINES, 0, 2); // render
}
Кстати, я проходил Изучение OpenGL ES для iOS от Эрика Бака , которую вы можете купить в форме "Rough Cut" черезО'Рейли (ранняя форма книги, поскольку она не будет полностью опубликована до конца года).На этой стадии в книге довольно много опечаток и нет картинок, но я все же нашел ее весьма полезной.Исходный код книги, кажется, очень далеко, и вы можете взять его на его блог .Автор также написал отличную книгу Cocoa Design Patterns.