Я просто пытаюсь передать cvMat текстуру, которая генерируется фрагментарным шейдером, на экране ничего не появляется, я не знаю, где проблема, это в драйвере или glreadPixels .. Я только что загрузил изображение TGA, в фрагментарный шейдер, а затем текстурировал квадроцикл, я хотел передать эту текстуру в cvMat, поэтому я использовал glReadPixesl, затем создавал новую текстуру и рисовал ее на квадроцикле, но ничего появляется.Чтение из фреймбуфера GLSL в OpenCV
Обратите внимание, что на каждом кадре выполняется следующий код.
cv::Mat pixels;
glPixelStorei(GL_PACK_ALIGNMENT, (pixels.step & 3) ? 1 : 4);
glReadPixels(0, 0, 1024, 1024, GL_RGB, GL_UNSIGNED_BYTE, pixels.data);
glEnable(GL_TEXTURE_2D);
GLuint textureID;
glGenTextures(1, &textureID);
//glDeleteTextures(1, &textureID);
// Create the texture
glTexImage2D(GL_TEXTURE_2D, // Type of texture
0, // Pyramid level (for mip-mapping) - 0 is the top level
GL_RGB, // Internal colour format to convert to
1024, // Image width i.e. 640 for Kinect in standard mode
1024, // Image height i.e. 480 for Kinect in standard mode
0, // Border width in pixels (can either be 1 or 0)
GL_RGB, // Input image format (i.e. GL_RGB, GL_RGBA, GL_BGR etc.)
GL_UNSIGNED_BYTE, // Image data type
pixels.data); // The actual image data itself
glActiveTexture (textureID);
glBindTexture (GL_TEXTURE_2D,textureID);
glDrawElements (GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, indices);
Пожалуйста, сделайте для меня что-то ясное. Вы пытались создать Mat из текстуры OpenGL, верно? –
Я пытался создать текстуру из математики –
Хорошо. Не могли бы вы рассказать мне, что вы делаете в первых двух строках: 'glPixelStorei()' и 'glReadPixels()'. Мне кажется, что вы копируете текстуру OpenGL в пиксели. –