C++ OpenGGL: рисовать полигон + обработка изображений внутренних пикселей
Я использую OpenGL и C++, делая обработку изображений. Идея проста: я загружу изображение, нарисую многоугольник, щелкнув, а затем применю эффект (например, обесцвечивание) только к пикселям внутри только что созданной формы многоугольника.
Кто-нибудь может дать мне какое-нибудь указание о том, как ограничить эффект пикселями внутри многоугольника? Загрузка изображения и рисование многоугольника не проблема
1 ответ
Предположим следующую ситуацию:
- Картинка, на которую вы хотите применить эффект, занимает весь экран
- Изображение визуализируется с использованием opengl, вероятно, с помощью простого шейдера, а изображение передается как текстура.
Вы можете сделать следующий подход:
- рассматривать экран как большую текстуру
- вы рисуете многоугольник, который будет визуализироваться поверх визуализированной текстуры
- внутри вершин многоугольника вставьте ядра ультрафиолета, соответствующие 2D координатам на экране (от пространства экрана до пространства ультрафиолета (0, 1))
- нарисуй картинку нормалью
- в верхней части рисунка нарисуйте полигон, используя то же изображение, что и текстура, но с другим шейдером
Поэтому вместо того, чтобы пытаться обесцветить определенную область на вашем изображении, создайте многоугольник поверх этого региона с таким же изображением и обесцветьте этот новый многоугольник.
Это поможет вам избежать буфера трафарета.
Другой подход заключается в создании многоугольника, но нарисуйте его только в буфере трафарета, прежде чем нарисовать рисунок.