OpenGL(全写Open Graphics Library)是指定义了一个跨编程语言、跨平台的编程接口规格的专业的图形程序接口。它用于三维图像(二维的亦可),是一个功能强大,调用方便的底层图形库。
GLUT库是一个与窗口系统无关的工具包, OpenGL主要包括三个函数库,它们是核心库、实用函数库和编程辅助库。核心库中包含了OpenGL最基本的命令函数。
核心库提供了一百多个函数,这些函数都以”gl”为前缀,用来建立各种各样的几何模型、进行坐标变换、产生光照效果、进行纹理映射、产生雾化效果等所有的二维和三维图形操作。实用函数库是比核心库更高一层的函数库,它提供四十多个函数,这些函数都以”glu”为前缀。由OpenGL是一个图形标准,是独立于任何窗口系统或操作系统的,在OpenGL中没有提供窗口管理和消息事件响应的函数,也没有鼠标和键盘读取事件的功能,所以在编程辅助库提供了一些基本的窗口管理函数、事件处理函数和简单的事件函数。这类函数以”aux”作为前缀。值得一提的是,目前AUX编程辅助库已经很大程度上被GLUT库取代了。
一、VC 6.0 安装GLUT库
1、下载GLUT库: http://download.csdn.net/detail/ljheee/9881219 解压后包含5个文件:glut.dll、glut.h、glut.lib、glut32.dll、glut32.lib。
2、 将压缩包内的glut.h复制到C:\Program Files\Microsoft Visual Studio\VC98\Include\GL目录下。
3、将glut32.lib复制到C:\Program Files\Microsoft Visual Studio\VC98\Lib目录下。
4、将glut32.dll复制到系统盘(我的是C盘)C:\Windows\System32目录下。如果是Windows 64位的机器,还需要将glut32.dll复制到C:\Windows\SysWOW64目录下,否则报错。
提示:Windows 32机器下,就按1-4步安装,64位机器需要在C:\Windows\SysWOW64目录下放一个glut32.dll。具体VC6.0安装路径按自己实际复制过去。
二、设置GLUT库
1、打开VC6.0,新建一个Win32 Console Application工程,工程下新建一个.c源文件,这样我们就建立了一个Win32的空工程。
2、在VC6.0工具栏依次:
选择 Proejct—>Settings
选择 LINK 选项卡
添加一下文件到 Object/library: opengl32.lib glut32.lib glu32.lib (两者间通过空格分隔)
3、点击OK就完成了的基本配置。
复制下面源码到新建的.c源文件,编译即可运行。
#include <gl/glut.h>
static GLsizei iMode=1; //选定的菜单项
static GLfloat xRot=0.0f; //x方向旋转参数
static GLfloat yRot=0.0f; //y方向旋转参数
GLUquadricObj *obj; //二次曲面对象
void Initial(void)
{
glClearColor(1.0f,1.0f,1.0f,1.0f);
glColor3f(0.0f,0.0f,0.0f);
obj=gluNewQuadric(); //激活二次曲面绘制器
gluQuadricDrawStyle(obj,GLU_LINE); //已选框方式绘制二次曲面对象
}
void ChangeSize(int w,int h)
{
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(-1.5f,1.5f,-1.5f,1.5f);
}
void Display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW); //指定设置模型视图变换参数
glLoadIdentity(); //消除以前的变换
glRotatef(xRot,1.0f,0.0f,0.0f); //绕x轴旋转图形
glRotatef(yRot,0.0f,1.0f,0.0f); //绕y轴旋转图行
switch(iMode)
{
case 1:
glutWireTetrahedron();
break; //绘制线框正四面体
case 2:
glutSolidTetrahedron();
break; //绘制实体正四面体
case 3:
glutWireOctahedron();
break; //绘制线框正八面体
case 4:
glutSolidOctahedron();
break; //绘制实体正八面体
case 5:
glutWireSphere(1.0f,15,15);
break; //绘制线框球
case 6:
glutSolidSphere(1.0f,15,15);
break; //绘制实体球
case 7:
glutWireTeapot(1.0f);
break; //绘制线框茶壶
case 8:
glutSolidTeapot(1.0f);
break; //绘制实体茶壶
case 9:
gluSphere(obj,1.0f,15,15);
break; //绘制二次曲面(球)
case 10:
gluCylinder(obj,1.0f,0.0f,1.0f,15,15);
break; //绘制二次曲面(圆锥)
case 11:
gluPartialDisk(obj,0.3f,0.8f,15,15,30.0f,260.0f);
break; //绘制二次曲面(圆环)
default:
break;
}
glFlush();
}
//处理菜单响应
void ProcessMenu(int value)
{
iMode=value;
glutPostRedisplay();
}
void SpecialKeys(int key,int x,int y)
{
//光标键控制图形的旋转
if(key==GLUT_KEY_UP) xRot-=5.0f;
if(key==GLUT_KEY_DOWN) xRot+=5.0f;
if(key==GLUT_KEY_LEFT) yRot-=5.0f;
if(key==GLUT_KEY_DOWN) yRot+=5.0f;
if(xRot>356.0f) xRot=0.0f;
if(xRot<-1.0f) xRot=355.0f;
if(yRot>356.0f) yRot=0.0f;
if(yRot<-1.0f) yRot=355.0f;
glutPostRedisplay();
}
int main(int argc,char *argv[])
{
int nGlutPolyMenu,nGlutCurveMenu,nGluCurveMenu,nMainMenu;
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutInitWindowSize(400,400);
glutInitWindowPosition(100,100);
glutCreateWindow("OpenGL模型绘制函数示例");
nGlutPolyMenu = glutCreateMenu(ProcessMenu);
glutAddMenuEntry("线框正四面体",1);
glutAddMenuEntry("实体正四面体",2);
glutAddMenuEntry("线框正八面体",3);
glutAddMenuEntry("实体正八面体",4);
nGlutCurveMenu=glutCreateMenu(ProcessMenu);
glutAddMenuEntry("线框球面",5);
glutAddMenuEntry("实体球面",6);
glutAddMenuEntry("线框茶壶",7);
glutAddMenuEntry("实体茶壶",8);
nGluCurveMenu=glutCreateMenu(ProcessMenu);
glutAddMenuEntry("线框球面",9);
glutAddMenuEntry("线框圆锥面",10);
glutAddMenuEntry("线框圆环面",11);
nMainMenu=glutCreateMenu(ProcessMenu);
glutAddSubMenu("GLUT多面体",nGlutPolyMenu);
glutAddSubMenu("GLUT曲面",nGlutCurveMenu);
glutAddSubMenu("GLU曲面",nGluCurveMenu);
glutAttachMenu(GLUT_RIGHT_BUTTON);
glutDisplayFunc(Display);
glutReshapeFunc(ChangeSize);
glutSpecialFunc(SpecialKeys);
Initial();
glutMainLoop();
return 0;
}