在 现代opengl 设计入门,纹理贴图 一文中介绍了用 stb_image.h 导入图片来实现openGL 的纹理贴图,而本文介绍另外一种方式opencv。 OpenCV是Intel®开源计算机视觉库,图像处理功能很强大。如果你熟悉opencv,或者正在使用,在做openGL 贴图的时候,肯定想如何组合。
如果你对opencv 不熟悉,那你还是用stb_image.h 导入图片比较简单。opencv的好处是,你可以利用opencv超强的处理图片,比如变换灰度图,或者自画图,这样灵活性比较好。我的测试环境是visual studio 2010 c++, opencv 3.0 beta。更高级的oepncv 版本在2010 下需要自己编译。
opencv 导入图片,设置为opengl 贴图很简单,就是下面的代码:
cv::Mat image = cv::imread( "lena.jpg", 1 );
if(image.elemSize()>0)
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, image.cols,image.rows, 0, GL_BGR, GL_UNSIGNED_BYTE, image.data);
对于opengl 工程而言,其他要做的是添加opencv 应用必要的包含文件,链接库,设置文件路径,运行时动态库。当然还有重要一点,你先要安装好opencv3.0beta 以上版本,否则本文方法要些修改。
#include "opencv2/opencv.hpp"
在工程属性里添加opencv 的路径,我的是
include: C:\opencv\build\include;
lib: C:\opencv\build\x86\vc10\lib;
图示如下:
链接时输入函数库添加:opencv_ts300d.lib; opencv_world300d.lib
原来opengl 本来包含 glfw3d.lib opendl32.lib
图示如下:
复制 opencv_world300d.dll,opencv_world300.dll 到你运行目录。
其他的都与 现代opengl 设计入门,纹理贴图 一文相似。
运行效果图,这个和上篇一样,只是纹理导入方式 不一样。opencv的好处是,你可以处理图片,比如变换灰度图,或者自画图,这样灵活性比较好。
代码,调试说明
要完成本工程的代码调试和运行要注意如下几点:
代码有好几个文件,着色器类shader_s.h 在这里,4.1.texture.vs,4.1.texture.fs在后面贴出了,主程序也在后面。
所有程序文件都准备好了,应该可以 编译链接成功了,如果不成功, 请看&n