zoukankan      html  css  js  c++  java
  • OpenGL及GLUT---------------函数整理

    1.GLUT

    // 进入GLUT事件处理循环,在GLUT程序中最多调用一次该函数,一旦被调用,该函数将永不返回,它将根据需要调用已注册的任何回调函数。
    void glutMainLoop(void); 
    // 将当前窗口标记为需要重新显示,通过glutMainLoop下一次迭代,将调用窗口的显示回调来重新显示窗口
    void glutPostRedisplay(void);
    // 为当前窗口设置display回调函数
    void glutDisplayFunc(void (*func)(void));
    // 为当前窗口设置reshape回调函数 void glutReshapeFunc(void (*func)(int width, int height));
    // 设置当前窗口的键盘回调函数 void glutKeyboardFunc(void(* func)(unsigned char key, int x,int y));
    // 设置当前窗口的特殊键盘回调函数 void glutSpecialFunc(void(* func)(int key,int x,int y));
    // 设置初始显示模式
    void glutInitDisplayMode(unsigned int mode);
    // eg
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
    // 渲染一个实心茶壶,  size 茶壶相对大小
    void glutSolidTeapot(GLdouble size); 

    2.glMatrixMode()

    glMatrixMode是用来指定哪一个矩阵是当前矩阵,而它的参数代表要操作的目标

    GL_PROJECTION是对投影矩阵操作

    glMatrixMode(GL_PROJECTION); //将当前矩阵指定为投影矩阵
    
    //然后把矩阵设为单位矩阵:
    glLoadIdentity();
    //然后调用glFrustum()或gluPerspective(),它们生成的矩阵会与当前的矩阵相乘,生成透视的效果;

    GL_MODELVIEW是对模型视景矩阵操作

    GL_TEXTURE是对纹理矩阵进行随后的操作

    3.glLoadIdentity()

      OpenGL为我们提供了一个非常简单的恢复初始坐标系的手段,那就是调用glLoadIdentity()命令。

      该命令是一个无参的无值函数,其功能是用一个4×4的单位矩阵来替换当前矩阵,实际上就是对当前矩阵进行初始化。

    4.

    //你可以使用下面的两个函数来加载你的列主序的矩阵到投影矩阵,模型视图矩阵或者纹理矩阵栈中
    //用指定矩阵替代当前矩阵
    glLoadMatrixf(GLfloat* m); // float glLoadMatrixd(GLdouble* m); // double
    //相对应的OpenGL还提供了加载行主序的矩阵的两个函数
    
    void glLoadTransposeMatrixf(GLfloat *m);
    void glLoadTransposeMatrixd(GLdouble *m);

    5 返回所选参数的值

    void glGetFloatv(GLenum pname, GLfloat * data); // float类型的

    6

    glEnable(GL_DEPTH_TEST); // 进行深度比较,并更新深度缓冲区

    7

    // 链接程序,返回对应‘name’的程序program中的统一变量的地址
     GLint glGetUniformLocation(GLuint program, const GLchar *name); 

    8

    // 指定统一变量的值(将value指向的值赋予location代表的统一变量)
     void glUniform4fv(GLint location, GLsizei count, const GLfloat *value);

    9

    // 设置视窗左上角坐标,窗口宽度和高度
    void glViewport(    GLint x,GLint y,GLsizei width,GLsizei height);

    10

    // 创建或使用命名缓冲区对象
    void glBindBuffer(GLenum target,GLuint buffer);
    
    // target:选择要绑定的缓冲区类型,只有当前被绑定的才会被用户操作,通过(从表中选择,表见api文档)
    // buffer:指定绑定缓冲区的handle

    11

    // 创建和初始化缓冲区对象的数据存储
    void glBufferData(GLenum target,GLsizeiptr size,const GLvoid * data,GLenum usage);
    // target:绑定的缓冲区对象类型
    // size:指定缓冲区对象的新数据存储的大小(以字节为单位)
    // data:用于初始化的数据的指针,没有数据则为NULL
    // usage:指定使用的数据存储的方式

    12..(OpenGL2.1)

    // 启用客户端功能
    void glEnableClientState( GLenum cap);
    // cap: 指定要启动的功能,例举两个参数如下,详细见api
    // GL_COLOR_ARRAY 如果启用,则在调用glArrayElement,glDrawArrays,glDrawElements,glDrawRangeElements ,
    //   glMultiDrawArrays或glMultiDrawElements时,将启用颜色数组进行写入和使用。
    // GL_VERTEX_ARRAY 如果启用,在调用上述函数时,将启用顶点数组进行写入和使用
    
    
    // 指定渲染时要使用的顶点坐标数组的位置和数据格式,
    // 如果已将缓冲区对象绑定到缓冲区,则将指针视为缓冲区对象的数据存储中的字节偏移量
    void glVertexPointer(    GLint size, // 每个定点的坐标维数
         GLenum type,                    // 每个坐标的数据类型
         GLsizei stride,                 // 从一个顶点到下一个顶点的字节跨度
         const GLvoid * pointer);        // 指定指向数组中第一个定点的第一个坐标的指针,初始值为0
    // 在有限时间内强制执行之前发出的GL命令
    void glFlush(void);
  • 相关阅读:
    3组Alpha冲刺5/6
    3组Beta冲刺4/5
    3组Alpha冲刺6/6
    3组Beta冲刺2/5
    3组Beta冲刺3/5
    delegate Demo (一个关于System.Timers.Timer的Demo)
    System.Web.HttpException 与 HTTP Error 404.13 Not Found问题解决说明
    常用SQL关于表的操作
    设计模式学习笔记:单例模式
    JS 实践杂记
  • 原文地址:https://www.cnblogs.com/Ziyo/p/9716443.html
Copyright © 2011-2022 走看看