2013-05-23 3 views
0

Я хотел бы сделать приложение, в котором вы можете нарисовать, как в примере с образцом GLPaint, но и увеличить масштаб, чтобы рисовать более подробно в вашей картине. , но я чувствую, что использование OpenGL ES 1.0, которое используется в приложении GLPaint, довольно сложно изучить и может быть немного лишним для моей потребности. Если я просматриваю рамку основных представлений с помощью метода setFrame для увеличения с помощью gesturerecognizer, уже окрашенные строки стираются при каждом изменении размера кадров.увеличить код образца GLPaint

, поэтому я попытался реализовать его с другой идеей: в методе touchmoves я добавляю в «много» позиции uiimageviews с изображением кисти, он медленнее, чем приложение glpaint и немного беспорядок управления записью, но я не вижу другого выхода туда.

любые предложения, узнать OpenGL ES 1.0 или 2.0 или пытаются реализовать Последнюю идею

ответ

-1

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

О масштабировании: не пытайтесь изменить размер кадра GL или любого фрейма, потому что даже если вам удастся это сделать, вы потеряете разрешение. Вы должны использовать стандартные матрицы для перевода и масштабирования сцены или просто поиграть с glOrtho (установите ее значения в том порядке, который вы сейчас видите). Как только вы получите эту часть, есть, к сожалению, еще 2 вещи, которые требуют немного математики, сначала вам придется вычислять новые позиции касания в сцене openGL, так как местоположение не будет знать о вашем масштабировании и переводе, второе - вам, вероятно, нужно также масштабировать кисть (уменьшите размер сцены, чтобы рисовать детали).

О холсте: Я предлагаю вам обратить внимание на FBO, а не на ваш основной буфер визуализации, и представить текстуру для вашей основной сцены рендеринга. Обратите внимание, что FBO будет иметь прикрепленную текстуру и будет иметь размер 2 (создайте 2048x2048 или 4096x4096 для более новых устройств), но вы, вероятно, просто будете использовать часть его, чтобы сохранить то же соотношение, что и экран (glViewport должен делать задание), поэтому вам придется вычислять координаты текстуры. В целом механизм рисования сильно не меняется.

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

+0

Вниз проголосовали, потому что вы не можете просто увеличить масштаб, как вы предлагаете, потому что код GLPaint зависит от буфера накопления, который очищается от каждого перерисовывания. –

+0

Я верю, что вы правы в отношении GLPaint, но мне вряд ли было бы легче о том, как работает простой образец проекта. Я не предлагаю модифицировать этот образец проекта, а скорее создать новый, который предназначен для работы для ваших нужд. Но если вы просто отключите очистку буфера при перерисовке или создадите буфер событий, который можно использовать для перерисовки сцены после очистки. В любом случае, это все выходит за рамки этого вопроса, который, похоже, касается приложения LIKE GLPaint. Поэтому, если вы заинтересованы в выполнении такого проекта, вы должны знать, что обычно требуется немного больше, чем копирование образца. –

+0

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

0

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

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

Если вы попытаетесь просто увеличить масштаб своего вида в GLPaint, ваша новая картина будет нарисована в некотором скорректированном масштабе по сравнению с вашим оригинальным рисунком - это почти наверняка не то, что вы хотите.

Обходной режим вместо того, чтобы напрямую рисовать ваш экранный буфер представления, вы сначала визуализируете в буфер текстуры, а затем визуализируете упомянутый буфер текстуры на квадранте (или эквиваленте). Таким образом, квад-сцена может быть очищена и повторно отображена при каждом обновлении кадра (в любом выбранном вами масштабе), в то время как буфер рисования сохраняет буфер накопления.

Это было проверено и работает.

Смежные вопросы