Установить UIImage в качестве фона для 2D OpenGL ES на iPhone - PullRequest
0 голосов
/ 22 июня 2011

еще раз, я прошу помощи после долгого исследования.

Мне нужно создать представление, в котором пользователь может поместить изображение на задний план и нарисовать поверх него линии / точки (события касания), а затем сохранить «эскиз», нажав кнопку «Сохранить».

Итак, после исследования я решил взять этот код и построить его поверх него, потому что он уже делает половину того, что я хочу (он рисует).

Образец, который я имею, использует OpenGL для рисования, и, в принципе, мне все равно, будет ли это OpenGL или CoreGraphics, как только он это сделает.

У меня проблема в том, как поставитьизображение в качестве фона EAGLView у меня есть в этом примере кода.Мое исследование дало мне только советы для опытных разработчиков OpenGL, но не рабочий фрагмент кода / решение.Если кто-то может помочь мне с этим, я был бы очень признателен.

Мне нужен лишь пример того, как поместить UIImage в фон EAGLView, чтобы пользователь мог рисовать (уже имея код) поверх него и сохранять результат.

Ответы [ 2 ]

3 голосов
/ 22 июня 2011

Обычно OpenGL не смешивают с обычными UI... представлениями. Также рисование фонового изображения с использованием OpenGL тривиально:

Сначала вам нужно загрузить изображение в текстуру. В GLPaint файл изображения загружается как кисть-текстура https://github.com/omeryavuz/glpaint/blob/master/Classes/PaintingView.m функция initWithCoder

Чтобы нарисовать фон, первое, что вы рисуете после очистки кадрового буфера, это полноэкранный квад с этой текстурой. Если вы строите вверх по GLPaint, тогда матрица проекции и просмотра модели и состояние массива вершин уже установлены правильно. Так что сводится к

GLfloat vert[] = {0,0, frame.size.width,0, frame.size.width,frame.size.height, 0,frame.size.height};
GLfloat tex[] = {0,0, 1,0, 1,1, 0,1};
GLuint indexes[] = {0, 1, 2, 2, 3, 0};

glBindTexture(GL_TEXTURE_2D, backgroundTexture);
glEnable(GL_TEXTURE_2D);    

glVertexPointer(2, GL_FLOAT, 0, vert);
glTexCoordPointer(2, GL_FLOAT, 0, tex);
glDrawElements(GL_TRIANGLES, 2, GL_UNSIGNED_INT, indexes);
2 голосов
/ 22 июня 2011

В PaintingView.m, в строке 89, установите eaglLayer.opaque = NO;.

. В вашем viewController поместите UIImageView или что-нибудь позади paintingView.

Примечание.производительность.

Примечание: изначально может не работать;слой OpenGL может перезаписать себя каким-то цветом фона по умолчанию перед рендерингом кадра.РЕДАКТИРОВАТЬ: строка 304 в PaintingView.m: попробуйте установить цвет на glClearColor(1.0, 1.0, 1.0, 0.0);.Я не уверен, что это работает, и у меня нет времени, чтобы проверить это.Если это не сработает, подождите, пока Брэд Ларсон не придет, не увидит ваш вопрос и не ответит на него отлично;)

...