Так что у меня возникла небольшая проблема с перекосом чертежа OpenGL 1.1.Справочная информация. По сути, это приложение для рисования (часть кода позаимствовано у glPaint), в котором пользователь может рисовать различными цветами и точками ширины.Когда они выходят из экрана рисования, я использую glReadPixels, чтобы сохранить данные о цвете пикселя в формате RGBA.Когда они возвращаются, чтобы продолжить рисование, я беру данные о цвете с диска, помещаю их в colorPointer и генерирую массив вершин примерно так:
typedef struct _vertexStruct{ GLfloat position[2];} vertexStruct;
vertexStruct vertices[VERTEX_SIZE];
И цикл
GLfloat row = 0.0f;
GLfloat col = 768.0f;
for (int i = 0; i < (768 * 1024); i++) {
if (row == 1024.0f) {
col-- ;
row = 0.0f;
}
else {
row++;
}
vertices[i].position[0] = row;
vertices[i].position[1] = [self bounds].size.height - col;
}
А вот фактические вызовы рисования:
glVertexPointer(2, GL_FLOAT, sizeof(vertexStruct),&vertices[0].position);
glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(pixelData.data), pixelData.data);
glEnableClientState(GL_COLOR_ARRAY);
glDrawArrays(GL_POINTS, 0, VERTEX_SIZE);
glDisableClientState(GL_COLOR_ARRAY);
// Display the buffer
glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);
[context presentRenderbuffer:GL_RENDERBUFFER_OES];
Итак, рисование выполнено успешно, но оно перекошено слева от того места, где оно должно быть.Я думал, что я компенсирую OpenGL (я использую стандартную систему координат bottom = 0, left = 0) -> Различия в системе координат UIKit с помощью вызова
vertices[i].position[1] = [self bounds].size.height - col;
в цикле, но это может простобыть наивным предположением.У кого-нибудь есть какие-либо подсказки относительно того, что я делаю неправильно или, возможно, что мне нужно сделать в дополнение, чтобы рисунок появился в нужном месте ??Заранее спасибо!
ОБНОВЛЕНИЕ: Решено, я просто нарисовал сохраненное изображение в текстуру (текстура NPOT)!Если у кого-то еще есть проблемы с рисованием текстур NPOT, это должно сработать, по крайней мере, для меня, с единственной оговоркой, что он не поддерживается на более ранних устройствах ...