精华内容
下载资源
问答
  • OpenGL作用机制

    2013-04-23 18:01:32
    OpenGL有个变换矩阵堆栈,堆栈就像...OpenGL中的每个向量,在被定义之后进入到OpenGL世界中,都必须先乘以这个变换矩阵堆栈的栈顶变换矩阵。 理解完上面的知识,再来理解glLoadIdentity、glTranslatef、glRotatef

    本文转自:http://blog.csdn.net/jiangdf/article/details/8458573

    OpenGL有个变换矩阵堆栈,堆栈就像子弹夹一样,先进的后出。OpenGL中的每个向量,在被定义之后进入到OpenGL世界中,都必须先乘以这个变换矩阵堆栈的栈顶变换矩阵。


    理解完上面的知识,再来理解glLoadIdentity、glTranslatef、glRotatef这些函数干了什么就容易多了。这些函数就是对这个堆栈的操作:

    • glTranslatef:将T(x,y,z)右乘与堆栈的栈顶变换矩阵。右乘的解释,假设目前栈顶变换矩阵为M,那么就相当于把M修改为M*T.
    • glRotatef :将R(x,y,z,s)右乘与堆栈的栈顶变换矩阵。
    • glLoadIdentity:将堆栈的栈顶变换矩阵设置成单位矩阵。
    • glPushMatrix:将堆栈的栈顶变换矩阵复制一份,然后Push到堆栈中。所谓Push,就像塞子弹一样把一个矩阵压入到堆栈中,此时,栈顶就是这个新的矩阵了,注意定义的向量都是和栈顶变换矩阵作用的。
    • glPopMatrix:将堆栈的栈顶变换矩阵Pop出来。

    该讲的讲完了,下面出几道题目练习下吧。

    1、OpenGL代码是:glLoadIdentity(); glTranslate3f(4,5,1); glRotate3f(0,1,0,90); glVertex3f(1,1,1); 请问此时栈顶变换矩阵是什么?(1,1,1)这个点到了OpenGL世界中的点是什么?

    答:栈顶变换矩阵是T(4,5,1)*R(0,1,0,90),(1,1,1)到OpenGL世界中的坐标是T(4,5,1)*R(0,1,0,90)*(1,1,1).

    2、解释为什么使用glPushMatrix和glPopMatrix的组合可以隔离这两个函数中的变换,使之不影响后面的点?

    答:glPushMatrix新压入的变换矩阵是复制了原来的栈顶变换矩阵,所以它继承了之前的变换,此后执行glTranslatef、 glRotatef这些函数时,修改的是栈顶变换矩阵,在glPopMatrix之前的点都将受到栈顶变换矩阵的作用,之后用glPopMatrix,把 栈顶变换矩阵Pop掉,此时的栈顶变换矩阵又还原成原来的那个栈顶变换矩阵。

    3、为什么有时候glTranslate3f和glRotate3f能颠倒有时候又不能?

    答:矩阵A乘以矩阵B未必等于矩阵B乘以矩阵A,当它们相等时,很多只是巧合。



    展开全文
  • opengl

    千次阅读 2015-05-02 14:32:44
    1.1 Opengl简介 2 1.2 openGl 的工作方式 3 1.2.1 Opengl 体系结构 3 1.2.2 openGl 流水线 3 1.2.3 OpenGl状态机 4 1.3 OpenGl 操作步骤 4 1.4 OpenGl 组成 4 1.5 OpenGl 数据类型 5 1.6 Open
     penGl 基本框架    2
    
    1.1 Opengl简介    2
    1.2 openGl 的工作方式    3
    1.2.1 Opengl 体系结构    3
    1.2.2 openGl 流水线    3
    1.2.3 OpenGl状态机    4
    1.3 OpenGl 操作步骤    4
    1.4 OpenGl 组成    4
    1.5 OpenGl 数据类型    5
    1.6 OpenGl 函数命名约定    5
    2. Linux Mesa 安装    6
    2.1 下载Mesa软件包    6
    2..2 For DRI and hardware acceleration    7
    2.3. 整理安装步骤    8
    2.3.1 下载mesalib 和gult包    8
    2.3.2 安装其他包    9
    2.3.3 安装dri2proto 和 libdrm, pixman    9
    2.3.4. 编译安装    10
    2.4 安装glut    11
    3. OpenGL 简介o    11
    3.1 什么是OpenGL    11
    3.2 OpenGL 一些概念    12
    3.3 OpenGL是一个状态机    13
    3.4 OpenGl 渲染管线    13
    3.4.1 显示列表    14
    3.4.2 求值器    14
    3.4.3 基于顶点的操作    14
    3.4.4 图元装配    14
    3.4.5 像素操作    15
    3.4.6 纹理装配    15
    3.4.7 光栅化    15
    3.4.8 片段操作1    16
    3.5 动画    16
    3.5.1 暂停刷新    16
    3.5.2 动画 = 重绘 + 交换    17
    3.6 OpenGl 废弃机制    17
    4. 状态管理和绘制几何物体    18
    4.1 绘图工具箱    18
    4.1.1 清除窗口    18
    4.1.2 指定颜色    19

    1 openGl 基本框架
    1.1 Opengl简介





    1.2 openGl 的工作方式
    1.2.1 Opengl 体系结构


    1.2.2 openGl 流水线


    1.2.3 OpenGl状态机


    1.3 OpenGl 操作步骤


    1.4 OpenGl 组成




    1.5 OpenGl 数据类型


    1.6 OpenGl 函数命名约定


    2. Linux Mesa 安装
    2.1 下载Mesa软件包
    1)进入http://www.mesa3d.org/download.html 下载 MesaLib-8.0.5.tar.gz,
    MesaGLUT-7.9.2.tar.gz

        2)把两个解压到同一个文件里,然后在shell里cd 到解压目录
    运行ubuntu@ubuntu:/opt/OpenGl/Mesa-8.0.5$ ./configure
    出现这个错误:configure: error: makedepend is required to build Mesa
    安装xutils-dev
    ubuntu@ubuntu:/opt/OpenGl/Mesa-8.0.5$

     sudo apt-get install xutils-dev

        3)./configure
    出现错误:error: Package requirements (glproto >= 1.4.14) were not met:
    No package 'glproto' found

     (   在网址http://packages.ubuntu.com/source/precise/x11/中,找到x11proto-gl (1.4.14-2),然后点击进去下载x11proto-gl_1.4.14.orig.tar.gz,
    安装库:a) ./configure b) make -j4 c) make install )

    解决方法:sudo apt-get install x11proto-gl-dev

        4)./configure
    error: Package requirements (dri2proto >= 2.6) were not met:
    No package 'dri2proto' found

       安装库: sudo apt-get install x11proto-dri2-dev
        
        5)./configure
    error: Package requirements (x11 xext xdamage xfixes x11-xcb xcb-glx) were not met:
    No package 'xdamage' found
    No package 'xfixes' found
    No package 'x11-xcb' found
    No package 'xcb-glx' found

        安装库:sudo apt-get install libx11-xcb-dev
                sudo apt-get install libxcb-glx0
                sudo apt-get install libxcb-glx0-dev
    sudo apt-get install libxdamage-dev

        6)./configure
           configure: error: Expat required for DRI.    
    见2.2
    2..2 For DRI and hardware acceleration


    1下载libdrm-2.4.35.tar.gz

    解压后进入libdrm目录
    1) 运行./configure
    出现:error: Package requirements (pciaccess >= 0.10) were not met:
    No package 'pciaccess' found

    安装:
    sudo apt-get install libpciaccess-dev

    2) 运行./configure生成makefile
    3)make
    4)make install

    2下载dri2proto-2.8.tar.gz
    解压后进入dri2proto目录
     1)./configure
    2) make install

    3 安装xorg-x11-serve
    1)从下面网址下下载xorg-x11-serve

    sudo apt-get install xserver-xorg-dev

    (http://ftp.isu.edu.tw/pub/Linux/Ubuntu/ubuntu/pool/main/x/xorg-server/
    2)解压后进入解压目录
    ./configure
    configure: error: Package requirements (pixman-1 >= 0.15.20) were not met:

    No package 'pixman-1' found
    3) 安装pixman
    http://packages.ubuntu.com/oneiric/libpixman-1-0 下载pixman
     ./configure
    make
    sudo make install

    4)./configure
    configure: error: Package requirements (xf86driproto >= 2.1.0) were not met:
    sudo apt-get install x11proto-xf86dri-dev

    5) ./configure
    checking for SHA1 implementation... configure: error: No suitable SHA1 implementation found

    sudo apt-get install openssl )

    4. 进入Mesa目录
    ./configure
    configure: error: Expat required for DRI

    sudo apt-get install libexpat-dev

    5. ./configure

    configure: error: LLVM is required to build Gallium R300 on x86 and x86_64

    sudo apt-get install llvm

    2.3. 整理安装步骤
    2.3.1 下载mesalib 和gult包
    进入http://www.mesa3d.org/download.html 下载 MesaLib-8.0.5.tar.gz,
    MesaGLUT-7.9.2.tar.gz

        2)把两个解压到同一个文件里

    2.3.2 安装其他包
    sudo apt-get install xutils-dev
    sudo apt-get install x11proto-gl-dev
    sudo apt-get install x11proto-dri2-dev
    sudo apt-get install libx11-xcb-dev
    sudo apt-get install libxcb-glx0
    sudo apt-get install libxcb-glx0-dev
    sudo apt-get install libxdamage-dev
    sudo apt-get install libpciaccess-dev
    sudo apt-get install xserver-xorg-dev
    sudo apt-get install x11proto-xf86dri-dev
    sudo apt-get install libexpat-dev
    sudo apt-get install llvm
    2.3.3 安装dri2proto 和 libdrm, pixman
    http://www.mesa3d.org/install.html
    下载


    1下载libdrm-2.4.35.tar.gz

    解压后进入libdrm目录
    1) 运行./configure
    2) 运行./configure生成makefile
    3)make
    4)make install

    2下载dri2proto-2.8.tar.gz
    解压后进入dri2proto目录
     1)./configure
    2) make install

    3. 安装pixman
    http://packages.ubuntu.com/oneiric/libpixman-1-0 下载pixman
     ./configure
    make
    sudo make install

    2.3.4. 编译安装
    进入解压的Mesa-8.0.5
    1)运行 ./configure
    prefix:          /usr/local
    exec_prefix:     ${prefix}
     libdir:          ${exec_prefix}/lib
     includedir:      ${prefix}/include

    2)编译Mesa
     make linux-x86

    3) 安装
    Make install

    4) 卸载
    sudo apt-get autoremove xutils-dev
    sudo apt-get autoremove x11proto-gl-dev
    sudo apt-get autoremove x11proto-dri2-dev
    sudo apt-get autoremove libx11-xcb-dev
    sudo apt-get autoremove libxcb-glx0
    sudo apt-get autoremove libxcb-glx0-dev
    sudo apt-get autoremove libxdamage-dev
    sudo apt-get autoremove libpciaccess-dev
    sudo apt-get autoremove xserver-xorg-dev
    sudo apt-get autoremove x11proto-xf86dri-dev
    sudo apt-get autoremove libexpat-dev
    sudo apt-get autoremove llvm

    #delete include and lib
    cd /usr/local
    #libdrm
    sudo rm -r include/libdrm
    sudo rm lib/libdrm*

    #dri2proto
    sudo rm -r include/libkms
    sudo rm lib/libkm*

    #pixman-1
    sudo rm -r include/pixman-1
    sudo rm lib/libpixman*

    #mesa
    sudo rm -r include/EGL
    sudo rm -r include/GL
    sudo rm -r include/KHR
    sudo rm -r include/VG
    sudo rm -r include/X11

    sudo rm lib/libEGL*
    sudo rm lib/libGL*
    sudo rm lib/libOpenVG*
    sudo rm lib/libOSMesa*

    2.4 安装glut
    sudo apt-get install freeglut3
    库路径:/usr/lib/i386-linux-gnu
    3. OpenGL 简介
    3.1 什么是OpenGL




    3.2 OpenGL 一些概念
    渲染:是计算机根据模型创建图像的过程。最终完成了渲染的图像是由屏幕上绘制的像素组成的。

    模型:根据几何图元创建的,也称为物体(object).几何图元包括点、直线和多边形等,它们是通过顶点(vertex)指定的。

    像素:显示硬件可以在屏幕的最小可视元素。(在内存中,和像素有关的信息(ep:像素的颜色))组成位平面的形式。

    位平面:是一块内存区域,保存了屏幕上每个像素的1个位的信息。(ep:它指定了一个特定像素的颜色中红色成分的强度)。
    位平面又可以组织成帧缓冲区(framebuffer)的形式,后者保存了图像硬件为了控制屏幕上所有像素的颜色和强度所需要的全部信息。

    3.3 OpenGL是一个状态机


    3.4 OpenGl 渲染管线



    3.4.1 显示列表


    3.4.2 求值器


    3.4.3 基于顶点的操作


    3.4.4 图元装配



    3.4.5 像素操作


    3.4.6 纹理装配


    3.4.7 光栅化


    3.4.8 片段操作


    3.5 动画




    3.5.1 暂停刷新
    如果帧率超过屏幕刷新率只会浪费图形处理的能力,因为监视器不能以这么快的速度更新,这样超过刷新率的帧率就浪费掉了。




    3.5.2 动画 = 重绘 + 交换


    3.6 OpenGl 废弃机制

    4. 状态管理和绘制几何物体


    4.1 绘图工具箱


    4.1.1 清除窗口





    在发送命令清除多个缓冲区之前,如果想使用并不是默认的RGBA值,深度值、累积值和模板索引值,就必须为每个缓冲区设置需要清除的值。

        glClearColor() 设置颜色缓冲区的值
        
        glClearDepth()设置深度缓冲区的值

        glClearIndex()设置清除相应缓冲区的颜色索引值

        glClearAccum() 设置累计累计缓冲区的颜色值

        glClearStencil()清除模板缓冲区的颜色值


    4.1.2 指定颜色
    OpenGL 程序员首先设置颜色或颜色方案,
    然后再绘制物体。
    在这种颜色方案被修改之前,所有的物体都用这种颜色方案进行绘制。

    为了设置颜色,可以使用glColor3f()函数。这个函数接受3个参数,它们都是0.0~1.0之间的浮点数,分别表示颜色的红、绿和蓝色成分。



    4.1.3 强制绘图完成







    4.2 顶点数组
    红宝书阅读笔记——缓冲区对象
    前面的顶点数组使得几何图元的显示方便了很多,但是如果每次都要向OPENGL发送一大块数据,而这数据其实并没有修改过,那么这传输就是冗余的。所以这里添加了缓冲区对象,将顶点数组存储在服务器端的缓冲区对象中。

    1. 创建缓冲区对象
    glGenBuffers(GLsizei n,GLuint *buffers) 任何非零的无符合整数都可以作为缓冲区对象的标识符使用。这个函数的作用就是向系统申请n个缓冲区,系统把这n个缓冲区的标识符都放进buffers数组中。还可以调用glIsBuffer()函数判断一个标识符是否正被使用。

    2. 激活缓冲区对象
    为了激活缓冲区对象,首先需要将它绑定。glBindBuffer(GLenum target, GLuint buffer)。target用于决定绑定的是顶点数据还是索引,关于这个函数的解释,书上第二章讲的很详细了。

    3. 用数据分配和初始化缓冲区对象
    glBufferData()用于在OPENGL服务器中分配内存建立缓冲区,并将客户机的内存复制到这个缓冲区对象。

    4. 更新缓冲区对象的数值
    当程序中的顶点坐标、颜色等数据发生了修改之后,需要修改对应的缓冲区数值。这里有两种方法可以完成此功能。

    glBufferSubData():直接用提供的数据替换绑定的缓冲区的数据子集。

    第二种方法更灵活些:
    首先用glMapBuffer()返回一个缓冲区指针,然后通过指针和下标对缓冲区对象做修改,
    最后调用glUnmapBuffer()取消对缓冲区的映射。

    5. 清除缓冲区对象
    glDeleteBuffers(GLsizei n,GLuint *buffers),完成了对缓冲区对象的操作之后,可以释放它的资源。
     
    当使用缓冲区对象存储顶点数组数据时,应在应用程序中增加几个步骤:

    1)生成缓冲区对象标识符(可选)。
    2)绑定缓冲区对象,确定它是用于存储顶点数据还是索引。
    3)请求数据的存储空间,并对这些数据元素进行初始化,
    下一个步骤可选。
    指定相对于缓冲区起始位置的偏移量,对诸如glVertexPointer()这样的顶点数组进行初始化。
    4)绑定适当的缓冲区对象,以用于渲染。
    5)使用适当的顶点数组渲染函数进行渲染,如glDrawArrays()或glDrawElements()等。
    流程图如下:

    over~

    展开全文
  • OpenGL

    2017-09-11 10:19:47
    openGl教程一、介绍1. openGL概念: OpenGL实际上是一种图形与硬件的接口。它包括了120个图形函数,开发者可以用这些函数来建立三维模型和进行三维实时交互. OpenGL中的gl库是核心库,glu是实用库,glut是实用工具库....

    参考:pyOpenGL官网
    openGl教程

    一、介绍

    1. openGL概念:

    • OpenGL实际上是一种图形与硬件的接口。它包括了120个图形函数,开发者可以用这些函数来建立三维模型和进行三维实时交互.

    • OpenGL中的gl库是核心库,glu是实用库,glut是实用工具库.

    • gl是核心,glu是对gl的部分封装,glut是OpenGL的跨平台工具库,gl中包含了最基本的3D函数,而glu似乎对gl的辅助,如果算数好,不用glu的情况下,也是可以做出同样的效果。

    • glut是基本的窗口界面,是独立于gl和glu的,如果不喜欢用glut可以用MFC和Win32窗口等代替,但是glut是跨平台的,这就保证了我们编出的程序是跨平台的,如果用MFC或者Win32只能在windows操作系统上使用。选择OpenGL的一个很大原因就是因为它的跨平台性,所以我们可以尽量的使用glut库。

    • OpenGL函数库相关的API有核心库(gl)、实用库(glu)、辅助库(aux)、实用工具库(glut)、窗口库(glx、agl、wgl)和扩展函数库等

    • glut是为跨平台的OpenGL程序的工具包,比aux功能强大。扩展函数库是硬件厂商为实现硬件更新利用OpenGL的扩展机制开发的函数。

    二、GLUT

    参考:glut官方文档

    一 、初始化

            1、void glutInit(int* argc,char** argv)
            这个函数用来初始化GLUT库。对应main函数的形式应是:
    
            int main(int argc,char* argv[]);
            这个函数从main函数获取其两个参数。
    
            2、void glutInitWindowSize(int width,int height);
            void glutInitWindowPosition(int x,int y);
            这两个函数很好理解是设置glut程序要产生的窗口的大小和位置(左上角)。以像素为单位。
    
            3、void glutInitDisplayMode(unsigned int mode);
                设置图形显示模式。参数mode的可选值为:
                GLUT_RGBA:当未指明GLUT—RGBA或GLUT—INDEX时,是默认使用的模式。
            表明欲建立RGBA模式的窗口。 
                GLUT_RGB:与GLUT—RGBA作用相同。
                GLUT_INDEX:指明为颜色索引模式。
                GLUT_SINGLE:只使用单缓存
                GLUT_DOUBLE:使用双缓存。以避免把计算机作图的过程都表现出来,或者为了平滑地实现动画。
                GLUT_ACCUM:让窗口使用累加的缓存。
                GLUT_ALPHA:让颜色缓冲区使用alpha组件。
                GLUT_DEPTH:使用深度缓存。
                GLUT_STENCIL:使用模板缓存。
                GLUT_MULTISAMPLE:让窗口支持多例程。
                GLUT_STEREO:使窗口支持立体。
                GLUT_LUMINACE:luminance是亮度的意思。但是很遗憾,在多数OpenGL平台上,不被支持。
    

    二、事件处理(Event Processing)

            1、void  glutMainLoop(void)
                  让glut程序进入事件循环。在一个glut程序中最多只能调用一次。一旦调用,会直到程序结束才返回。 
    
            2、glutReshapeFunc(void (GLUTCALLBACK *func)(int width, int height))
                    注册当前窗口的形状变化回调函数。当改变窗口大小时,该窗口的形状改变回调函数将被调用。
    
            3、glutDisplayFunc(void (GLUTCALLBACK *func)(void))
             注册当前窗口的显示回调函数,当一个窗口的图像层需要重新绘制时,GLUT将调用该窗口的的显示回调函数。显示回调函数不带任何参数,它负责整个图像层的绘制。我们的大部分工作将集中在这个函数中。
    
            4、glutMouseFunc(void (GLUTCALLBACK *func)(int button, int state, int x, int y))
                    设置鼠标器按键回调函数,当鼠标的左键、右键或中键被按下时触发被注册的函数执行。
    
            5、glutMotionFunc(void (GLUTCALLBACK *func)(int x, int y))
            设置鼠标器移动回调函数,当鼠标发生移动时执行被注册的函数。
    
            6、glutKeyboardFunc(void (GLUTCALLBACK *func)(unsigned char key, int x, int y))
            设置键盘回调函数,当键盘有键被按下是调用所注册的函数。
    
            7、glutIdleFunc(void (GLUTCALLBACK *func)(void))
                   设置空闲回调函数,当CPU空闲时调用该函数。
    

    三、窗口管理(Window Management)

            1、int glutCreateWindow(char* name);
                产生一个顶层的窗口。name 作为窗口的名字,也就是窗口标题栏显示的内容。
                返回值是生成窗口的标记符,可用函数glutGetWindow()加以引用。
    
            2、int glutCreateSubWindow(int win,int x,int y,int width,int height);
                创建一个子窗口。win是其父窗口的标记符。x,y是相对父窗口的位移,以像素表示。
                width,height是子窗口的宽和高。
    
            3、void glutSetWindow(int win)
                int glutGetWindow(void)
                功能分别是:设置标记符为win的窗口为当前窗口;返回当前窗口的标记符。
    
            4、void glutDestroyWindow(int win)
                销毁以win标记的窗口。
    
            5、void glutPostRedisplay(void)
                将当前窗口打上标记,标记其需要再次显示。
    
            6、void glutSwapBuffers(void)
                当窗口模式为双缓存时,此函数的功能就是把后台缓存的内容交换到前台显示。当然,只有单缓存时,使用它的功能跟用glFlush()一样。
                而使用双缓存是为了把完整图画一次性显示在窗口上,或者是为了实现动画。
    
            7、void glutPositionWindow(int x,int y)
                改变当前窗口的位置:当前窗口是顶层窗口时,x,y是相对于屏幕的的位移;当前窗口若是子窗口时,x,y是相对其父窗口原点的位移。
    
            8、void glutReshapeWindow(int width,int height)
                改变当前窗口的大小。
                width,height是当前窗口新的宽度和高度值,当然只能是正值。
    
            9、void glutFullscreen(void)
                让当前窗口全屏显示。当前窗口是顶层窗口时才有效。
    
            10、void glutPopWindow(void)
              void glutPushWindow(void)
                对顶层窗口和子窗口均有效。改变当前窗口在栈中相对于其它窗口的次序。
    
            11、void glutShowWindow(void)
              void glutHideWindow(void)
              void glutIconifyWindow(void)
             这三个函数作用是改变当前窗口的显示状态。
                glutShowWindow让当前窗口可视(这时它还是可能被其它窗口挡住)。
                glutHideWindow让当前窗口成为不可视状态。
                glutIconifyWindow让当前窗口成为一个图标,也即是最小化。
    
            12、glutSetWindowTitle(char* name);
                 glutSetIconTitle(char* name);
                 设置当前窗口(必须是顶层窗口)的标题和图标化时的标题。
    
            13、glutSetCursor(int cursor);
                 设置当前窗口的光标样式。
                 cursor可选值有许多:如GLUT_CURSOR_RIGHT_ARROW指向右边的光标,
            GLUT_CURSOR_LEFT_ARROW指向左边的光标,GLUT_CURSOR_INFO成为手状。
            GLUT_CURSOR_DESTROY呈叉状,GLUT_CURSOR_HELP呈现问号的形状。
            等等。        
    

    四、窗口的覆盖管理

            1、void glutEstablishOverlay(void);
            对当前窗口创建覆盖图层。该覆盖图的模式由初始化显示模式函数glutDisplayMode()决定。glutLayerGet(GLUT_OVERLAY_POSSIBLE)可用以设置对于当前窗口,是否允许产生由初始化显示模式函数规定其模式的覆盖图层。
    
            2、void glutUserLayer(GLenum layer);
            枚举量layer可选值为:GLUT_NORMAL,GLUT_OVERLAY.分别选取正常位平面或覆盖平面。
    
            3、void glutRemoveLayer(void);
            除去覆盖图。当没有覆盖图层时,调用这条语句也是安全的,这时系统不做任何事。
    
            4、void glutPostOverlayRedisplay(void);
            标记该覆盖图层为需要重新显示的状态。
    
            5、void glutShowOverlay(void);
            void glutHideOverlay(void);
            显示当前窗口的覆盖图层;隐藏覆盖图层。这两条语句即时执行。注意一下,只有窗口可视时,使用glutShowOverlay才能使其覆盖图层可视。当窗口被其他窗口遮挡时,其覆盖图层也被遮挡从而不可视。
    

    三、GL

    GL官方文档

            颜色编辑
            glShadeModel,glColor,glColorPointer,glIndex,glIndexPointer,glColorTableEXT,glColorSubTableEXT
    
            绘制几何图形 
            glVertex,glVertexPointer,glArrayElement,glBegin , glEnd,glEdgeFlag , glEdgeFlagv,glPointSize,glLineWidth,glLineStipple,glPolygonMode,glFrontFace,glPolygonStipple,glDrawElements,glRect
    
            坐标转换
            glTranslate,glRotate,glScale,glViewPoint,glFrustum,glOrtho,glClipPlane
    
            堆栈操作
            glLoadMatrix,glMultMatrix,glMatrixMode,glPushMatrix , glPopMatrix,glPushAttrib , glPopAttrib,glPushName , glPopName,glInitName ,glLoadName
    
            显示列表
            glNewList , glEndList,glCallList,glCallLists,glGenLists,glDeleteLists,
            glIsList,
    
            使用光照和材质
            glNormal,glNormalPointer,glLight,glLightModel,glMaterial,glColorMaterial,
    
            像素操作
            glRasterPos,glBitmap,glReadPixels,glDrawPixels,glCopyPixels,glCopyTexImage1D,glCopyTexImage2D,glCopyTexSubImage1D,glCopyTexSubImage2D,glPixelZoom,glPixelStore,glPixelTransfer,glPixelMap
    
            纹理映射
            glTexImage1D,glTexImage2D,glTexParameter,glTexSubImage1D,glTexSubImage2D,glTexEnv,glTexCoord,glTexGen,glTexCoordPointer,glDeleteTextures,
    
            特效操作
            glBlendFunc,glHint,glFog
    
            帧缓存操作
            glClear,glClearAccum,glClearColor,glClearDepth,glClearIndex,glClearStencil,glDrawBuffer,glIndexMask,glColorMask,glDepthMask,glStencilMask,glAlphaFunc,glStencilFunc,glStencilOp,glDepthFunc,glDepthRange,glLogicOp,glAccum,
    
            曲线或曲面绘制
            glEvalCoord,glMap1,glMap2,glMapGrid,glEvalMesh,glEvalPoint,
    
            查询函数
            glGet,glGetClipPlane,glGetColorTableEXT,glGetColorTableParameterfvEXT , glGetColorTableParameterivEXT,glGetError,glGetLight,glGetMap,glGetMaterial,glGetPixelMap,glGetPointerv,glGetPolygonStipple,glGetString,glGetTexEnv,glGetTexImage,glGetTexLevelParameter,glGetTexParameter,
    
    展开全文
  • OpenGL 函数作用列表

    2014-02-14 14:38:51
    文章出处:http://www.pcodenote.com/study-note/opengl-hanshuliebiao/ ------------------------------------------------------------------------------------------------- glAccum 操作累加缓冲区 ...
    文章出处:http://www.pcodenote.com/study-note/opengl-hanshuliebiao/
    
    -------------------------------------------------------------------------------------------------
    glAccum 操作累加缓冲区
    glAddSwapHintRectWIN 定义一组被SwapBuffers拷贝的三角形
    glAlphaFunc允许设置alpha检测功能
    glAreTexturesResident 决定特定的纹理对象是否常驻在纹理内存中
    glArrayElement 定义一个被用于顶点渲染的数组成分
    glBegin,glEnd 定义一个或一组原始的顶点
    glBindTexture 允许建立一个绑定到目标纹理的有名称的纹理
    glBitmap 绘制一个位图
    glBlendFunc 特殊的像素算法
    glCallList 执行一个显示列表
    glCallLists 执行一列显示列表
    glClear 用当前值清除缓冲区
    GlClearAccum 为累加缓冲区指定用于清除的值
    glClearColor 为色彩缓冲区指定用于清除的值
    glClearDepth 为深度缓冲区指定用于清除的值
    glClearStencil 为模板缓冲区指定用于清除的值
    glClipPlane 定义被裁剪的一个平面几何体
    glColor 设置当前色彩
    glColorMask 允许或不允许写色彩组件帧缓冲区
    glColorMaterial 使一个材质色彩指向当前的色彩
    glColorPointer 定义一列色彩
    glColorTableEXT 定义目的一个调色板纹理的调色板的格式和尺寸
    glColorSubTableEXT 定义目的纹理的调色板的一部分被替换
    glCopyPixels 拷贝帧缓冲区里的像素
    glCopyTexImage1D 将像素从帧缓冲区拷贝到一个单空间纹理图象中
    glCopyTexImage2D 将像素从帧缓冲区拷贝到一个双空间纹理图象中
    glCopyTexSubImage1D 从帧缓冲区拷贝一个单空间纹理的子图象
    glCopyTexSubImage2D 从帧缓冲区拷贝一个双空间纹理的子图象
    glCullFace 定义前面或后面是否能被精选
    glDeleteLists 删除相邻一组显示列表
    glDeleteTextures 删除命名的纹理
    glDepthFunc 定义用于深度缓冲区对照的数据
    glDepthMask 允许或不允许写入深度缓冲区
    glDepthRange 定义z值从标准的设备坐标映射到窗口坐标
    glDrawArrays 定义渲染多个图元
    glDrawBuffer 定义选择哪个色彩缓冲区被绘制
    glDrawElements 渲染数组数据中的图元
    glDrawPixels 将一组像素写入帧缓冲区
    glEdgeFlag 定义一个边缘标志数组
    glEdgeFlagPointer 定义一个边缘标志数组
    glEnable, glDisable 打开或关闭OpenGL的特殊功能
    glEnableClientState,glDisableClientState 分别打开或关闭数组
    glEvalCoord 求解一维和二维贴图
    glEvalMesh1,glEvalMesh2 求解一维和二维点或线的网格
    glEvalPoint1,glEvalPoint2 生成及求解一个网格中的单点
    glFeedbackBuffer 控制反馈模式
    glFinish 等待直到OpenGL执行结束
    glFlush 在有限的时间里强制OpenGL的执行
    glFogf,glFogi,glFogfv,glFogiv 定义雾参数
    glFrontFace 定义多边形的前面和背面
    glFrustum 当前矩阵乘上透视矩阵
    glGenLists 生成一组空的连续的显示列表
    glGenTextures 生成纹理名称
    glGetBooleanv,glGetDoublev,glGetFloatv,glGetIntegerv 返回值或所选参数值
    glGetClipPlane 返回特定裁减面的系数
    glGetColorTableEXT 从当前目标纹理调色板得到颜色表数据
    glGetColorTableParameterfvEXT,glGetColorTableParameterivEXT 从颜色表中得到调色板参数
    glGetError 返回错误消息
    glGetLightfv,glGetLightiv 返回光源参数值
    glGetMapdv,glGetMapfv,glGetMapiv 返回求值程序参数
    glGetMaterialfv,glGetMaterialiv 返回材质参数
    glGetPixelMapfv,glGetpixelMapuiv,glGetpixelMapusv 返回特定的像素图
    glGetPointerv 返回顶点数据数组的地址
    glGetPolygonStipple 返回多边形的点图案
    glGetString 返回描述当前OpenGl连接的字符串
    glGetTexEnvfv 返回纹理环境参数
    glGetTexGendv,glGetTexGenfv,glGetTexGeniv 返回纹理坐标生成参数
    glGetTexImage 返回一个纹理图象
    glGetTexLevelParameterfv,glGetTexLevelParameteriv 返回特定的纹理参数的细节级别
    glGetTexParameterfv,glGetTexParameteriv 返回纹理参数值
    glHint 定义实现特殊的线索
    glIndex 建立当前的色彩索引
    glIndexMask 控制写色彩索引缓冲区里的单独位
    GlIndexPointer 定义一个颜色索引数组
    glInitName 初始化名字堆栈
    glInterleavedArrays 同时定义和允许几个在一个大的数组集合里的交替数组
    glIsEnabled 定义性能是否被允许
    glIsList 检测显示列表的存在
    glIsTexture 确定一个名字对应一个纹理
    glLightf,glLighti,glLightfv,glLightiv 设置光源参数
    glLightModelf,glLightModeli,glLightModelfv,glLightModeliv 设置光线模型参数
    glLineStipple 设定线点绘图案
    glLineWidth 设定光栅线段的宽
    glListBase 为glcallList设定显示列表的基础
    glLoadIdentity 用恒等矩阵替换当前矩阵
    glLoadMatrixd,glLoadMatrif 用一个任意矩阵替换当前矩阵
    glLoadName 将一个名字调入名字堆栈
    glLogicOp 为色彩索引渲染定义一个逻辑像素操作
    glMap1d,glMap1f 定义一个一维求值程序
    glMap2d,glMap2f 定义一个二维求值程序
    glMapGrid1d,glMapGrid1f,glMapgrid2d,glMapGrid2f 定义一个一维或二维网格
    glMaterialf,glMateriali,glMateriafv,glMaterialiv 为光照模型定义材质参数
    glMatrixMode 定义哪一个矩阵是当前矩阵
    glMultMatrixd,glMultMatrixf 用当前矩阵与任意矩阵相乘
    glNewList,glEndList 创建或替换一个显示列表
    glNormal 设定当前顶点法向
    glNormalPointer 设定一个法向数组
    glOrtho 用垂直矩阵与当前矩阵相乘
    glPassThrough 在反馈缓冲区做记号
    glPixelMapfv,glPixelMapuiv,glPixelMapusv 设定像素交换图
    glPixelStoref,glpixelStorei 设定像素存储模式
    glPixelTransferf,glPixelTransferi 设定像素存储模式
    glPixelZoom 设定像素缩放因数
    glPointSize 设定光栅点的直径
    glPolygonMode 选择一个多边形的光栅模式
    glPolygonOffset 设定OpenGL用于计算深度值的比例和单元
    glPolygonStipple 设定多边形填充图案
    glPrioritizeTextures 设定纹理固定的优先级
    glPushAttrib,glPopAttrib 属性堆栈的压入和弹出操作
    glPushClientAttrib,glPopClientAttrib 在客户属性堆栈存储和恢复客户状态值
    glPushmatrix,glPopMatrix 矩阵堆栈的压入和弹出操作
    glPushName,glPopName 名字堆栈的压入和弹出操作
    glRasterPos 定义像素操作的光栅位置
    glreadBuffer 为像素选择一个源色彩缓冲区
    glReadPixels 从帧缓冲区读取一组数据
    glRectd,glRectf,glRecti,glRects,glRectdv,glRectfv,glRectiv,glRectsv 绘制一个三角形
    glRenderMode定义光栅模式
    glRotated,glRotatef 将旋转矩阵与当前矩阵相乘
    glScaled,glScalef 将一般的比例矩阵与当前矩阵相乘
    glScissor 定义裁减框
    glSelectBuffer 为选择模式值建立一个缓冲区
    glShadeModel 选择平直或平滑着色
    glStencilFunc 为模板测试设置功能和参照值
    glStencilMask 控制在模板面写单独的位
    glStencilOp 设置激活模式测试
    glTexCoord 设置当前纹理坐标
    glTexCoordPointer 定义一个纹理坐标数组
    glTexEnvf,glTexEnvi,glTexEnvfv,glTexEnviv 设定纹理坐标环境参数
    glTexGend,glTexgenf,glTexGendv,glTexGenfv,glTexGeniv 控制纹理坐标的生成
    glTexImage1D 定义一个一维的纹理图象
    glTexImage2D 定义一个二维的纹理图
    glTexParameterf,glTexParameteri,glTexParameterfv,glTexParameteriv 设置纹理参数
    glTexSubImage1D 定义一个存在的一维纹理图像的一部分,但不能定义新的纹理
    glTexSubImage2D 定义一个存在的二维纹理图像的一部分,但不能定义新的纹理
    glTranslated,glTranslatef 将变换矩阵与当前矩阵相乘
    glVertex 定义一个顶点
    glVertexPointer 设定一个顶点数据数组
    glViewport 设置视窗


     


    应用函数库
    gluBeginCurve,gluEndCurve 定义一条不一至的有理的NURBS曲线
    gluBeginPolygon,gluEndPolygon 定义一个非凸多边形
    gluBeginSurface,gluEndSurface 定义一个NURBS曲线
    gluBeginTrim,gluEndTrim 定义一个NURBS整理循环
    gluBuild1Dmipmaps 建立一维多重映射
    gluBuild2Dmipmaps 建立二维多重映射
    gluCylinder 绘制一个圆柱
    gluDeleteNurbsRenderer 删除一个NURBS对象
    gluDeleQuadric 删除一个二次曲面对象
    gluDeleteTess 删除一个镶嵌对象
    gluDisk 绘制一个盘子
    gluErrorString 根据OpenGL或GLU错误代码产生错误字符串
    gluGetNutbsProperty 得到一个NURBS属性
    gluGetString 得到一个描述GLU版本号或支持GLU扩展调用的字符串
    gluGetTessProperty 得到一个镶嵌对象
    gluLoadSamplingMatrices 加载NUMRBS例子和精选矩阵
    gluLookAt 设定一个变换视点
    gluNewNurbsRenderer 创建一个NURBS对象
    gluNewQuadric 建立一个二次曲面对象
    gluNewTess 建立一个镶嵌对象
    gluNextContour 为其他轮廓的开始做标记
    gluNurbsCallback 为NURBS对象设定一个回调
    gluNnrbsCurve 设定一个NuRBS曲线的形状
    gluNurbsProperty 设定一个NURBS属性
    gluNurbsSurface 定义一个NURBS表面的形状
    gluOrtho2D 定义一个二位正交投影矩阵
    gluPartialDisk 绘制一个盘子的弧
    gluPerspective 设置一个透视投影矩阵
    gluPickMatrix 定义一个拾取区间
    gluProject 将对象坐标映射为窗口坐标
    gluPwlCurve 描述一个分段线性NURBS修剪曲线
    gluQuadricCallback 为二次曲面对象定义一个回调
    gluQuadricDrawStyle 为二次曲面设定合适的绘制风格
    gluQuadricNormals 定义二次曲面所用的法向的种类
    gluQuadricOrientation 定义二次曲面内部或外部方向
    gluQuadricTexture 定义是否带二次其面做纹理帖图
    gluScaleImage 将图象变换为任意尺寸
    gluSphere 绘制一个球体
    gluTessBeginContour,gluTessEndContour 划定一个边界描述
    gluTessBeginPolygon,gluTessEndPolygon 划定一个多边形描述
    gluTessCallback 为镶嵌对象定义一个回调
    gluTessNormal 为一个多边行形定义法向
    gluTessProperty 设置镶嵌对象的属性
    gluTessVertex 定义在一个多边形上的顶点
    gluUnProject 将窗口坐标映射为对象坐标
    展开全文
  • OpenGL中shader的作用

    2019-08-02 22:06:50
    OpenGL画图的机制可以简化为如下: 1. GPU通过CPU发送的数据构造三维空间(屏幕坐标系)中的顶点. 2. 让这些顶点具有几何特征. 3. 当顶点具备几何特征之后, 就可以确定这些顶点会影响屏幕上面的哪些像素并着色. ...
  • OpenGl

    2014-06-08 14:26:59
    Xcode建立opengl模板,此模板并不推荐使用。 自己建立模板: 创建单个视图控制器模板,在xib界面中把模板关联上模板。 添加库文件: Opengles,quartzcore 在appdelegate中,方法:...
  • I want to use Swing together with the Java2D OpenGL graphics acceleration. However, it does not work.I answered this by myself, since I searched for the solution for quite some time.Here is my code:im...
  • 一、OpenGL 状态机概念、 二、OpenGL 矩阵概念
  • OPENGL

    千次阅读 2010-10-29 20:00:00
    OPENGL常见问题汇总报告
  • openGL

    千次阅读 2013-10-24 14:50:16
    说起编程作图,大概还有很多人想起TC的#include 吧? 但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的?就靠TC那可怜的640*480分辨率、16色来做吗?显然是不行的。 ...OpenGL命令最初就
  • OpenGL QT glViewport 函数的作用

    千次阅读 2015-09-23 22:12:51
    函数原型: ...改变OpengL描绘结果原点在屏幕的位置及尺寸   参数说明: x 以像素为单位,设置投影结果的原点在屏幕水平方向的位置,屏幕最左端为-width/2(世界坐标系中的-1),右端为width/2(世界坐标的1);
  • 版权: ... 原文在https://www.khronos.org/opengl/wiki/Layout_Qualifier_(GLSL) 原文在...GLSL语言规范中也有对此的详细说明https://www.khronos.org/registry/OpenGL/spe..
  • OpenGL 各个shader的作用和区别

    千次阅读 2017-05-03 18:47:16
    OpenGL4.0发布了Tessellation shader(Control + Evaluation shader)。到OpenGL4.* 为止,现在OpenGL已经支持了5种不同类型的shader。 1.Vertex Shader,简称VS 2.TESS Control Shader (D3D11 叫Hull shader)...
  • OpenGL入门教程

    万次阅读 多人点赞 2018-12-03 18:14:53
    OpenGL OpenGL是渲染2D、3D矢量图形硬件的一种软件接口。本质上说,它是一个3D图形和模型库,具有高度的可移植性,并且具有非常快的渲染速度。OpenGL并不是一种语言,而是更像一个C运行时函数库。它提供了一些预包装...
  • 初学OpenGL的时候,在cpp源文件中经常需要引用到gl.h、glu.h、gltools.h等各种头文件,其实也不知道每个头文件都是干啥用的,通过网上资源了解了下,现在来总结下: 1、gl.h 按照约定,所有的OpenGL函数、类型...
  • opengl程序

    2012-11-21 11:31:14
    这是用opengl编写的一个很漂亮房间的程序,对于初学者,有借鉴的作用
  • opengl Manual

    2012-02-19 11:09:50
    每个函数的参考说明介绍了参数、命令的作用和使用这些命令时可能发生的错误。 此外,本章还包含了有关OpenGL的 ARB扩展—多重纹理和绘图子集的参考说明。需要说明的是并非所有的OpenGL的环境都支持ARB扩展。 ?第...
  • OpenGL ES总结(一)OpenGL 初识

    万次阅读 多人点赞 2017-03-12 13:55:04
    OpenGL是在图形图像中,非常优秀的渲染库,文中Demo下载地址:https://github.com/hejunlin2013/OpenGL31,看下今天的Agenda:
  • OpenGL/OpenGL ES入门:图形API以及专业名词解析 OpenGL/OpenGL ES入门:渲染流程以及固定存储着色器 OpenGL/OpenGL ES入门:图像渲染实现以及渲染问题 OpenGL/OpenGL ES入门:基础变换 - 初识向量/矩阵 OpenGL/...
  • OpenGL概述

    2020-12-26 23:43:24
    笔记什么是OpenGL初识OpenGLOpenGL语法OpenGL渲染管线 什么是OpenGL OpenGL是一种API,是一种可以对图形设备访问的软件库。 OpenGL被设计为一个现代化的、与硬件无关的接口。(可以在不考虑操作系统或窗口系统/在...
  • 本文目标: 能够理解OpenGL的程序逻辑。 能够看懂大部分网上博客上的新手程序 能够认识更多的OpenGL函数 能够自己手写OpenGL。 1. 理清整个OpenGL代码的逻辑 ...1.2 几个函数分别有什么作用呢? 很直观的理解: ...
  • 我保留一个opengl视图的多个实例。 当我释放/删除视图的一个实例时,它将影响opengl视图的所有其他实例的帧缓冲区和渲染缓冲区。 我观察到对glDeleteFrameBuffer的调用会删除所有我创建的小型项目的帧缓冲区...
  • OpenGL ES

    2015-07-30 15:15:16
    OpenGL ES:是一套图形硬件的... 作用是将3D场景绘制到2D屏幕上,图形学中,这一过程通过一系列的渲染管线完成。 顶点数组:  OpenGL ES 不提供3D模型的定义,再传入OpenGL ES之前,应用程序应该将3D模型转换为一组
  • OpenGL ES 3.0

    2018-11-21 09:36:02
    OpenGL ES 3.0 英文版 第1章——OpenGL ES 3.0简介  第1章简单介绍OpenGL ES,概述了OpenGL ES 3.0图形管线,讨论了OpenGL ES 3.0的设计... 附录C提供了我们为本书开发的实用框架的参考,并说明了每个函数的作用
  • OpenGL入门

    2016-05-22 15:33:26
    很好的opengl入门教程,欢迎大家下载参考!!

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 29,546
精华内容 11,818
关键字:

opengl作用