Как мне отменить отмену в Приложение рисования OpenGL ES на iPhone?

Я использую пример приложения Apple GLPaint в качестве основы для приложения рисования OpenGL ES, но я не могу понять, как реализовать в нем функцию отмены.

Я не хочу делать снимки каждого удара и хранить их. Есть ли способ использовать разные объекты буфера кадра для реализации отмены? Есть ли у вас другие предложения по улучшению способов сделать это?

10
задан Brad Larson 13 August 2010 в 16:43
поделиться

2 ответа

Используйте объекты буфера вершин (VBO) для рендеринга вашего контента. При каждом новом штрихе копируйте последний VBO в список наименее недавно использованных (LRU). Если ваш LRU заполнен, удалите последний использованный VBO. Чтобы восстановить (отменить) последний штрих, просто используйте последний использованный VBO LRU и визуализируйте его.

VBO: http://developer.apple.com/iphone/library/documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/TechniquesforWorkingwithVertexData/TechniquesforWorkingwithVertexData.html

LRU: http://en.wikipedia.org/wiki/Cache_algorithms#Least_Recently_Used

10
ответ дан 3 December 2019 в 21:57
поделиться

Я бы порекомендовал использовать NSUndoManager для хранения списка фактических действий рисования, предпринятых пользователем (проведите линию отсюда сюда с помощью этой кисти и т. Д.). При хранении в виде списка координат x, y для векторного рисования вместе со всеми другими метаданными, необходимыми для воссоздания этой части рисунка, вы не будете использовать столько памяти, сколько для хранения изображений, объектов буфера вершин или объектов буфера кадра. .

Фактически, если вы сохраните эти шаги рисования в базе данных Core Data, вы можете почти бесплатно отменить / повторить действие. Подробнее см. Мой ответ здесь .

6
ответ дан 3 December 2019 в 21:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: