Выберите исходный прямоугольник из видео текстурирования

0

Я делаю видео текстурирование на созданной поверхности прямоугольника. Мне нужно создать еще 2 прямоугольника разного размера, а затем скопировать часть текстурирующего видео, работающего на 1-й поверхности (например, средняя часть видео) и воспроизвести ее на новой поверхности. Возможно ли использование OpenGL ES? Через мой собственный рендеринг поверхности видео я могу сделать эту функциональность и сопоставить ее с приложением OGLES. Мне просто интересно, можно ли делать непосредственно из самого приложения OGL, копируя выбранный прямоугольник с одной из текстурирующих поверхностей видео?

Теги:
opengl-es
video-processing

1 ответ

0

Если ваша текстура - это видео с полным движением, вы не должны копировать данные текстуры, потому что это слишком медленно, чтобы не отставать от частоты кадров видео. Вам следует избегать использования glTexImage2D() и вместо этого использовать расширения изображений EGL, как подробно описано в моей третьей статье:

http://montgomery1.com/opengl/

Но в любом случае, как только у вас есть изображение в текстуре, а текстура связана с glBindTexture(), любое количество прямоугольников, которые вы рисуете, будет текстурировано с той же текстурой, привязанной к тексту, без копирования. Эти прямоугольники на самом деле представляют собой геометрию, построенную из треугольников, а не "поверхностей". Фреймбуфер - это поверхность. Координаты текстуры могут быть разными для каждого прямоугольника, что позволяет обрезать и/или масштабировать отображение текстур однозначно для каждого.

  • 0
    Спасибо. Указав координаты текстуры, я могу обрезать наложение текстуры. Когда я хочу нарисовать один прямоугольник, я должен определить 4 вершины. Затем я вызываю: glVertexPointer (2, GL_FLOAT, 0, squareVertices); glColorPointer (4, GL_UNSIGNED_BYTE, 0, squareColors); glDrawArrays (GL_TRIANGLE_STRIP, 0, 4) Это создаст мой прямоугольник. Но как нарисовать два или более отдельных прямоугольника, которые не соприкасаются друг с другом одним вызовом glDrawArrays? Является ли это возможным? Когда я добавляю следующие вершины в массив и увеличиваю количество, это не работает.
  • 0
    Вы можете сделать это, используя GL_TRIANGLE, а не GL_TRIANGLE_STRIP, но нет ничего плохого в том, чтобы просто сделать еще один вызов glDrawArrays (). Чтобы сделать это быстрее, используйте VBO.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню