У меня недавно были некоторые проблемы с реализацией функции масштабирования в приложении рисования. Пожалуйста, позвольте мне начать с предоставления некоторой справочной информации.
Сначала я начал с изменения демо-приложения Apple glPaint. Я думаю, что это отличный источник, так как он показывает вам, как настроить EAGLView и т. Д ...
Теперь, что я хотел сделать дальше, это реализовать функцию масштабирования. Проведя некоторые исследования, я попробовал два разных подхода.
1) использовать glOrthof
2) изменить размер кадра моего EAGLView.
Хотя оба способа позволяют мне идеально увеличивать / уменьшать масштаб, у меня возникают различные проблемы, когда речь идет о рисовании при увеличении.
Когда я использую (1), я должен визуализировать вид следующим образом:
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrthof(left, right, bottom, top, -1.0f, 1.0f); //those values have been previously calculated
glDisable(GL_BLEND);
//I'm using Apple's Texture2D class here to render an image
[_textures[kTexture_MyImage] drawInRect:[self bounds]];
glEnable(GL_BLEND);
[self swapBuffers];
Теперь, давайте предположим, что я немного увеличил масштаб, ТО я рисую, а после этого хочу снова уменьшить масштаб. Чтобы заставить это работать, мне нужно убедиться, что «kTexture_MyImage» всегда содержит последние изменения. Для этого мне нужно захватить содержимое экрана после внесения изменений и объединить их с исходным изображением. Проблема в том, что когда я увеличиваю, на моем экране отображается только часть изображения (увеличенная), и я еще не нашел подходящего способа справиться с этим.
Я попытался вычислить, какая часть экрана была увеличена, затем выполнить захват. После этого я изменил размер этой части до ее исходного размера и использовал еще один метод, чтобы вставить ее в исходное изображение в правильном положении.
Теперь я мог бы подробнее рассказать о том, как я этого добился, но это действительно сложно, и я решил, что должен быть более легкий путь. Уже есть несколько приложений, которые отлично выполняют то, чего я пытаюсь достичь, поэтому это должно быть возможно.
Что касается подхода (2), я могу избежать большинства вышеперечисленного, поскольку я изменяю только размер моего окна EAGLView. Тем не менее, при рисовании штрихи находятся далеко от их ожидаемого положения. Возможно, мне нужно учитывать уровень масштабирования при рисовании и пересчитывать CGPoints другим способом.
Однако, если вы делали подобные вещи в прошлом или можете дать мне подсказку, как я могу реализовать масштабирование в моем приложении для рисования, я был бы очень признателен.
Заранее спасибо.