/************************http://blog.csdn.net/sunboyiris*************************************/ //根据OpenGL或GLU错误代码产生错误字符串 const GLubyte* APIENTRY gluErrorString ( GLenum errCode); const wchar_t* APIENTRY gluErrorUnicodeStringEXT ( GLenum errCode); //得到一个描述GLU版本号或支持GLU扩展调用的字符串 const GLubyte* APIENTRY gluGetString ( GLenum name); /* near和far默认为-1和1,此函数决定一个平行六面体 */ void APIENTRY gluOrtho2D ( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top); /* gluPerspective这个函数指定了观察的视景体(frustum为锥台的意思,通常译为视景体)在世界坐标系中的具体大小 */ void APIENTRY gluPerspective ( GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar); /*将裁剪区域变成一个单位立方体. 它是用来根据当前鼠标选择区域生成一个相应的投影矩阵的。这里面头两个参数不是这个选择区域的左上角位置,而是整个区域的中心位置。如果错把它当成左上角,选择的区域就会斜向上有个偏移。 */ void APIENTRY gluPickMatrix ( GLdouble x, GLdouble y, GLdouble width, GLdouble height, GLint viewport[4]); /* 该函数定义一个视图矩阵,并与当前矩阵相乘。 第一组eyex, eyey,eyez 相机在世界坐标的位置 第二组centerx,centery,centerz 相机镜头对准的物体在世界坐标的位置 第三组upx,upy,upz 相机向上的方向在世界坐标中的方向 你把相机想象成为你自己的脑袋: 第一组数据就是脑袋的位置 第二组数据就是眼睛看的物体的位置 第三组就是头顶朝向的方向(因为你可以歪着头看同一个物体) */ void APIENTRY gluLookAt ( GLdouble eyex, GLdouble eyey, GLdouble eyez, GLdouble centerx, GLdouble centery, GLdouble centerz, GLdouble upx, GLdouble upy, GLdouble upz); /* 用于返回变换后的窗口坐标 基本思路 1、将输入的顶点,通过模型视图矩阵,变换到模型视图矩阵的坐标系中; 2、将模型视图矩阵中的顶点,再变换到投影矩阵中; 3、将顶点缩放到[0, 1]的映射区间中; 4、通过视口的位置和大小,计算出当前3D顶点中的屏幕坐标(2D坐标) */ int APIENTRY gluProject ( GLdouble objx, GLdouble objy, GLdouble objz, const GLdouble modelMatrix[16], const GLdouble projMatrix[16], const GLint viewport[4], GLdouble *winx, GLdouble *winy, GLdouble *winz); /* gluPorject反过来的过程 思路: 1、首先,需要将输入的顶点,通过视口变换到[0, 1]之间; 2、然后将顶点缩放到[-1, 1]之间,就是上面代码中的scaleMat矩阵的逆矩阵 3、然后乘上投影矩阵的逆矩阵; 4、最后就是乘上模型视图矩阵的逆矩阵; */ int APIENTRY gluUnProject ( GLdouble winx, GLdouble winy, GLdouble winz, const GLdouble modelMatrix[16], const GLdouble projMatrix[16], const GLint viewport[4], GLdouble *objx, GLdouble *objy, GLdouble *objz); //gluScaleImage这个函数用适当的像素存储模式改变一个像素图像的大小来读取源图像的像素数据然后把像素写入新的目标图像 int APIENTRY gluScaleImage ( GLenum format, GLint widthin, GLint heightin, GLenum typein, const void *datain, GLint widthout, GLint heightout, GLenum typeout, void *dataout); /* 如果已经创建0级(分辨率最高的)mipmap, 可以使用函数gluBuild1DMipmaps(), gluBuild2DMipmaps() 和 gluBuild3DMipmaps()来定义和创建mipmap金字塔. 塔顶为1X1(对于一维纹理为1; 三维纹理为1X1X1)的mipmap. 如初始图像的大小不是2的幂, 可以使用函数gluBuild*DMipmaps()将图像大小缩放到最接近2的幂, 如纹理太大, 可以使用函数gluBuild*DMipmaps()将图像缩小到足够的资源来存储它(使用GL_PROXY_TEXTURE机制确定). */ int APIENTRY gluBuild1DMipmaps ( GLenum target, GLint components, GLint width, GLenum format, GLenum type, const void *data); int APIENTRY gluBuild2DMipmaps ( GLenum target, GLint components, GLint width, GLint height, GLenum format, GLenum type, const void *data);