zoukankan      html  css  js  c++  java
  • OpenGL实践之--窗口创建

      作为一个图形接口的OpenGL在使用严重依赖窗口,必须在窗口中绘制图形,但是自身并没有包含窗口及其相关内容。因此,学习OpenGL就必须了解一种窗口系统,不同的操作系统提供的创建窗口的API都不相同,为了避免学习OpenGL时必须去学习一整套的窗口系统的不便,简单应用可以使用GLUT(OpenGL Utility Toolkit),是一套和窗口系统无关的软件包,提供了窗口创建及用户输入输出等功能。但GLUT并不是一个功能特别全面的窗口系统工具包,在构建大型复杂应用时还是需要根据需求选择相应的窗口系统工具包。freeglut随着opengl的发展而保持更新,以下使用freeglut,没有使用原生的glut。

    GLUT的基本流程包括四步:

    1)初始化GLUT库;

    2)创建GLUT窗口;

    3)注册display()回调函数;

    4)进入GLUT主循环;

    glut初始化

    在使用glut之前,一定要初始化glut库。函数原型为:

    void glutInit(int argc,char **argv);

    接下来可设置glut的一些属性。

    配置显示特性

    void glutInitDisplayMode(unsigned int mode);

    mode 默认为GLUT_INDEXGLUT_SINGLE、GLUT_DEPTH的按位组合。

    配置OpenGL版本

    void glutInitContextVersion(int majorVersion, int minorVersion);

    配置创建的上下文信息

    void  glutInitContextProfile(int profile)

    core版本:GLUT_CORE_PROFILE;

    兼容性版本:GLUT_COMPATIBILITY_PROFILE;

    创建窗口

    int glutCreateWindow(char* name);

    设置窗口位置和大小

    void glutInitWindowSize(int width,int height);

    void glutInitWindowPosition(int x, int y);

    设置渲染函数

    void glutDisplayFunc(void (*func)(void));

    窗口变化回调函数

    void glutReshapeFunc(void (*func)(int width, int height));

    键盘按键事件监听

     void glutKeyboardFunc(void (*func)(unsigned char key, int x, int y));

    void glutKeyboardUpFunc(void (*func)(unsigned char key, int x, int y));

    鼠标事件监听

    void glutMouseFunc(void (*func)(int button, int state, int x, int y)); //鼠标被按下是触发

    void glutMotionFunc(void (*func)(int x, int y));//按下鼠标按钮并在窗口内移动触发

    void glutPassiveMotionFunc(void (*func)(int x, int y));//鼠标指针在窗口内移动

    窗口重绘标记

    void  glutPostRedisplay(void);标记窗口需要重绘,在下一次的执行过程中,将调用渲染函数。

    背景管理

    void glutIdleFunc(void (*func)(void));//当没有其它事件需要处理时的时候调用func,典型应用如动画

    事件循环

    void glutMainLoop();//永远不会返回

    人就像是被蒙着眼推磨的驴子,生活就像一条鞭子;当鞭子抽到你背上时,你就只能一直往前走,虽然连你也不知道要走到什么时候为止,便一直这么坚持着。
  • 相关阅读:
    gitlab的数据库磁盘坏了已经没有办法恢复情况下如何恢复git上的代码
    psql: FATAL: the database system is in recovery mode
    k8s 下 jenkins 分布式部署:利用pipeline动态增加slave节点
    pipeline 流水线:持续部署(docker)-企业微信群通知消息
    查看私有仓库镜像的版本列表
    MyBatis与Hibernate比较
    MyBatis与JDBC的对比
    Java_Ant详解(转载)
    IntelliJ Idea 常用快捷键列表
    隔行换色
  • 原文地址:https://www.cnblogs.com/guochaoxxl/p/14291210.html
Copyright © 2011-2022 走看看