OpenGL ES Fill Effect - PullRequest
       3

OpenGL ES Fill Effect

0 голосов
/ 18 октября 2011

Как создать эффект заливки? У меня неправильная замкнутая форма, созданная с использованием:

   glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer);
        (.......) 
   glVertexPointer(2, GL_FLOAT, 0, vertexBuffer);
   glDrawArrays(GL_POINTS, 0, vertexCount);
        (.......) 
   glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);

Теперь я хотел бы иметь эффект «заливка / заливка», как в фотошопе. Например, фон внутри фигуры белый, и, щелкнув внутри фигуры, я хочу изменить цвет на красный или зеленый.

Может кто-нибудь дать мне несколько советов, пожалуйста.

enter image description here

1 Ответ

3 голосов
/ 18 октября 2011

Таким образом, вы визуализируете набор точек и хотите, чтобы OpenGL «волшебным образом» заполнил закрытую область. Это невозможно. OpenGL не понимает, что эти точки охватывают какой-то регион. Вы даже не рисуете линейную полосу, это просто набор точек. Даже человек должен приложить разумные усилия к размышлению, чтобы увидеть, что точки «охватывают» область, не говоря уже о компьютере, или просто простой интерфейс для рисования точек, линий и треугольников на экране.

Вместо рисования точек просто нарисуйте многоугольник (используйте GL_POLYGON или GL_TRIANGLE_FAN вместо GL_POINTS). Но если закрытая область невыпуклая, это не сработает во всех случаях. Вы всегда должны понимать, что OpenGL - это не что иное, как API для рисования. Он просто рисует точки, линии и треугольники на экране. Да, с причудливыми эффектами, но в целом он рисует простые примитивы. Он не управляет какой-либо базовой графической сценой или чем-то еще. В тот момент, когда нарисован примитив (например, одиночная точка, линия или треугольник), OpenGL больше его не помнит.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...