Я совершенно уверен, что метод просмотра изображений будет излишним после нанесения в течение нескольких минут ... Вы можете сделать все масштабирование довольно хорошо с openGL, и я предлагаю вам сделать это. Практика лука будет заключаться в том, чтобы создать холст настолько большой, насколько это возможно, поэтому, когда вы увеличиваете масштаб изображения, вы не потеряете никакого разрешения.
О масштабировании: не пытайтесь изменить размер кадра GL или любого фрейма, потому что даже если вам удастся это сделать, вы потеряете разрешение. Вы должны использовать стандартные матрицы для перевода и масштабирования сцены или просто поиграть с glOrtho
(установите ее значения в том порядке, который вы сейчас видите). Как только вы получите эту часть, есть, к сожалению, еще 2 вещи, которые требуют немного математики, сначала вам придется вычислять новые позиции касания в сцене openGL, так как местоположение не будет знать о вашем масштабировании и переводе, второе - вам, вероятно, нужно также масштабировать кисть (уменьшите размер сцены, чтобы рисовать детали).
О холсте: Я предлагаю вам обратить внимание на FBO, а не на ваш основной буфер визуализации, и представить текстуру для вашей основной сцены рендеринга. Обратите внимание, что FBO будет иметь прикрепленную текстуру и будет иметь размер 2 (создайте 2048x2048 или 4096x4096 для более новых устройств), но вы, вероятно, просто будете использовать часть его, чтобы сохранить то же соотношение, что и экран (glViewport
должен делать задание), поэтому вам придется вычислять координаты текстуры. В целом механизм рисования сильно не меняется.
Итак, представьте себе, что у вас есть холст (FBO), к которому вы применяете кисть определенного размера и положения при контактах с событиями, тогда вы используете этот холст в качестве текстуры и нарисуете его на главном экране GL.
Вниз проголосовали, потому что вы не можете просто увеличить масштаб, как вы предлагаете, потому что код GLPaint зависит от буфера накопления, который очищается от каждого перерисовывания. –
Я верю, что вы правы в отношении GLPaint, но мне вряд ли было бы легче о том, как работает простой образец проекта. Я не предлагаю модифицировать этот образец проекта, а скорее создать новый, который предназначен для работы для ваших нужд. Но если вы просто отключите очистку буфера при перерисовке или создадите буфер событий, который можно использовать для перерисовки сцены после очистки. В любом случае, это все выходит за рамки этого вопроса, который, похоже, касается приложения LIKE GLPaint. Поэтому, если вы заинтересованы в выполнении такого проекта, вы должны знать, что обычно требуется немного больше, чем копирование образца. –
Я не задавал этот вопрос, и у меня нет проблемы. Я просто обнаружил, что ваш ответ неверен, и я не хочу, чтобы он направлял кого-то в неправильном направлении. –