工作后一直跟opencv打交道,各种版本各种配置也早就用烂了。忽然想到还有个专业的图形程序接口一直没用过,然后就在网上找了一个并down个程序简单看看效果。这里主要是写一下openGL下载、配置以及写程序时要注意的一些东西吧。
首先下载openGL的压缩文件http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip
里面5个文件 glut.h glut.dll,glut32.dll glut.lib,glut32.lib,至于这些东西放哪就不多说了,随便百度一下就有。
但我down的那个程序中需要包含一个头文件#include "glaux.h",这是GLAUX库的头文件,这个文件在我电脑上毫无踪影,没办法只好有下了一个OpenGL的版本:
http://d.download.csdn.net/download/ssagnn23/2560229
然后把解压的.h、.dll、.lib文件又重新归置了一次,这下可以找到头文件了,然后编译时又遇到问题:“无法解析的外部符号 _auxDIBImageLoadA……”,查了一下是没有加入lib。打开“工程属性”-->"输入"-->"附加依赖项",把OpenGL32.lib GLu32.lib GLaux.lib加进去,编译运行OK,然后可以看到程序运行效果。(程序里加载的图像貌似只能是24位bmp图像,没有验证,jpg肯定不行)
#include <iostream>
#define GLUT_DISABLE_ATEXIT_HACK
#include "gl\glut.h"
#include "gl\GLAUX.H"
using namespace std;
bool g_bBlend;// 是否混合?
bool g_bKeyB = false;// B 键按下了么?
bool g_bLight =false;// 光源的开/ 关
bool g_bKeyL =false;// L键按下了么?
bool g_bKeyF =false;// F键按下了么?
GLfloat g_fXrot =5; // X 旋转
GLfloat g_fYrot =5;// Y 旋转
GLfloat g_fXSpeed =0;// X 旋转速度
GLfloat g_fYSpeed =0;// Y 旋转速度
GLfloat g_fZ =-5.0f;// 深入屏幕的距
// 接着设置用来创建光源的数组。我们将使用两种不同的光。第一种称为环境光。环境光来自于四面
// 八方。所有场景中的对象都处于环境光的照射中。第二种类型的光源叫做漫射光。漫射光由特定的
// 光源产生,并在您的场景中的对象表面上产生反射。处于漫射光直接照射下的任何对象表面都变得
// 很亮,而几乎未被照射到的区域就显得要暗一些。这样在我们所创建的木板箱的棱边上就会产生的很不错的阴影效果。
// 创建光源的过程和颜色的创建完全一致。前三个参数分别是RGB三色分量,最后一个是alpha通道参数。
// 因此,下面的代码我们得到的是半亮(0.5f)的白色环境光。如果没有环境光,未被漫射光照到的地方会变得十分黑暗。
GLfloat LightAmbient[]= { 0.5f, 0.5f, 0.5f, 1.0f };// 环境光参数
//下一行代码我们生成最亮的漫射光。所有的参数值都取成最大值1.0f 。它将照在我们木板箱的前面,看起来挺好。
GLfloat LightDiffuse[]= { 1.0f, 1.0f, 1.0f, 1.0f };// 漫射光参数
// 最后我们保存光源的位置。前三个参数和glTranslate中的一样。依次分别是XYZ轴上的位移。由于
// 我们想要光线直接照射在木箱的正面,所以XY轴上的位移都是0.0f 。第三个值是Z 轴上的位移。为
// 了保证光线总在木箱的前面,所以我们将光源的位置朝着观察者( 就是您哪。) 挪出屏幕。我们通常
// 将屏幕也就是显示器的屏幕玻璃所处的位置称作Z 轴的0.0f 点。所以Z 轴上的位移最后定为2.0f 。假
// 如您能够看见光源的话,它就浮在您显示器的前方。当然,如果木箱不在显示器的屏幕玻璃后面的
// 话,您也无法看见箱子。
GLfloat LightPosition[]= { 0.0f, 0.0f, 2.0f, 1.0f };// 光源位置
// filter 变量跟踪显示时所采用的纹理类型。
//第一种纹理(texture[0])使用gl_nearest(不光滑) 滤波方式构建。
//第二种纹理 (texture[1])使用gl_linear(线性滤波)方式,离屏幕越近的图像看起来就越光滑。
//第三种纹理 (texture[2])使用mipmapped滤波方式,这将创建一个外观十分优秀的纹理。