OpenGL编程参考手册
OpenGL编程指南
OpenGL基础图形编程- 总目录出处:中国游戏开发者[ 2001-09-20 ]作者:总目录第一章OpenGL与三维图形世界1.1 OpenGL使人们进入三维图形世界1.2 OpenGL提供直观的三维图形开发环境1.3 OpenGL称为目前三维图形开发标准第二章OpenGL概念建立2.1 OpenGL基本理解2.2 OpenGL工作流程2.3 OpenGL图形操作步骤第三章Windows NT环境下的OpenGL3.1 Windows NT下的OpenGL函数3.2 OpenGL基本功能3.3 Windows NT下OpenGL结构第四章OpenGL基本程序结构第五章OpenGL数据类型和函数名第六章OpenGL辅助库的基本使用6.1 辅助库函数分类6.2 辅助库应用示例第七章OpenGL建模7.1 描述图元7.1.1 齐次坐标7.1.2 点7.1.3 线7.1.4 多边形7.2 绘制图元7.2.1 定义顶点7.2.2 构造几何图元第八章OpenGL变换8.1 从三维空间到二维平面8.1.1 相机模拟8.1.2 三维图形显示流程8.1.3 基本变换简单分析8.2 几何变换8.2.1 两个矩阵函数解释8.2.2 平移8.2.3 旋转8.2.4 缩放和反射8.2.5 几何变换举例8.3 投影变换8.3.1 正射投影8.3.2 透视投影8.4 裁剪变换8.5 视口变换8.6 堆栈操作第九章OpenGL颜色9.1 计算机颜色9.1.1 颜色生成原理9.1.2 RGB色立体9.2 颜色模式9.2.1 RGBA模式9.2.2 颜色表模式9.2.3 两种模式应用场合9.3 颜色应用举例第十章OpenGL光照10.1 真实感图形基本概念10.2 光照模型10.2.1 简单光照模型10.2.2 OpenGL光组成10.2.3 创建光源10.2.4 启动光照10.3 明暗处理10.4 材质10.4.1 材质颜色10.4.2 材质定义10.4.3 材质RGB值和光源RGB值的关系10.4.4 材质改变第十一章OpenGL位图和图像11.1 位图11.1.1 位图和字符11.1.2 当前光栅位置11.1.3 位图显示11.2 图像11.2.1 象素读写11.2.2 象素拷贝11.2.3 图像缩放11.2.4 图像例程第十二章OpenGL纹理12.1 基本步骤12.2 纹理定义12.3 纹理控制12.3.1 滤波12.3.2 重复与约简12.4 映射方式12.5 纹理坐标12.5.1 坐标定义12.5.2 坐标自动产生第十三章OpenGL复杂物体建模13.1 图元扩展13.1.1 点和线13.1.2 多边形13.2 法向计算13.2.1 法向基本计算方法13.2.2 法向定义13.3 曲线生成13.3.1 曲线绘制举例13.3.2 曲线定义和启动13.3.3 曲线坐标计算13.3.4 定义均匀间隔曲线坐标值13.4 曲面构造13.4.1 曲面定义和坐标计算13.4.2 定义均匀间隔的曲面坐标值13.4.3 纹理曲面13.4.4 NURBS曲面第十四章OpenGL特殊光处理14.1 光照模型14.1.1 全局环境光14.1.2 近视点与无穷远视点14.1.3 双面光照14.2 光源位置与衰减14.3 聚光与多光源14.3.1 聚光14.3.2 多光源与例程14.4 光源位置与方向的控制14.5 辐射光第十五章OpenGL效果处理15.1 融合15.1.1 Alpha值与融合15.1.2 融合因子15.1.3 融合实例15.2 反走样15.2.1 行为控制函数15.2.2 点和线的反走样15.2.3 多边形的反走样15.3 雾15.3.1 雾的概论和例程15.3.2 雾化步骤第十六章OpenGL显示列表16.1 显示列表概论16.1.1 显示列表的优势16.1.2 显示列表的适用场合16.2 创建和执行显示列表16.2.1 创建显示列表16.2.2 执行显示列表16.3 管理显示列表16.4 多级显示列表第十七章OpenGL帧缓存和动画17.1 帧缓存17.1.1 帧缓存组成17.1.2 缓存清除17.2 动画【下页】【打印】【关闭】[ 字号:大·中·小]OpenGL基础图形编程- OpenGL与3D图形世界出处:中国游戏开发者[ 2001-09-20 ]作者:目录1.1 OpenGL使人们进入三维图形世界1.2 OpenGL提供直观的三维图形开发环境1.3 OpenGL成为目前三维图形开发标准1.1、OpenGL使人们进入三维图形世界我们生活在一个充满三维物体的三维世界中,为了使计算机能精确地再现这些物体,我们必须能在三维空间描绘这些物体。
OpenGL使用手册.
OpenGL函数使用手册(一)OpenGL函数库格式:<库前缀><根命令><可选的参数个数><可选的参数类型> 库前缀有 gl、glu、aux、glut、wgl、glx、agl 等等,1,核心函数库主要可以分为以下几类函数:(1) 绘制基本的几何图元函数。
如:glBegain().(2) 矩阵操作、几何变换和投影变换的函数。
如:矩阵入栈glPushMatrix(),还有矩阵的出栈、转载、相乘,此外还有几何变换函数glTranslate*(),投影变换函数glOrtho()和视口变换函数glViewport()等等。
(3) 颜色、光照和材质函数。
(4) 显示列表函数,主要有创建、结束、生成、删除和调用显示列表的函数glNewList()、glEndList()、glGenLists()、glDeleteLists()和glCallList()。
(5) 纹理映射函数,主要有一维和二维纹理函数,设置纹理参数、纹理环境和纹理坐标的函数glTexParameter*()、glTexEnv*()和glTetCoord*()等。
(6) 特殊效果函数。
(7) 选着和反馈函数。
(8) 曲线与曲面的绘制函数。
(9) 状态设置与查询函数。
(10) 光栅化、像素函数。
2,OpenGL实用库(The OpenGL Utility Library)(GLU)包含有43个函数,函数名的前缀名为glu.(1) 辅助纹理贴图函数。
(2) 坐标转换和投影变换函数。
(3) 多边形镶嵌工具。
(4) 二次曲面绘制工具。
(5) 非均匀有理B样条绘制工具。
(6) 错误反馈工具,获取出错信息的字符串gluErrorString() 3,OpenGL辅助库包含有31个函数,函数名前缀名为aux这部分函数提供窗口管理、输入输出处理以及绘制一些简单的三维物体。
4,OpenGL工具库(OpenGL Utility Toolkit)包含大约30多个函数,函数前缀名为glut,此函数由glut.dll来负责解释执行。
opengl使用手册 简书
opengl使用手册简书(原创实用版)目录一、OpenGL 简介二、OpenGL 函数库1.核心函数库2.矩阵操作、几何变换和投影变换函数3.交互式输入设备函数三、OpenGL 扩展库 GLEW正文一、OpenGL 简介OpenGL(Open Graphics Library)是一个跨平台的图形编程接口,用于渲染 2D 和 3D 图形。
OpenGL 提供了一套完整的图形渲染 API,可以实现各种视觉效果,如颜色、光照、阴影、纹理贴图等。
它广泛应用于游戏开发、计算机辅助设计、虚拟现实、科学可视化等领域。
二、OpenGL 函数库OpenGL 函数库包含许多可以用于绘制图形的函数。
这些函数可以根据其功能分为不同的类别,主要包括:1.核心函数库:这个库包含了 OpenGL 的基本功能,如绘制基本的几何图元(glBegin)、设置颜色(glColor3f)等。
2.矩阵操作、几何变换和投影变换函数:这个库包含了用于操作矩阵、实现几何变换和投影变换的函数。
例如,矩阵入栈(glPushMatrix)、矩阵出栈(glPopMatrix)、矩阵乘法(glMultMatrix)等。
3.交互式输入设备函数:这个库包含了用于处理交互式输入设备的函数,例如鼠标和键盘。
这些函数可以让用户在程序中进行操作,如点击、拖动、滚动等。
三、OpenGL 扩展库 GLEWGLEW(GL Extension Wrangler Library)是一个 OpenGL 扩展库,用于简化 OpenGL 扩展的加载和使用过程。
GLEW 提供了一系列的函数,用于查询、启用和禁用 OpenGL 扩展。
使用 GLEW,开发者无需关心扩展的加载和启用,只需关注功能的实现。
总之,OpenGL 是一套功能强大的图形编程接口,包含了丰富的函数库,可以实现各种复杂的图形渲染效果。
openGL编程基础第二节
平滑 line width = 2
非平滑 line width = 2
glLineStipple(Glint factor,Glushort pattern)
� 这个函数可用来设定线段的样式。使用这个函数之前,你必须
调用glEnable(GL_LINE_STIPPLE)来启动这个功能。 � 参数pattern是一个 16-bit 的整数,用来定义线段的样式,其中 的 bits由右至左检查,若为 1,则表示要画点,若为 0 的话, 则表示不要画点。参数factor控制样式的放大倍数。 十六进制 样式
� glutWindowSize
6
init.c
清除色(背景色)为黑色 不透明窗口
void init() { glClearColor (0.0, 0.0, 0.0, 1.0); glColor3f(1.0, 1.0, 1.0);
矩形填充以白色
glMatrixMode (GL_PROJECTION); glLoadIdentity (); glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0); }
3
对simple.c进行修改
�在新程序中,会得到同样的输出,但是所有具
有默认值的相应状态值都通过函数调用显式指 定 �特别地,设置了
--颜色 --视图条件 --窗口属性
4
main.c
#include <GL/ glut.h > <GL/glut.h glut.h>
这自动包含了gl.h
int main(int argc , char ** argv ) argc, char* argv) { ); glutInit(&argc,argv glutInit(&argc,argv); ); glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitWindowSize(500,500); glutInitWindowPosition(0,0); 定义窗口属性 "); glutCreateWindow("simple glutCreateWindow("simple"); glutDisplayFunc(mydisplay ); 显示回调函数 glutDisplayFunc(mydisplay); init(); (); glutMainLoop glutMainLoop(); }
第2章 OPENGL编程
(1)点(Point) 用二维坐标(x,y)定义的点在OpenGL中默认z 值为0。顶点坐标也可以用齐次坐标(x,y,z,w)来表 示,如果w不为0.0,这些齐次坐标表示的顶点即 为三维空间点(x/w,y/w,z/w),一般来说,w缺省为 1.0。 可以用glVertex{234}{sifd}[V](TYPE cords) 函数来定义一个顶点。例如: glVertex2f(2.0f,3.0f);//二维坐标定义顶点; OpenGL中定义的点可以有不同的尺寸,其 函数形式为: void glPointSize(GLfloat size); 参数size设置点的宽度(以象素为单位),必 须大于0.0,缺省时为1.0。
(5)在CEx_OpenGLView类的头文件 Ex_OpenGLView.h的开始处添加OpenGL库的 包含文件 #include "gl\gl.h" #include "gl\glu.h" #include "gl\glaux.h" #pragma comment (lib,"Opengl32.lib") #pragma comment (lib,"Glu32.lib") #pragma comment (lib,"Glaux.lib")
在MFC中使用这些图形库的函数时,还必须在源文 件的开头处加入相应的包含文件,以及编译时 加入相应的库或在程序中加入,如下列语句:
#include "gl\gl.h"
#include "gl\glu.h" #include "gl\glaux.h"
#pragma comment (lib,"Opengl32.lib")
OpenGL编程基础(二)
OpenGL编程基础
显示点、直线和多边形: 三、多边形的细节 2. 设置点画多边形的函数: glPolygonStipple() 句法:void glPolygonStipple(const GLubyte *mask); 描述:定义填充多边形的当前点画模式。Mask参数是一 个指向32x32位图的指针,后者被解释为0和1的掩码。如果 模式中出现的是1,则多边形对应的像素就被绘制,如果模
OpenGL编程基础
显示点、直线和多边形: 二、直线的细节 直线的细节包括直线的宽度和不同点画模式的直线。 1. 设置直线的宽度函数: glLineWidth() 句法:void glLineWidth(GL float Width); 描述:设置被渲染直线的粗细,以像素为单位。Width必 须大于0.0,默认值为1.0 。在未使用反走样功能时,直线的
OpenGL编程基础
OpenGL基础函数
OpenGL图元绘制
OpenGL编程基础
显示点、直线和多边形: 一、点的细节 点的基本大小对应屏幕上的1个像素。使用glPointSize()函 数可设置被渲染点的大小。 句法:void glPointSize(GL float size); 描述:设置被渲染点的大小,以像素为单位。Size必须 大于0.0,默认值为1.0 。被渲染的点呈正方形方块。如果 启用了反走样或多重采样,被渲染的点呈圆形。调用函数 glEnable(),并将参数设置为GL_POINT_SMOOTH,启 用反走样。例:point
x[i ] xc r (cos(t ) t sin( t )) y[i ] yc r (sin( t ) t cos(t ))
绘制渐开线,如图所示。
实验一OpenGL图形编程入门
实验⼀OpenGL图形编程⼊门实验⼀ OpenGL图形编程⼊门三、实验内容1、建⽴⼀个⼯程⽂件,并运⾏样本程序my first program.cpp,观看结果。
(6)在⼯程⽂件中输⼊样本程序,单击启动调试按钮,观察运⾏结果。
样本程序:my first program.cpp#includevoid display(void){glClear(GL_COLOR_BUFFER_BIT); //刷新颜⾊缓冲区glFlush(); //⽤于刷新命令队列和缓冲区,使所有尚未被执⾏的OpenGL命令得到执⾏}void main(int argc, char** argv){glutInit(&argc, argv); //初始化GLUT库glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); //设置显⽰模式 glutCreateWindow("hello"); //创建窗⼝,标题为“hello”glutDisplayFunc(display); //⽤于绘制当前窗⼝glutMainLoop(); //表⽰开始运⾏程序,⽤于程序的结尾}运⾏结果:创建⼀个名称是“hello”的窗⼝。
如图1-7所⽰。
2、认真阅读样本程序,理解每个函数的作⽤,并修改窗⼝标题,显⽰为“我的第⼀个OpenGL程序”。
3、窗⼝的设置。
在默认情况下,窗⼝的位置出现在屏幕的左上⾓,默认⼤⼩为300*300。
要求:修改窗⼝⼤⼩为其他尺⼨。
参考函数:glutInitWindowPosition(int x, int y);//为窗⼝指定初始位置,窗⼝左上⾓在屏幕上的位置为(x,y) glutInitWindowSize(int width, int height); //设置窗⼝⼤⼩4、背景⾊的设置。
在默认情况下背景⾊是⿊⾊。
要求:(1)将窗⼝背景设置为⽩⾊(2)将窗⼝背景设置为其他颜⾊参考函数:glClearColor(r,g,b,alpha);//设置背景颜⾊,此函数放在display()中,并且放在glClear(GL_COLOR_BUFFER_BIT);语句的前⾯。
现代 OpenGL 教程 01 - 入门指南说明书
现代OpenGL教程 01——入门指南欢迎大家,这是现代OpenGL教程系列的第一篇。
所有代码都是开源的,你可以在GitHub上下载:https:///tomdalling/opengl-series 通过这篇教程,你将会学到如何在Windows下用Visual Studio 2013或Mac下用Xcode搭建OpenGL 3.2工程。
该应用包含一个顶点着色器(vertex shader),一个片段着色器(fragment shader)和使用VAO和VBO来绘制的三角形。
该工程使用GLEW来访问OpenGL API,用GLFW来处理窗口创建和输入,还有使用GLM进行矩阵/矢量相关的数学运算。
这听上去有点无聊,但搭建这样的工程确实挺麻烦的,尤其对于初学者。
只要解决完这问题,我们就可以开始玩些有趣的东西了。
[TOC]获取代码所有例子代码的zip打包可以从这里获取:https:///tomdalling/opengl-series/archive/master.zip。
这一系列文章中所使用的代码都存放在:https:///tomdalling/opengl-series。
你可以在页面中下载zip,加入你会git的话,也可以复制该仓库。
本文代码你可以在source/01_project_skeleton目录里找到。
使用OS X系统的,可以打开根目录里的opengl-series.xcodeproj,选择本文工程。
使用Windows系统的,可以在Visual Studio 2013里打开opengl-series.sln,选择相应工程。
工程里已包含所有依赖,所以你不需要再安装或者配置额外的东西。
如果有任何编译或运行上的问题,请联系我。
关于兼容性的提醒本文使用OpenGL 3.2,但我会尝试保持如下兼容:向后兼容OpenGL 2.1向前兼容OpenGL 3.X和4.X兼容Android和iOS的OpenGL ES 2.0因为OpenGL和GLSL存在许多不同版本,本文代码不一定能做到100%上述兼容。
opengl编程指南程序
#include "stdafx.h"#include <glut.h>#include <gl/gl.h>void display(){glClearColor(0.0,0.0,0.0,0.0);glClear(GL_COLOR_BUFFER_BIT);glColor4f(1.0,1.0,0.0,1.0); // set the point colorglPointSize(10);glBegin(GL_POLYGON);glVertex2f(0.0,0.0);glVertex2f(0.0,3.0);glVertex2f(4.0,3.0);glVertex2f(6.0,1.5);glVertex2f(4.0,0.0);glEnd();glFlush();}int main(int argc, char** argv){glutInit(&argc, argv);glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);glutInitWindowPosition(100, 100);glutInitWindowSize(400, 400);glutCreateWindow("第一个OpenGL程序");glutDisplayFunc(display);glutMainLoop();return 0;}#include "stdafx.h"#include <glut.h>#include <gl/gl.h>void display(){glClearColor(0.0,0.0,0.0,0.0);glClear(GL_COLOR_BUFFER_BIT);glColor4f(1.0,0.0,0.0,1.0); // set the point colorglPointSize(10);glBegin(GL_POINTS);glVertex3f(-0.5,-0.5,0.0);glVertex3f(0.5,-0.5,0.0);glVertex3f(0.5,0.5,0.0);glVertex3f(-0.5,0.5,0.0);glEnd();glFlush();}int main(int argc, char** argv){glutInit(&argc, argv);glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);glutInitWindowPosition(100, 100);glutInitWindowSize(400, 400);glutCreateWindow("第一个OpenGL程序");glutDisplayFunc(display);glutMainLoop();return 0;}#include"stdafx.h"#include<glut.h>#include<gl/gl.h>void display(){glClearColor(0.0,0.0,0.0,0.0);glClear(GL_COLOR_BUFFER_BIT);glColor4f(1.0,1.0,0.0,1.0);glPointSize(10);glBegin(GL_TRIANGLES);glVertex3f(0.25,0.25,0.0);glVertex3f(0.75,0.25,0.0);glVertex3f(0.75,0.75,0.0);glEnd();glFlush();}int main(int argc, char** argv){glutInit(&argc, argv);glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); glutInitWindowPosition(100, 100);glutInitWindowSize(400, 400);glutCreateWindow("第台?一?个?OpenGL程ì序ò"); glutDisplayFunc(display);glutMainLoop();return 0;}#include<glut.h>#include<gl/gl.h>void display() // 绘?制?函ˉ数簓{glClearColor(0.0,0.0,0.0,0.0);glClear(GL_COLOR_BUFFER_BIT);glColor4f(1.0,1.0,0.0,1.0);glPointSize(10);glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);glBegin(GL_POLYGON);glEdgeFlag(GL_TRUE);glVertex3f (0.25,0.25,0.0);glEdgeFlag(GL_FALSE);glVertex3f(0.75,0.25,0.0);glEdgeFlag(GL_TRUE);glVertex3f(0.75,0.75,0.0);glEnd();glFlush();}int main(int argc, char** argv){glutInit(&argc, argv);glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);glutInitWindowPosition(100, 100);glutInitWindowSize(400, 400);glutCreateWindow("标括?记?多à变?形?边?界?边?");glutDisplayFunc(display);glutMainLoop();return 0;}#include"stdafx.h"#pragma comment( lib, "opengl32.lib" )#pragma comment( lib, "glu32.lib" )#pragma comment( lib, "glut32.lib")#include<stdlib.h>#include<glut.h>void background(void){glClearColor(0.0,0.0,0.0,0.0);//设Θ?置?背?景°颜?色?为a黑ú色?}void myDisplay(void){glClear(GL_COLOR_BUFFER_BIT);//buffer设Θ?置?为a颜?色?可é写′glBegin(GL_TRIANGLES);//开a始?画-三▂角?形?glShadeModel(GL_SMOOTH);//设Θ?置?为a光a滑?明÷暗悝?模£式?glColor3f(1.0,0.0,0.0);//设Θ?置?第台?一?个?顶¥点?为a红ì色?glVertex2f(-1.0,-1.0);//设Θ?置?第台?一?个?顶¥点?的?坐?标括?为a(辍?1.0,?-1.0)?glColor3f(0.0,1.0,0.0);//设Θ?置?第台?二t个?顶¥点?为a绿ì色?glVertex2f(0.0,-1.0);//设Θ?置?第台?二t个?顶¥点?的?坐?标括?为a(辍?.0,?-1.0)?glColor3f(0.0,0.0,1.0);//设Θ?置?第台?三▂个?顶¥点?为a蓝?色?glVertex2f(-0.5,1.0);//设Θ?置?第台?三▂个?顶¥点?的?坐?标括?为a(辍?0.5,?1.0)?glEnd();//三▂角?形?结á束?glFlush();//强?制?OpenGL函ˉ数簓在ú有瓺限T时骸?间?内ú运?行D}void myReshape(GLsizei w,GLsizei h){glViewport(0,0,w,h);//设Θ?置?视酣?口úglMatrixMode(GL_PROJECTION);//指?明÷当獭?前°矩?阵ó为aGL_PROJECTIONglLoadIdentity();//将?当獭?前°矩?阵ó置?换?为a单蹋?位?阵óif(w <= h)gluOrtho2D(-1.0,1.5,-1.5,1.5*(GLfloat)h/(GLfloat)w);//定¨义?二t维?正y视酣?投?影?矩?阵óelsegluOrtho2D(-1.0,1.5*(GLfloat)w/(GLfloat)h,-1.5,1.5);glMatrixMode(GL_MODELVIEW);//指?明÷当獭?前°矩?阵ó为aGL_MODELVIEW }int main(int argc,char ** argv){/*初?始?化ˉ*/glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);glutInitWindowSize(400,400);glutInitWindowPosition(200,200);/*创洹?建¨窗洹?口ú*/glutCreateWindow("Triangle");/*绘?制?与?显?示?*/background();glutReshapeFunc(myReshape);glutDisplayFunc(myDisplay);glutMainLoop();return(0);}#include"stdafx.h"#pragma comment( lib, "opengl32.lib" )#pragma comment( lib, "glu32.lib" )#pragma comment( lib, "glut32.lib")#include<stdlib.h>#include<glut.h>static int shoulder = 0, elbow = 0;////shoulder:肩部角度,elbow:肘部角度void init(void){glClearColor(0.0f, 0.0f, 0.0f, 0.0f);glShadeModel(GL_FLAT);}void display(void){glClear(GL_COLOR_BUFFER_BIT);glPushMatrix();//把当前的变换矩阵压入opengl内部栈中,用以保存当前矩阵//画机器人的上臂glTranslatef(-1.0f, 0.0f, 0.0f);//用平移矩阵乘当前矩阵,格式为glTranslatef(x,y,z) glRotatef((GLfloat) shoulder, 0.0f, 0.0f, 1.0f);//用旋转矩阵乘当前矩阵,格式为glRotatef(角度,x轴,y轴,z轴),这里是绕z轴旋转glTranslatef(1.0f, 0.0f, 0.0f);//再用平移矩阵乘当前矩阵,注意顺序glPushMatrix();//变换矩阵压栈glScalef(2.0f, 0.4f, 1.0f);//用缩放矩阵乘以当前矩阵,格式为glRotatef(缩放比例,y缩放比例,z缩放比例)glutWireCube(1.0f);//glut库函数,画一个三维Cube,参数为边长glPopMatrix();//弹栈,现在矩阵恢复到使用缩放前的样子//画机器人的前臂,请注意平移矩阵和旋转矩阵的变化glTranslatef(1.0f, 0.0f, 0.0f);glRotatef((GLfloat) elbow, 0.0f, 0.0f, 1.0f);glTranslatef(1.0f, 0.0f, 0.0f);glPushMatrix();glScalef(2.0f, 0.4f, 1.0f);glutWireCube(1.0f);glPopMatrix();glPopMatrix();glFlush();}void reshape (int width, int height){glViewport(0, 0, width, height);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluPerspective(65.0f, (GLfloat)width/(GLfloat)height, 1.0f, 20.0f);//建立一个透视投影视图体,格式为:gluPerspective(视域的角度,宽高比,视点到近裁剪面的距离(总为正)) glMatrixMode(GL_MODELVIEW);glLoadIdentity();glTranslatef(0.0f, 0.0f, -5.0f);//用平移矩阵乘当前矩阵,注意,这会将所有绘制过程中绘制的物体平移}void keyboard(unsigned char key, int x, int y){switch (key){case'a'://处理四个按键,改变旋转角度,转动手臂shoulder = (shoulder + 5) % 360;glutPostRedisplay();//重画break;case'd':shoulder = (shoulder - 5) % 360;glutPostRedisplay();break;case'q':elbow = (elbow + 5) % 360;glutPostRedisplay();break;case'e':elbow = (elbow - 5) % 360;glutPostRedisplay();break;case'x':exit(0);break;default:break;}}int main(int argc, char** argv){glutInit(&argc, argv);glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);glutInitWindowSize(500, 500);glutInitWindowPosition(100, 100);glutCreateWindow("Transform");init();glutDisplayFunc(display);glutReshapeFunc(reshape);glutKeyboardFunc(keyboard);glutMainLoop();return 0;}#include"stdafx.h"#pragma comment( lib, "opengl32.lib" )#pragma comment( lib, "glu32.lib" )#pragma comment( lib, "glut32.lib")#include<stdlib.h>#include<glut.h>static int year = 0,day = 0;void init(void){glClearColor(0.0, 0.0, 0.0, 0.0);glShadeModel(GL_FLAT);}void display(void){glClear(GL_COLOR_BUFFER_BIT);glColor3f(1.0,1.0,1.0);glPushMatrix();glutWireSphere(1.0,20,16);glRotatef((GLfloat) year, 0.0, 1.0, 0.0); glTranslatef(2.0, 0.0, 0.0);glRotatef((GLfloat) day, 0.0, 1.0, 0.0);glutWireSphere(0.2,10,8);glPopMatrix();glutS();}void reshape (int w, int h){glViewport(0, 0, (GLsizei)w, (GLsizei) h);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluPerspective(65.0f, (GLfloat)w/(GLfloat)h, 1.0, 20.0); glMatrixMode(GL_MODELVIEW);glLoadIdentity();gluLookAt(0.0,0.0,5.0,0.0,0.0,0.0,0.0,1.0,20.0);}void keyboard(unsigned char key, int x, int y){switch (key){case'd':day=(day+10)%360;glutPostRedisplay();break;case'D':day=(day-10)%360;glutPostRedisplay();break;case'y':year=(year+5)%360;glutPostRedisplay();break;case'Y':year=(year-5)%360;glutPostRedisplay();break;default:break;}}int main(int argc, char** argv){glutInit(&argc, argv);glutInitDisplayMode(GLUT_DOUBLE| GLUT_RGB);glutInitWindowSize(500, 500);glutInitWindowPosition(100, 100);glutCreateWindow(argv[0]);init();glutDisplayFunc(display);glutReshapeFunc(reshape);glutKeyboardFunc(keyboard);glutMainLoop();return 0;}#include"stdafx.h"#pragma comment( lib, "opengl32.lib" ) #pragma comment( lib, "glu32.lib" )#pragma comment( lib, "glut32.lib")#include<stdlib.h>#include<glut.h>void init(void){glClearColor(0.0, 0.0, 0.0, 0.0); glShadeModel(GL_FLAT);}void display(void){GLdouble eqn[4]={0.0,1.0,0.0,0.0};GLdouble eqn2[4]={1.0,1.0,0.0,0.0}; glClear(GL_COLOR_BUFFER_BIT);glColor3f(1.0,1.0,1.0);glPushMatrix();glTranslatef(0.0,0.0,-5.0);glClipPlane(GL_CLIP_PLANE0,eqn);glEnable(GL_CLIP_PLANE0);glClipPlane(GL_CLIP_PLANE1,eqn2);glEnable(GL_CLIP_PLANE1);glRotatef(90.0,1.0,0.0,0.0);glutWireSphere(1.0,20,16);glPopMatrix();glFlush();}void reshape (int w, int h){glViewport(0, 0, (GLsizei)w, (GLsizei) h);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluPerspective(60.0, (GLfloat)w/(GLfloat)h, 1.0, 20.0); glMatrixMode(GL_MODELVIEW);}int main(int argc, char** argv){glutInit(&argc, argv);glutInitDisplayMode(GLUT_SINGLE| GLUT_RGB);glutInitWindowSize(500, 500);glutInitWindowPosition(100, 100);glutCreateWindow(argv[0]);init();glutDisplayFunc(display);glutReshapeFunc(reshape);glutMainLoop();return 0;}Opengl相关库函数:GLU:设置视点矩阵和投影矩阵、执行多边形网格化以及渲染曲面等任务。
计算机图形学OpenGL编程初步1.2 第二章 OpenGL入门
OpenGL编程初步OpenGL介绍●由SGI公司的GL发展而来的一个工业标准图形库。
●OpenGL由图形库GL(Graphics Library)和应用图形库GLU(Graphics Library Utilities)两个库组成。
●OpenGL是与平台无关的标准图形库,可在多种平台上运行。
确切地说是与窗口系统无关。
●OpenGL可在网络上运行,显示图形的计算机可以不是运行图形程序的计算机。
●但OpenGL没有事件处理(如鼠标,键盘输入等)和窗口管理(如大小,位置等)的功能。
●另一个辅助库GLUT提供了与平台无关的事件处理和窗口管理功能。
●实现事件处理和窗口管理等功能的另一个方法是使用OpenGL在特定窗口系统的扩展,如OpenGL的X扩展GLX,在Windows的扩展WGL。
OpenGL的发展●1992年7月,OpenGL 1.0;●1995年12月,OpenGL 1.1;●1998年3月,OpenGL 1.2;●1998年10月,OpenGL 1.2.1;●2001年8月,OpenGL 1.3;●2002年7月,OpenGL 1.4.●OpenGL由独立组织ARB(OpenGL ArchitectureReview Board)管理。
成立于1992年。
主要成员有IBM,SGI,Intel, Microsoft,Compaq等。
●另一独立组织OPC(OpenGL PerformanceCharacterization Committee)负责管理和发布OpenGL的性能测试基准(benchmark)。
OpenGL与Windows平台●Microsoft和SGI共同开发了OpenGL的WIN32版本,称为WGL。
最先OpenGL集成在Windows NT中,后来集成到了Windows95(OSR2)中。
Windows98已将OpenGL作为标准组成部分。
●运行OpenGL程序,需要在windows\system目录下有动态连接库opengl32.dll,glu32.dll,使用GLUT的用戶需要有glut32.dll。
OpenGL图形编程2基本图形绘制(陈永强)只是分享
这个函数采用一个参数来指定画点时以象素为单位的近似 直径。
7
2.2点的绘制
点的属性(大小)
通常使用下面的代码来获取点大小的范围和它们之间最小的中间值:
GLfloat sizes[2]; //保存绘制点的尺寸范围
GLfloat step;
将指定的各个顶点用于创建单个的点
GL_LINES GL_LINE_STRIP GL_LINE_LOOP
GL_TRIANGLES
将指定的顶点用于创建线段。每两个顶点指定一条单独的线 段。如果顶点个数是奇数,则忽略后一个
将指定的顶点用于创建线条。第一个顶点之后的每个顶点指 定的是线条延伸到的下一个点
特性和GL_LINE_STRIP 相似,只不过最后一条线段是在 指定的后一个和第一个顶点之间绘制。典型情况下,这用于 绘制那些可能违反了 GL_POLYGON 用法规则的封闭区域
glBegin(GL_LINE_STRIP); glVertex3f(0.0f,0.0f,0.0f); glVertex3f(10.0f,10.0f,0.0f); glVertex3f(20.0f,5.0f,0.0f);
glEnd();
在xy平面内绘制了两条直线(0,0,0)到(10,0,0)和(0,10,0)到(20,5,0)。
OpenGL图形编程2基本图形绘 制(陈永强)
2.1glBegin/glEnd
OpenGL的图元绘制放在函数glBegin和 glEnd之间,由函数glBegin的参数指定绘制 图元的类型。
2.1glBegin/glEnd
模式
GL_POINTS
表 glBegin可支持的OpenGL图元
OpenGL4.0 API参考手册
void PrimitiveRestartIndex(uint index);
void DrawArrays(enum mode, int first, sizei count); void DrawArraysInstanced(enum mode, type: SHORT, INT, FLOAT, HALF_FLOAT, DOUBLE, int first, sizei count, sizei primcount}; INT_2_10_10_10_REV, void DrawArraysIndirect(enum mode, UNSIGNED_INT_2_10_10_10_REV const void *indirect); void NormalPointer(enum type, sizei stride, void *pointer); void MultiDrawArrays(enum mode, type: see VertexPointer, plus BYTE int *first, sizei *count, sizei primcount); void ColorPointer(int size, enum type, void DrawElements(enum mode, sizei stride, void *pointer); sizei count, enum type, void *indices); type: see VertexPointer, plus BYTE, UBYTE, USHORT, UINT void DrawElementsInstanced(enum mode, void SecondaryColorPointer(int size, sizei count, enum type, const void *indices, enum type, sizei stride, void *pointer); sizei primcount); type: see ColorPointer void MultiDrawElements(enum mode, void IndexPointer(enum type, sizei stride, sizei *count, enum type, void **indices, void *pointer); sizei primcount); type: UBYTE, SHORT, INT, FLOAT, DOUBLE void DrawRangeElements(enum mode, void EdgeFlagPointer(sizei stride, uint start, uint end, sizei count, void *pointer); enum type, void *indices); void FogCoordPointer(enum type, void DrawElementsBaseVertex(enum mode, sizei stride, void *pointer); sizei count, enum type, void *indices, type: FLOAT, HALF_FLOAT, DOUBLE int basevertex); void TexCoordPointer(int size, enum type, void DrawRangeElementsBaseVertex( sizei stride, void *pointer); enum mode, uint start, uint end, type: see VertexPointer sizei count, enum type, void *indices, void VertexAttribPointer(uint index, int size, int basevertex); enum type, boolean normalized, void DrawElementsInstancedBaseVertex( sizei stride, const void *pointer); type: see ColorPointer enum mode, sizei count, enum type, const void *indices, sizei primcount, void VertexAttribIPointer(uint index, int basevertex); int size, enum type, sizei stride, const void *pointer); void DrawElementsIndirect(enum mode, type: BYTE, UBYTE, SHORT, USHORT, INT, UINT enum type, const void *indirect); index: [0, MAX_VERTEX_ATTRIBS - 1] void MultiDrawElementsBaseVertex( void EnableClientState(enum array); enum mode, sizei *count, enum type, void **indices, sizei primcount, void DisableClientState(enum array); int *basevertex); array: VERTEX_ARRAY, NORMAL_ARRAY, void VertexPointer(int size, enum type, sizei stride, void *pointer);
OpenGL编程教程
19
(5) Windows专用库 Windows专用库
包含有16个函数, 包含有16个函数,函数名的前缀为 wgl 个函数 主要用于连接OpenGL和Windows, OpenGL 主要用于连接OpenGL和Windows,以弥补 OpenGL在文本方面的不足 OpenGL在文本方面的不足。 在文本方面的不足。 Windows专用库只用于 Windows专用库只用于Windows环境中。 专用库只用于Windows环境中 环境中。
OpenGL编程 Ls 4
动物骨骼的可视化重建
OpenGL编程 Ls
5
三维中国地形图
OpenGL编程 Ls
6
立体云图
OpenGL编程 Ls
7
虚拟地形漫游
OpenGL编程 Ls 8
1.1 OpenGL API
30
OpenGL编程 Ls
基于图形变换的雷达探测器场景简单漫游
31
1.5 OpenGL基本操作和功能 OpenGL基本操作和功能
(3) 颜色模式设置 OpenGL提供两种物体着色模式: OpenGL提供两种物体着色模式: 提供两种物体着色模式 RGBA颜色模式 RGBA颜色模式 颜色索引模式(Color 颜色索引模式(Color Index)
OpenGL编程 Ls
22
OpenGL函数的多种形式 OpenGL函数的多种形式 glVertex{234}{sifd}(TYPE coords, …) glVertex{234}{sifd}v(TYPE *coords) GLint i, j; GLfloat x, y, z, point[3]; … glVertex2i(i, j); glVertex2f(x, y); glVertex3f(x, y, z); glVertex3fv(point); 详见 gl.h中定义 gl.h中定义
OpenGL三维图形编程基础
rgba模式颜色索引模式colorindexrgba模式为每个像素点指定颜色可提供丰富多彩的色彩效果其中a是混合因子用于各种特效处理对于显示能力不足的硬件可采用颜色索引模式系统提供一个颜色表通常有256或4096种颜色各像素点通过索引颜色表项得到颜色值opengl基本功能711光照和材质在现实生活中物体因为受光照射和自身对各种频率光波的吸收与反射能力的不同而呈现各自不同的颜色opengl的实现假设光仅仅由三原色rgb组成物体对三原色分别有不同的反射率即材质利用物理光学模型计算物体实际的颜色opengl基本功能811纹理映射texturemapping由于物体采用图元primitive表示点线多边形绘制时有效渲染的地方也仅仅是这些点线多边形其它位置的颜色值则通过插值实现这就造成了物体绘制的不真实纹理映射通过贴图的方式为物体表面贴上真实的色彩花纹这些被指定贴上的图片就称作纹理textureopengl提供了完善的纹理映射机制opengl基本功能911反走样antialiasing线段在计算机中是通过一系列的像素来近似逼近的而这些像素实际上是一个个的小正方形因此线段常常呈锯齿状这被称为走样aliasingopengl通过计算线段对各个像素的不同覆盖率来实现反走样antialiasingopengl基本功能1011图像特效融合blending为了使三维图形更加具有真实感经常需要处理半透明或透明的物体图像这就需要用到融合技雾fog正如自然界中存在烟雾一样opengl提供了fog的基本操作来达到对场景进行雾化的效果opengl基本功能1111双缓存doublebuffering动画出色的动画效果是opengl的一大特色opengl通过双缓存实现动画前台缓存显示当前帧后台缓存同时进行后续帧的场景计算生成画面opengl语法特点15所有opengl函数都使用gl作为前缀如glclearcolor所有opengl常量都使用gl开头并且所有字母都大写如glfalseopengl语法特点25opengl函数后缀说明后缀中的阿拉伯数字一般表示参数的数目如glvertex2i13表示该函数有两个参数阿拉伯数字后的小写字符一个或多个表示参数类型如glvertex2i13表示该函数的两个参数都为32位整数integer表示参数类型的后缀定义见下表opengl语法特点35opengl函数后缀说明opengl语法特点45opengl函数后缀说明有
openGLframebufferobject编程指南
openGL frame buffer object(FBO)fbo 扩展在openGL 3.0以后成为openGL核心特性,后缀EXT不再出现在扩展名中。
概览在openGL 渲染管线中,几何数据和纹理经过一系列测试最后以2d像素图渲染到屏幕上。
最后的渲染目的地叫做帧缓冲区。
帧缓冲区由一些openGL操作的2d数组和存储空间组成,如颜色缓冲区、深度缓冲区、模版缓冲区和累积缓冲区。
默认情况下,openGL用帧缓冲区作为最终渲染目的地,帧缓冲区完全由窗口系统创建了管理。
这个默认的帧缓冲区叫做“窗口系统提供的”缓冲区。
openGL扩展——GL_ARB_framebuffer_object提供了创建额外的不可显示的帧缓冲对象(fbo)。
这种帧缓冲对象叫做“应用程序创建的”帧缓冲区,以区别于“窗口系统创建”缓冲区。
通过使用帧缓冲对象,openGL应用程序可以重定向渲染输出到“应用程序创建的”缓冲区对象,“应用程序创建的”缓冲区完全由openGL控制。
类似“窗口系统创建的”缓冲区,fbo包含若干渲染目的地:颜色、深度、模版缓冲区(没有累积缓冲区)。
里面这些逻辑缓冲区叫做“可连接到帧缓冲对象的”图像,是一些2d数组或像素图。
有两种framebuffer-attachable图像:纹理图和渲染缓冲区图(renderbuffer image)。
若纹理对象被连接到帧缓冲对象,那么openGL执行“渲染到纹理”操作。
若renderbuffer对象连接到帧缓冲对象,那么openGL执行“离屏渲染”。
上图描述了帧缓冲对象、纹理对象、渲染缓冲对象之间的关系。
帧缓冲对象中可以连接多个纹理对象和渲染缓冲对象到连接点上。
图中显示有多个颜色连接点,一个深度连接点,一个模版连接点。
颜色连接点数量由具体实现决定,但一个fbo中至少要有一个。
通过GL_MAX_COLOR_ATTACHMENTS参数查阅当前显卡支持的最大值。
fbo中有多个颜色连接点是为了可以同时有多个渲染目的地。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
OpenGL编程参考手册》(pdf)电子书下载笃志说明:《OpenGL编程参考手册》中文pdf版计算机电子书下载,本书不适合OpenGL新手入门,而适合一些已有比较深厚OpenGL基础的人士开发时使用.它更类似一个词典,将所有的OpenGL 记录,分类,仅此而已.前言OpenGL是一个图形硬件的软件接口(“GL”即Graphics Library)。
这一接口包含了数百个函数,图形程序员可以利用这些函数指定设计高品质的三维彩色图像所需的对象和操作。
这些函数中有许多实际上是其他函数的简单变形,因此,实际上它仅包含大约180个左右完全不同的函数。
OpenGL 实用库(OpenGL Utility Library,GLU)和对X窗口系统的OpenGL扩展(OpenGL Extension to the X Window System,GLX)为OpenGL提供了有用的支持特性和完整的OpenGL核心函数集。
本书详细介绍了这些函数的功能。
书中各章内容如下:第1章 OpenGL简介在概念上对OpenGL作了概述。
它通过一个高层的模块图来阐述OpenGL所执行的所有主要处理阶段。
第2章命令和例程概述较详细地阐述了OpenGL对输入数据的处理过程(用点形式来指定一个几何体或用像素形式来定义一幅图像时),并告诉你如何用OpenGL函数来控制这个过程。
此外,在本章中还对GLU和GLX函数作了讨论。
第3章命令和例程一览根据OpenGL命令所完成的功能列举说明了这些命令组。
一旦了解了这些命令的功能,你就可以利用这些完整的函数原型作为快速参考。
第4章定义的常量及相关命令列举了在OpenGL中定义的常量和使用这些常量的命令。
第5章 OpenGL参考说明本书的主体部分,它包括各组相关的OpenGL命令的描述。
带参数的命令和与之一起描述的其他命令仅在数据类型方面有所不同。
每个函数的参考说明介绍了参数、命令的作用和使用这些命令时可能发生的错误。
此外,本章还包含了有关OpenGL的 ARB扩展—多重纹理和绘图子集的参考说明。
需要说明的是并非所有的OpenGL的环境都支持ARB扩展。
?第6章 GLU参考说明本章包含了所有的GLU命令的参考说明。
?第7章 GLX参考说明本章包含了所有的GLX命令的参考说明。
0.1 阅读此书前的预备知识本书是OpenGL Architecture Review Board, Mason Woo、 Jackie Neider、Tom Davis 和Dave Shreinre编著的《OpenGL编程指南(第3版)》(Rea**, MA: Addison-Wesley,1999)的姊妹篇。
阅读这两本书的前提是你已经懂得如何用C语言编程。
两本书的不同之处主要在于:《OpenGL编程指南》一书着重于介绍如何运用OpenGL,而本书的重点则是OpenGL的工作方式。
当然要想彻底地了解OpenGL,这两方面的知识都是必需的。
这两本书的另一个不同点是本书的大多数内容都是按字母次序编排的,这样编排的前提是假定你已经知道你所不明白的地方而仅仅想查找某个特定命令的用法。
而《OpenGL 编程指南》一书的编排则更像一本指南:它首先解释了OpenGL的简单概念,然后再导出更复杂的概念。
虽然你不必通过阅读《OpenGL编程指南》一书来理解本书对命令的解释,但如果你已经读过它,你将会对这些命令有更深刻的理解。
如果你对计算机图形学还不太了解,那么请先从《OpenGL编程指南》一书入手学习,并同时参考下面这些书:?James D. Foley、 Andries van Dam、Steven K. Feiner和John F. Hughes著,《计算机图形学:原理及应用》(Computer Graphics rinciples and Practice)。
(Rea**,MA:Addision-Wesley)。
该书是一本计算机图形学的百科全书,它包含了丰富的信息量,但最好在你对这门学科有一定的实践经验之后再读它。
ナAndrew S. Glassner 著,《3D计算机图形学:艺术家与设计师的用户指南》(3D Computer Graphics: A User誷 Guide for Artists and Designers)。
(New York:Design Press)。
这是一本非技术性的、综合介绍计算机图形学的书,它着重于所能获得的视觉效果而非如何获取这些效果的具体技巧。
ナOlin Lathrop著,《计算机图形学的工作原理》(The Way Computer Graphics Work)。
(New York:John Wiley and Sons,Inc.)。
这本书概括性地介绍了计算机图形学,主要面向初级和中级计算机用户。
它介绍了理解计算机图形学所必需的一般概念。
0.2 字体约定本书使用如下的字体约定:黑体字(Bold)—命令和例行程序名;斜体字(Italics)—变量名、自变量名、参数名、空间维数和文件名;正体字(Regular)—枚举类型和定义的常量;等宽字体(Monospace font)—示例代码。
值得注意的是本书所使用的命令名称都是缩写形式。
许多OpenGL命令只是其他命令的变种。
简言之,这里只使用函数的基本名称。
如果此命令上加有星号(*),则说明它所代表的实际的命令名称可能比显示的命令名称要多。
如,glVertex*代表所有指定点的命令变种所构成的命令。
多数命令的区别仅在于它们所带的自变量的数据类型。
有些命令则在相关自变量的数目、这些自变量是否被指定为向量以及是否需在列表中单独指定等方面存在着区别。
例如,你使用glVertex2f命令时必须以浮点数形式提供x和y的坐标;而使用glVertex3sv 命令时你需为x,y,z提供一个包含三个短整型值的数组。
0.3 致谢本手册的初版是许多人共同努力的结果。
Silicon Graphics的Kurt Akeley,SABL Productions的Sally Browning以及Silicon Graphics的Kevin P. Smith为第1版提供了大量的资料,另外还有Jackie Neider和Mark Segal(他们均来自Silicon Graphics)。
Mark和Kurt合著《The OpenGL Graphics System:A Specification》,Kevin著《OpenGL Graphics System Utility Library》,Phil Karlton 著《OpenGL Graphics with the X Window System》为本书作者提供了文献来源。
Phil Karlton和Kipp Hickman帮助在Silicon Graphics定义并创建了OpenGL,此外还有Gain Technology, Inc.的Raymond Drewry、Digital Equipment Corp.的Fred Fisher、Kubota Pacific Computer, Inc.的Randi Rost 等人也为本书的编写提供了帮助。
OpenGL 结构评审委员会的成员Murray Cantor以及International Business Machines的Linas Vepstas、Digital Equipment Corporation 的Paula Womack和Jeff Lane、Intel的Murali Sundaresan,还有Microsoft的Chuck Whitmer 也提供了很多帮助。
Thad Beier同Seth Katz以及Silicon Graphics的Inventor小组一起制作了封面图形。
Silicon Graphics的Kay Maitz、Evans Technical Communications 的Arthur Evans以及Susan Blau提供了产品援助,Tanya Kucak对本手册进行了编辑。
当然,如果没有OpenGL,也就不会有本书的存在,所以要感谢Silicon Graphics的OpenGL 小组所有成员,感谢他们的辛勤工作。
他们是:Momi Akeley、Allen Akin、Chris Frazier、Bill Glazier、Paul Ho、Simon Hui、Lesley Kalmin、Pierre Tardif、Jim Winget,尤其是Wei Yen。
另外,还有上面提到的Kurt、Phil、Mark、Kipp以及Kevin。
当然还有许多其他的Slicon Graphics成员也为改进OpenGL的定义和功能做出了很多贡献,在这里也一并感谢他们。
Kempf的Renate Kempf及其同事、Silicon Graphics的Chris Frazier为《OpenGL Reference Manual for OpenGL, Version1.1》添加了所有OpenGL1.1 Specification中的新功能,并编辑审查了其他所有参考说明书。
下列人员对该书进行了仔细的复审,他们是Allen Akin、David Blythe、Craig Dunwoody、Chris Frazier以及Slicon Graphics的Paula Womack、OpenGL 结构评审委员会中的成员,包括Silicon Graphics的Kurt Akeley、HP的Dave Arns、E&S的Bill Armstrong、Intergraph的Dale Kirkland和IBM的Bimal Poddar。
Silicon Graphics的Simon Hui复审了GLX参考说明,John Spitzer复审了已校对的图形插页。
在本书中,SGI的Dave Shreiner添加了OpenGL 1.2和GLX 1.3的大部分新的功能,并在David Yu的帮助下重新修订了图面。
Norman Chin重新修订了GLU 1.3的参考说明。
下列人员认真地进行了手册复审这一艰巨的工作,他们是:Ron Bielaski、Steve Cunningham、Jeffery Galinovsky、Eric Haines、Mark Kilgard、Dale Kirkland、Seth Livingston、Bimal Poddar、David Nishimoto、Mike Schmitt、Scott Thompson、David Yu以及SGI的OpenGL小组的成员Craig Dunwoody、Jaya Kanajan、George Kyraizis、Jon Leech和Ken Nicholson。