OpenGL介绍

OpenGL是图形硬件的一种软件接口,这个接口包含函数超过700个左右,这些函数用于指定物体和操作,创建交互式三维应用程序。
OpenGL图形系统的功能非常强大,程序相当复杂,但是许多实用的OpenGL的基本程序结构可能比较简单,主要任务是就是初始化一些状态,并制定需要渲染的物体。

GLUT函数库
窗口管理
glutInit对GLUT进行初始化,并处理所有命令行参数,在其他glut函数之前调用
glutInitDisplayMode 指定了是使用RGBA模式还是颜色索引模式,另外还可以指定是使用单缓冲还是双缓冲窗口
gluInitWindowPosition 指定窗口左上角屏幕位置
glutInitWindowSize 指定窗口大小
glutInitContextVersion 声明使用OpenGL版本
glutInitContextFlags 声明想要使用OpenGL渲染环境类型
int glutCreateWindow(char *string) 创建只一个支持OpenGL渲染环境的窗口。在调用glutMainLoop函数之前 该窗口并没有显示
显示回调函数
glutDisplayFunc是回调函数,每当GLUT确定一个窗口的内容需要重新显示时候,通过该方法注册的那个回调函数就会被执行,因此绘制场景代码应放在显示回调函数里面。
运行程序
调用glutMainLoop方法启动程序。一旦进入循环永远不退出

void myDisplay()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(1.0,1.0,1.0);
    glBegin(GL_POLYGON);
    glVertex3f(0.25,0.25,0.0);
    glVertex3f(0.75,0.25,0.0);
    glVertex3f(0.75,0.75,0.0);
    glVertex3f(0.25,0.75,0.0);
    glEnd();
    glFlush();

}

void Init()
{
    glClearColor(0.0,0.0,0.0,0.0);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0.0,1.0,0.0,1.0,-1.0,1.0);
}

int _tmain(int argc, _TCHAR* argv[])
{

    glutInit(&argc,(char**)argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
    glutInitWindowPosition(100,100);
    glutInitWindowSize(250,250);
    glutCreateWindow("OpenGL Program");
    Init();
    glutDisplayFunc(&myDisplay);
    glutMainLoop();
    return 0;
}

static GLfloat spin = 0.0;

void myDisplay()
{
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix();
glRotatef(spin,0.0,0.0,1.0);
glColor3f(1.0,1.0,1.0);
glRectf(-25.0,-25.0,25.0,25.0);
glPopMatrix();
glutSwapBuffers();

}

void SpinDisplay()
{
spin = spin+2.0;
if(spin>360.0)
spin = spin-360.0;
glutPostRedisplay();
}

void reshape(int w,int h)
{
glViewport(0,0,(GLsizei)w,(GLsizei)h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-50.0,50.0,-50.0,50.0,-1.0,1.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}

void mouse(int button,int state,int x,int y)
{
switch(button)
{
case GLUT_LEFT_BUTTON:
if(state==GLUT_DOWN)
glutIdleFunc(SpinDisplay);
break;
case GLUT_MIDDLE_BUTTON:
if(state==GLUT_DOWN)
glutIdleFunc(NULL);
break;
default:
break;
}
}

void Init()
{
glClearColor(0.0,0.0,0.0,0.0);

glShadeModel(GL_FLAT);

}

int _tmain(int argc, _TCHAR* argv[])
{

glutInit(&argc,(char**)argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
glutInitWindowPosition(100,100);
glutInitWindowSize(250,250);
glutCreateWindow("OpenGL Program");
Init();
glutDisplayFunc(&myDisplay);
glutReshapeFunc(reshape);
glutMouseFunc(mouse);
glutMainLoop();
return 0;

}

“`
处理输入事件
当指定事件发生时候,以下函数便会被调用
glutReshapeFunc 表示当窗口的大小发生改变时候应该采取什么行动
glutKeyboardFunc 和 glutMouseFunc 当键或者按钮按下或者释放函数就会调用
glutMotionFunc 注册一个函数 按下一个鼠标按钮移动鼠标时候 函数调用

空闲处理
glutIdleFunc 如果不存在其它未完成的事件 就执行这个函数 向他传递NULL就相当于禁用
GLUT包含一些函数可以用来绘制三维物体

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值