我想将带有 alpha 通道的 opencv::mat 图像加载到 OpenGL 纹理。
在以下帖子的帮助下,我可以设法将 RGB 图像从 opencv::mat 加载到 OpenGL 纹理中。
https://stackoverflow.com/questions/16809833/opencv-image-loading-for-opengl-texture
但是当我尝试使用 alpha 通道加载图像时,出现了问题。
这是 glTexImage2D 函数的调用方式。
glTexImage2D(GL_TEXTURE_2D, // Type of texture
0, // Pyramid level (for mip-mapping) -
GL_RGBA, // Internal colour format to convert to
image.cols, // Image width
image.rows, // Image height
0, // Border width in pixels (can either be 1 or 0)
GL_BGRA_INTEGER, // Input image format
GL_UNSIGNED_BYTE, // Image data type
image.ptr()); // The actual image data itself
此外,在渲染之前,我使用 glEnable(GL_BLEND); 启用混合。
如果我将输入图像格式和内部颜色格式都指定为 GL_RGBA / GL_BGRA,则会出现分段错误,但如果我将其中一个或两个都设置为 GL_RGBA_INTEGER,至少我可以看到窗口,但只是空白。
我可以更改透明度,因此窗口变得或多或少透明,但其中没有图像。cv::mat 中有一个图像,我可以使用 cv::imshow 看到它,但不知何故,将它传递给 OpenGL 纹理似乎存在问题。
任何人都可以建议我可能会丢失的东西。提前致谢。
PS:我是 OpenGL 的新手,如果能以最小的细节解释,我将不胜感激.. :P