一、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)视口。把裁剪后的图形与屏幕一一对应。将笛卡尔坐标系下 的点映射到屏幕像素坐标下。视口不一定占据整个显示窗口,它还可以是窗口的一部分。
- 一、openGL 学习笔记 (基础问题)
- 初识openGL---openGL学习笔记(一)
- Opengl学习笔记(一)
- OpenGL学习笔记(一)
- OpenGL学习笔记(一)
- OpenGL 学习笔记(一)
- opengl学习笔记(一)
- OpenGL学习笔记(一)
- OpenGL学习笔记(一)
- opengl基础学习<一>
- opengl基础,学习笔记
- OpenGL学习笔记(一)
- OpenGL学习笔记(一)
- OpenGL 学习笔记一
- OpenGL 学习笔记一
- Opengl学习笔记一
- OpenGL学习笔记(一)
- OpenGL学习笔记(一)
- SlidingMenu (三)SlidingMenu详解
- Oracle学习之一——函数
- xcode,在webView中引入本地html,image,js,css文件的方法
- linux下导入、导出mysql数据库命令
- hdu 2577 How to Type(DP)
- 一、openGL 学习笔记 (基础问题)
- Mac下显示隐藏文件
- python判断key是否在字典里用in还是用has_key()
- 6.根据主类,设计类Shape, Rectangle和Circle。
- 【LCS】POJ1458Common Subsequence
- Android内存分配分配机制 Low Memory Killer
- 牛人看外国文献的方法
- SlidingMenu (四)SlidingMenu详解
- C++中的引用