【发布时间】:2012-02-03 08:57:14
【问题描述】:
我已经看到许多用于为 OpenGL 加载纹理的代码示例,其中许多示例有点难以理解或需要包含大量代码的新函数。
我在想,由于 OpenCV 允许我们加载任何图像格式,它可以是一种将纹理加载到 OpenGL 的简单有效方法,但我错过了一些东西。我在 c++ 中有这段代码:
cv::Mat texture_cv;
GLuint texture[1];
int Status=FALSE;
if( texture_cv = imread("stones.jpg")) {
Status=TRUE; // Set The Status To TRUE
glGenTextures(1, &texture[0]); // Create The Texture
glBindTexture(GL_TEXTURE_2D, texture[0]);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S , GL_REPEAT );
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT );
glTexImage2D(GL_TEXTURE_2D, 0, 3, texture_cv.cols, texture_cv.rows, 0, GL_RGB, GL_UNSIGNED_BYTE, texture_cv.data);
}
因为这个错误,它没有编译:
错误 C2451:'cv::Mat' 类型的条件表达式是非法的
有什么建议吗?我应该如何进行从 cv::Mat 到 openGL 纹理的转换?
【问题讨论】:
-
我认为使用 OpenCV 加载纹理太过分了。有专门为此设计的库 DevIL。
-
我在我的项目中使用 OpenCV,并且我不断地从 opengl 更改为 opencv 数据,这就是为什么我有了减少库的想法。无论如何感谢 DevIL,我会看看它。
-
FreeImage 也是 DevIL 的另一个(更新的)替代品 =)
-
如果
texture.cols != texture.rows不应该是GL_TEXTURE_RECTANGLE吗?
标签: c++ opengl opencv textures