我已經看到很多加載紋理的代碼示例,這些代碼樣本可用於加載OpenGL,其中許多代碼有點複雜,無法理解或需要使用大量代碼的新功能。使用OpenCV加載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);
}
而且這還不是因爲這個錯誤的編譯:
error C2451: conditional expression of type 'cv::Mat' is illegal
有什麼建議?我應該如何做從cv :: Mat到openGL紋理的轉換?
我認爲使用OpenCV加載紋理是矯枉過正。有一個爲此明確設計的圖書館DevIL。 – datenwolf 2012-02-03 09:17:11
我在我的項目中使用OpenCV,並且我經常從opengl更改爲opencv數據,這就是爲什麼我有了減少庫的想法。無論如何感謝DevIL,我會看看它。 – 2012-02-03 09:21:56
FreeImage也是DevIL的另一個(更新的)替代方法=) – MiJyn 2013-09-28 08:03:27