Я использую OpenGL для показа снятых кадров с видеокамеры с наложением текстур. Никаких проблем нет, но мне нужно выбрать область захвата кадра, затем мне нужно увеличить ее, во-первых, я не могу нарисовать резиновый прямоугольник, он должен быть прозрачным, когда я выбираю область захвата кадра, которая у меня есть. чтобы увидеть текстурированную рамку прозрачно, не могли бы вы дать мне какой-нибудь фрагмент кода или подсказку, кстати, я показываю такие кадры, как это, любое предложение будет полезно для меня ...
void GLWidget::initializeGL()
{
glShadeModel(GL_SMOOTH);
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClearDepth(1.0f);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
glEnable(GL_TEXTURE_2D);
glGenTextures(1, &m_pTextureId);
glBindTexture(GL_TEXTURE_2D, m_pTextureId);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
}
void GLWidget::resizeGL(int w, int h)
{
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-1,1,-1,1,-1,1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void GLWidget::setTextureData(BYTE *data, int width, int height)
{
makeCurrent();
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
if (m_isTextured)
glTexSubImage2D(GL_TEXTURE_2D,0,0,0,width,height,GL_BGRA_EXT,GL_UNSIGNED_BYTE,data);
else
glTexImage2D(GL_TEXTURE_2D,0,3,width,height,0,GL_BGRA_EXT,GL_UNSIGNED_BYTE,0);
glBindTexture(GL_TEXTURE_2D,m_pTextureId);
glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);glVertex2f(-1.0,-1.0);
glTexCoord2f(0.0,1.0);glVertex2f(-1.0,1.0);
glTexCoord2f(1.0,1.0);glVertex2f(1.0,1.0);
glTexCoord2f(1.0,0.0);glVertex2f(1.0,-1.0);
glEnd();
swapBuffers();
}
Я передаю данные захваченного кадра в setTextureData, он работает, но я не знаю, как это хорошо ...
Спасибо за ответ @genpfault,
Я использовал x1 = 0, y1 = 0, x2 = 1, y2 = 1, но он рисует прямоугольник для всей области текстуры. и рисует еще один прямоугольник с координатами x1, y1 .... Как я могу это исправить. Кстати, как я могу удалить этот прямоугольник? Есть еще одна проблема, если я нарисую прямоугольник, а текстура снова прямоугольник становится невидимым ...