iPhone: Текстура больше 64x64?

Я взял пример с GLPaint ... Я пытаюсь поместить фон в "PaintingView", чтобы вы могли рисовать поверх фона и, наконец, сохранить изображение как файл ... Я потерялся.

Я загружаю PNG (512x512) и пытаюсь "раскрасить" в самом начале программы, но он нарисован как 64x64 вместо 512x512 ...

Я пытался, прежде чем загрузить, это как подпредставление вида рисования ... но затем glReadPixels не работает должным образом (он принимает во внимание только PaintingView, а не подвид). Также у PaintingView нет такого метода как initWithImage ... Мне НУЖНО работать glReadPixels с изображением (и в модификации), но я действительно не знаю, почему, когда я загружаю его, текстура имеет размер 64x64 ..


person Community    schedule 21.05.2009    source источник


Ответы (2)


Пример проекта GLPaint использует GL_POINT_SPRITE для рисования копий текстуры кисти при перемещении кисти. На iPhone размер glPointSize ограничен 64x64 пикселями. Это аппаратное ограничение, и я думаю, что в симуляторе его можно увеличить.

Похоже, вы пытаетесь использовать метод GL_POINT_SPRITE для рисования фонового изображения, а это действительно не то, что вам нужно. Вместо этого попробуйте нарисовать плоский текстурированный прямоугольник, заполняющий весь экран.

Вот небольшой код OpenGL, который устанавливает вершины и текскорд для 2D-блока, а затем рисует его:

const GLfloat verticies[] = {
        0.0f, 0.0f,
        1.0f, 0.0f,
        0.0f, 1.0f,
        1.0f, 1.0f,
    };

    const GLfloat texcoords[] = {
        0, 0,
        1, 0,
        0, 1,
        1, 1,
    };

    glVertexPointer(2, GL_FLOAT, 0, verticies);
    glEnableClientState(GL_VERTEX_ARRAY);
    glTexCoordPointer(2, GL_FLOAT, 0, texcoords);
    glEnableClientState(GL_TEXTURE_COORD_ARRAY);
    glEnable(GL_TEXTURE_2D);

    glBindTexture(GL_TEXTURE_2D, texture);
    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);

Надеюсь, это поможет! Обратите внимание, что вам нужно указать вершины по-разному в зависимости от того, как настроена проекция вашей камеры. В моем случае я настроил свой GL_MODELVIEW, используя приведенный ниже код - я не уверен, как это делает пример GLPaint.

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glOrtho(0, 1.0, 0, 1.0, -1, 1);
person Ben Gotow    schedule 05.06.2009

Во-первых, glReadPixels() будет видеть только тот кадровый буфер, который связан с вашим текущим контекстом OpenGL. Это может объяснить, почему вы не получаете ожидаемые пиксели.

Во-вторых, что вы подразумеваете под рендерингом текстуры с определенным размером пикселя? Я предполагаю, что текстура визуализируется как четырехугольник, и тогда размер этого четырехугольника должен находиться под вашим контролем с точки зрения кода.

Также убедитесь, что загрузка текстуры не вызывает ошибку OpenGL., я не уверен, каковы ограничения iPhone по размеру текстур. Вполне возможно, что 512x512 вне допустимого диапазона. Конечно, вы можете исследовать это самостоятельно, вызвав glGetIntegerv() и используя константу GL_MAX_TEXTURE_SIZE.

person unwind    schedule 03.06.2009