iPhone: Текстура больше, чем 64x64? - PullRequest
2 голосов
/ 22 мая 2009

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

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

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

Ответы [ 2 ]

2 голосов
/ 05 июня 2009

Пример проекта 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);
0 голосов
/ 03 июня 2009

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

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

Кроме того, убедитесь, что при загрузке текстуры не возникает ошибка OpenGL , я не уверен, каковы ограничения iPhone на размеры текстур. Вполне возможно, что 512x512 вне диапазона. Конечно, вы можете исследовать это самостоятельно, позвонив по номеру <a href="http://www.khronos.org/opengles/sdk/docs/man/glGet.xml" rel="nofollow noreferrer">glGetIntegerv()</a> и используя константу GL_MAX_TEXTURE_SIZE.

...