一、openGL 学习笔记 (基础问题)

来源:互联网 发布:淘宝产品怎么推广 编辑:程序博客网 时间:2024/06/07 02:28

一、 标准函数库和头文件

          openGL函数库有许多不同的实现和版本。

          在Windows中,软件实现是在opengl32.dll中,位于windows系统目录。

          在大多数平台中,函数是由openGL工具库(GLU)实现的,windows中位于glu32.dll,该文件位于windows系统目录。

          在Mac OS X 中, openGL 和GLU函数库都位于openGL框架中。


          编译器参见网站:www.opengl.org/superbible。


          在所有的平台上,所有openGL函数、类型、宏的原型都包含在头文件gl.h中。工具库函数的原型则出现在另一个头文件glu.h中。

          例如,下面的代码显示了使用openGL的windows程序所包含的典型头文件。

#include <windows.h>#include <gl/gl.h>#include <gl/glu.h>

二、数据类型

         数据的内部表示形式在所有的平台(甚至是64位操作系统)上都是相同的,而不管计算机的字长以及具体所使用的编译器如何。

         所有的数据类型都是以GL开头,表示openGL。随后是它们对应的C数据类型,有些前面还有个u,表示这是一种无符号数据类型。

三、函数名约定

         所有的openGL函数都采用了以下的格式:

        <函数库前缀><根命令><可选的参数数量><可选的参数类型>

        

          所有遵循标准的C/C++编译器都假定所有浮点型字面值的类型都是double,除非显示用后缀进行指定。但是在openGL在内部使用的是float。要注意数据类型之间的转换,编译器可能会给出警告信息,程序大了之后可能会出错。

四、平台独立性

         AUX:openGL辅助函数库。

         GLUT:openGL utility toolkit (openGL 工具箱)。

         GLU: openGL utility library。

         在windows中,GLUT 的开发已经中断。一种新的GLUT实现freeglut已经崛起并取代之。


         缓冲区:用于保存图像信息的存储区域。

         单缓冲窗口:所有的绘图命令都在显示窗口上执行。

         双缓冲窗口:绘图命令在一个屏幕之外的缓冲区中执行,然后快速执行交换,在窗口上显示。

五、第一个程序

#define GLUT_DISABLE_ATEXIT_HACK //若无,VS2010会出现“无法解析的外部符号”错误#include "gl/gl.h"#include "gl/glut.h"void RenderScene(void){// Clear the window with current clearing colorglClear(GL_COLOR_BUFFER_BIT);// Flush drawing commands    glFlush();}///////////////////////////////////////////////////////////// Setup the rendering statevoid SetupRC(void)    {    glClearColor(0.0f, 0.0f, 1.0f, 1.0f);    }///////////////////////////////////////////////////////////// Main program entry pointint main(int argc, char* argv[]){glutInit(&argc, argv);glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA); glutCreateWindow("Simple");glutDisplayFunc(RenderScene);SetupRC();glutMainLoop();        return 0;    }


         显示回调:

glutDisplayFunc(RenderScene);

        意味着当窗口需要绘制时GLUT将会调用这个函数。例如,当窗口第一次显示或当窗口改变大小,或者当窗口从被覆盖的状态中恢复时,就会调用这个函数。也是进行openGL渲染函数调用的地方。

         glutMainLoop(): 该函数启动GLUT框架的运行。一经调用,不再返回,直到程序终止。在程序中智能调用一次。

六、缓冲区

缓冲区就是用于保存图像信息的存储区域。一幅图像的红、绿、蓝颜色通常一起存储在一个叫做颜色缓冲区或像素缓冲区的地方。

openGL具有多种缓冲区,颜色、深度、模板和累积。颜色缓冲区其实是被显示图像的内部存储位置,跳动glClear将从窗口中清除最后一次所绘制的图形。

帧缓冲区是这些缓冲区的合称。

七、回调函数

openGL有不同的回调函数,例如,显示回调函数,每次需要绘图时都调用该函数。

八、坐标系统

个人理解:先在纸上画图,然后对其进行裁剪,看哪部分想在显示器上显示。显示的时候还可以决定在窗口的哪一部分进行显示。

(1)2D笛卡尔坐标系。先在这个坐标系下绘制图形。

(2)裁剪。绘制的图形不一定全部需要显示,对希望显示的图形进行裁剪。

(3)视口。把裁剪后的图形与屏幕一一对应。将笛卡尔坐标系下 的点映射到屏幕像素坐标下。视口不一定占据整个显示窗口,它还可以是窗口的一部分。

        



0 0
原创粉丝点击