简单程序流程

void display(void) { 画图 }

void init(void) { 初始化(指定当前矩阵、重置当前矩阵、定义视景...) }

int main(int argc,char **argv) {

1、gultInit(int *argc, char **argv)——对glut初始化,在调用其他任何GLUT函数之前

2、glutInitDisplayMode(unsigned int mode)——指定颜色模式(GLUT_RGBA/颜色索引)和(或)缓冲(GLUT_DOUBLE/GLUT_SINGLE/GLUT_DEPTH...)

3、glutInitWindowPosition(int x,int y)——窗口位置

4、glutInitWindowSize(int width,int size)——大小

5、glutCreateWindow(char *string)——创建窗口 string为名字,在调用glutMainlLoop()之前窗口不显示

6、init()——自己定义的初始化函数

7、glutDisplayFunc(void (*func)(void))——注册回调函数(自己定义),并执行

8、glutMainlLoop()——显示窗口

return 0;

}


用于注册处理输入事件回调函数的函数

1、glutReshapeFunc(void (*func)(int w,int h))——窗口大小改变时的行动

2、glutKeyboardFunc(void (*func)(unsigned char key, int x, int y))——将键盘与函数关联(按下/释放)

3、glutMouseFunc(void (*func)(int button, int state, int x, int y))——将鼠标与函数关联(按下/释放)

4、glutMotionFunc(void (*func)(int x, int y))——按下鼠标一个按钮移动鼠标时的动作


实例:

#include <GL/glut.h>
#include <stdio.h>
#include <stdlib.h>
static GLfloat spin=0.0;

void init(void) {
    glClearColor(0.0,0.0,0.0,0.0);
    glShadeModel(GL_FLAT);
}
void display(void) {
    glClear(GL_COLOR_BUFFER_BIT);//清除缓冲区,GL_COLOR_BUFFER_BIT颜色缓冲;GL_DEPTH_BUFFER_BIT深度缓冲;GL_ACCUM_BUFFER_BIT累积缓冲;GL_STENCIL_BUFFER_BIT模板缓冲
    glPushMatrix();//保存当前矩阵
    glRotatef(spin,0.0,0.0,1.0);//矩阵旋转,spin为角度,以向量(x,y.z)为轴glTranslatef(x,y,z)在x,y,z上平移,glScalef(x,y,z)将x,y,z轴缩放
    glColor3f(1.0,1.0,1.0);
    glRectf(-25.0,-25.0,25.0,25.0);//画矩形
    glPopMatrix();//弹出所存矩阵
    glutSwapBuffers();
}
void spinDisplay(void) {
    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);//指定当前矩阵GL_PROJECTION投影矩阵;GL_MODELVIEW模型视景矩阵;GL_TEXTURE纹理矩阵
    glLoadIdentity();//重置当前矩阵为单位矩阵
    glOrtho(-50.0,50.0,-50.0,50.0,-1.0,1.0);//用什么样的视景截取图像(left,right,button,top,near,far)
    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;
    }
}
int main(int argc, char **argv){
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
    glutInitWindowSize(250,250);
    glutInitWindowPosition(100,100);
    glutCreateWindow("mywindow");
    init();
    glutDisplayFunc(display);//回调函数注册函数
    glutReshapeFunc(reshape);//注册函数
    glutMouseFunc(mouse);//注册函数
    glutMainLoop();
    return 0;
}


结果:



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值