opengl中glVertex3f的基本问题

majie980 2012-09-25 10:58:24

glBegin(GL_QUADS);
glTexCoord2f(0.0, 0.0); glVertex3f(-2.0, -1.0, 0.0);
glTexCoord2f(0.0, 1.0); glVertex3f(-2.0, 1.0, 0.0);
glTexCoord2f(1.0, 1.0); glVertex3f(0.0, 1.0, 0.0);
glTexCoord2f(1.0, 0.0); glVertex3f(0.0, -1.0, 0.0);

glTexCoord2f(0.0, 0.0); glVertex3f(1.0, -1.0, 0.0);//左下
glTexCoord2f(0.0, 1.0); glVertex3f(1.0, 1.0, 0.0);//左上
glTexCoord2f(1.0, 1.0); glVertex3f(2.41421, 1.0, -1.41421);//右上
glTexCoord2f(1.0, 0.0); glVertex3f(2.41421, -1.0, -1.41421);//右下

glEnd();

如上段代码所示,本段代码的目的是想将一个平面图贴到空间中,想请问下glVertex3f()函数中,坐标值的具体含义是多什么,比如在函数glTexCoord2f() 中,坐标值都是归一化到(0~1中),而glVertex3f()中的坐标值代表的是什么呢,另外还有glTranslatef(0.0, 0.0, -3.6);-3.6到底是什么意义呢。
...全文
4829 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
basuye1 2012-09-25
  • 打赏
  • 举报
回复
本人也是初学,说一下自己的看法吧。OpenGl中有一个三维投影区的说法,你可以看一下glOrtho函数。其实就是将三维坐标系映射到屏幕的二维坐标系。默认的三维坐标系是以你的窗口中心为原点,水平向右x轴正方向,竖直向上y轴正方向,从屏幕垂直向外是z轴正方向。-3.6就是z坐标
wuchuncai 2012-09-25
  • 打赏
  • 举报
回复
-3.6 可以理解为一个相对值。
与屏幕大小相对应的是投射变换。
libralibra 2012-09-25
  • 打赏
  • 举报
回复
glTexCoord2f(s,t)设置当前纹理坐标为(s,t,0,1),
glVertex3f(x,y,z)指定一个顶点
majie980 2012-09-25
  • 打赏
  • 举报
回复
我想知道的是-3.6的具体含义是什么,是像素?距离?
opengl 期末复习资料 第一、二章: 1、 OpenGL能渲染的基本元素是什么?GLU 可以渲染哪些基本元素? 第三章 2、 用框图说明OpenGL的渲染流程,并简要说明每个坐标系。 第四、五章 3、 写出OpenGL局部光照的方程,要包含的系数有光源参数、材料参数、聚光灯的参数、衰减参数等,方程要表示是多个光源的。 4、 分析程序并计算 请看下面的一段程序,并计算三个顶点○1、○2和○3处的光照的颜色值。 void init(void) { GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 }; GLfloat mat_shininess[] = { 50.0 }; GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 }; glClearColor (0.0, 0.0, 0.0, 0.0); glShadeModel (GL_SMOOTH); //glLightModelf(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_FALSE); //glLightModelf(GL_LIGHT_MODEL_TWO_SIDE, GL_FALSE); glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess); glLightfv(GL_LIGHT0, GL_POSITION, light_position); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_DEPTH_TEST); } void display(void) { glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glBegin(GL_TRIANGLES); glNormal3f(..); ○1glVertex3f(1.0, 0.0, 0.0); ○2glVertex3f(0.0, 1.0, 0.0); ○3glVertex3f(0.0, 0.0, 1.0); glEnd(); glFlush (); } void reshape (int w, int h) { glViewport (0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode (GL_PROJECTION); glLoadIdentity(); if (w <= h) glOrtho (-1.5, 1.5, -1.5*(GLfloat)h/(GLfloat)w, 1.5*(GLfloat)h/(GLfloat)w, -10.0, 10.0); else glOrtho (-1.5*(GLfloat)w/(GLfloat)h, 1.5*(GLfloat)w/(GLfloat)h, -1.5, 1.5, -10.0, 10.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } void keyboard(unsigned char key, int x, int y) { switch (key) { case 27: exit(0); break; } } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize (500, 500); glutInitWindowPosition (100, 100); glutCreateWindow (argv[0]); init (); glutDisplayFunc(display); glutReshapeFunc(reshape); glutKeyboardFunc(keyboard); glutMainLoop(); return 0; } 第9章 在OpenGL,使用纹理的步骤是什么?纹理坐标和纹理都可以通过程序计算出来,自动生成纹理的原理是什么? 第10章 帧缓存有几种,什么叫片元,片元的测试和操作有哪些? 明白stencilbuffer的使用。 用stencilbuffer编程实现一个功能。 5、 采用GPU编程,请说明Vertex Shader 和 Fragment Shader 的输入输出坐标系是什么? 输入输出的主要参数是什么? 如何实现Multi-Pass 渲染? 6、 在一个坐标系W,光源的位置为 (0, 0, 200, 1.0),设模型为一个以(1.0, 0.0, 0.0), (0.0, 1.0, 0.0), (0.0, 0.0, 1.0)为三个点的三角形,另一个模型是以(0, 0, 10)为心,长度为2的一个正方体,如何实现该正方体在三角形平面上的阴影?如何使用OpenGL函数来实现?要求在照相机改变时,该程序应该仍然有效。 7、 如何实现纹理的反走样?说明其原理。 8、 写出场景的反走样算法,并说明其原理。 9、 如何实现采用立方体映射实现的环境映射,写出立方体映射的生成算法和把其作为环境映射时显示的程序。 10、 请列举出3种以上的三维模型常见的表示格式,已知一个立方体环境映射对应的六个面上的图片,分别假定为X_POSITVIE_PIC, X_NEGATIVE_PIC, Y_POSITIVE_PIC, Y_NEGATIVE_PIC, Z_POSITIVE_PIC, Z_NEGATIVE_PIC,请用OBJ格式表示一个长度为1的立方体,并把每个面分别贴上给定的六个图片。 11、 分析下面的程序并计算 在下面的例子,计算对应○1○2○3○4四个顶点所对应的四边形上的一个点(-1.0, 0.5, 0.0)对应的纹理坐标是多少?按照最近邻域滤波方法,该点对应的颜色是什么? /* Create checkerboard texture */ #define checkImageWidth 64 #define checkImageHeight 64 static GLubyte checkImage[checkImageHeight][checkImageWidth][4]; #ifdef GL_VERSION_1_1 static GLuint texName; #endif void makeCheckImage(void) { int i, j, c; for (i = 0; i < checkImageHeight; i++) { for (j = 0; j < checkImageWidth; j++) { c = ((((i&0x8)==0)^((j&0x8))==0))*255; checkImage[i][j][0] = (GLubyte) c; checkImage[i][j][1] = (GLubyte) c; checkImage[i][j][2] = (GLubyte) c; checkImage[i][j][3] = (GLubyte) 255; } } } void init(void) { glClearColor (0.0, 0.0, 0.0, 0.0); glShadeModel(GL_FLAT); glEnable(GL_DEPTH_TEST); makeCheckImage(); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); #ifdef GL_VERSION_1_1 glGenTextures(1, &texName); glBindTexture(GL_TEXTURE_2D, texName); #endif glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); #ifdef GL_VERSION_1_1 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, checkImageWidth, checkImageHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, checkImage); #else glTexImage2D(GL_TEXTURE_2D, 0, 4, checkImageWidth, checkImageHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, checkImage); #endif } void display(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glEnable(GL_TEXTURE_2D); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); #ifdef GL_VERSION_1_1 glBindTexture(GL_TEXTURE_2D, texName); #endif glBegin(GL_QUADS); ○1glTexCoord2f(0.0, 0.0); glVertex3f(-2.0, -1.0, 0.0); ○2glTexCoord2f(0.0, 1.0); glVertex3f(-2.0, 1.0, 0.0); ○3glTexCoord2f(1.0, 1.0); glVertex3f(0.0, 1.0, 0.0); ○4glTexCoord2f(1.0, 0.0); glVertex3f(0.0, -1.0, 0.0); glTexCoord2f(0.0, 0.0); glVertex3f(1.0, -1.0, 0.0); glTexCoord2f(0.0, 1.0); glVertex3f(1.0, 1.0, 0.0); glTexCoord2f(1.0, 1.0); glVertex3f(2.41421, 1.0, -1.41421); glTexCoord2f(1.0, 0.0); glVertex3f(2.41421, -1.0, -1.41421); glEnd(); glFlush(); glDisable(GL_TEXTURE_2D); } 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, 30.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(0.0, 0.0, -3.6); } void keyboard (unsigned char key, int x, int y) { switch (key) { case 27: exit(0); break; default: break; } } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize(250, 250); glutInitWindowPosition(100, 100); glutCreateWindow(argv[0]); init(); glutDisplayFunc(display); glutReshapeFunc(reshape); glutKeyboardFunc(keyboard); glutMainLoop(); return 0; } Deferred shading 原理
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版)》(Reading, 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:Principles and Practice)。(Reading, 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提供一个包含三个短整型值的数组。
贵州大学实验报告 学院:计算计科学与信息学院 专业: 班级: "姓名 " "学号 " "实验组 " " "实验时间 " "指导教师 " "成绩 " " "实验项目名称 "基本图元生成 " "实 "1、掌握opengl头文件的使用和语法规则 " "验 "2、opengl程序的基本结构和程序运行环境配置 " "目 "3、掌握使用opengl函数绘制基本图元,如点、线、封闭的多边形等。" "的 " " "实 " 学会如何在vc++6.0配置opengl的运行环境 " "验 " " "要 " " "求 " " "实 "在visual c++编程环境编写程序源代码,并编译、运行程序结果 " "验 " " "原 " " "理 " " "实 "奔腾2计算机或以上机型、visual c++编程环境 " "验 " " "仪 " " "器 " " "实 "1.OpenGL环境设置 " "验 "将OpenGL所需函数库和头文件复制到指定目录. " "内 "将压缩包内的glut.h放到...\Microsoft Visual " "容 "Studio\VC98\Include\GL目录下 " " "将glut32.lib放到...\Microsoft Visual Studio\VC98\Lib目录下 " " "将glut32.dll放到X:\windows\systom32目录下(win98用户放到X:\wi" " "ndows\systom目录下 " " "2.通过vc++编译运行画出点、直线、几何图形等。 " " " " "实 "1.找到vc++的安装路径...\Microsoft Visual " "验 "Studio\VC98\Include\GL目录,然后将压缩包里的glut.h文件复制一 " "步 "份到该目录下。 " "骤 "2.找到vc++的安装路径..\Microsoft Visual " " "Studio\VC98\Lib目录下,然后将glut32.lib放到该目录下。 " " "3.找到路径windows\systom32目录,然后将glut32.dll文件复制一份 " " "到该目录下。 " " "4. " " "OpenGL环境设置好后就可以开始编写程序了,接下来就是打开vc++编 " " "辑器,在编辑器里输入如下代码: " " "#include " " "#include<GL/gl.h> " " "#include<GL/glut.h> " " "#include " " " " " "void myinit(void); " " "void display(void); " " " " " "void init(void) " " "{ " " "glClearColor(0.0,0.0,0.0,1.0); " " "} " " "void display(void) " " "{ " " "glClear(GL_COLOR_BUFFER_BIT); " " "glColor4f(0.5,0.2,1.0,0.8); " " "glPointSize(5.0); " " " " " "glBegin(GL_POINTS); " " "glVertex3f(0.1,0.5,0.0); " " "glVertex3f(0.4,0.7,0.0); " " "glVertex3f(0.6,0.2,0.0); " " "glEnd(); " " "glFlush(); " " " " " "} " " " " " "void main(int argc,char** argv) " " "{ " " "glutInit(&argc,argv); " " "glutInitDisplayMode(GLUT_SINGLE"GLUT_RGB); " " "glutInitWindowPosition(50,100); " " "glutInitWindowSize(800,600); " " "glutCreateWindow("the first openglsample"); " " " " " "init(); " " "glutDisplayFunc(display); " " "glutMainLoop(); " " "} " " "3.单击"启动调试"按钮后可在屏幕上看到生成的点的图案 " " "4.接着在void display(void)函数里面依次输入下面代码编译后可看 " " "到相应的图案 " " "5. glBegin(GL_LINES); " " "glVertex3f(0.1,0.2,0.0); " " "glVertex3f(0.5,0.9,0.0); "
前面几日我重新实现了迷宫的自动生成方法,并且添加了迷宫自动寻路方法。有了一个独立于GUI的迷宫库,我开始迫不及待地实现三维迷宫了! 下面是我在开发迷宫程序遇到的问题。 1、怎样将迷宫类的行和列映射到真实的三维坐标?迷宫应该用哪个参考系来描述? 其实我在制作的时候为了简化,将二维迷宫的左上角与三维的原点重合,二维迷宫的右对应三维的X轴正方向,迷宫的下对应Z轴的正方向。 2、迷宫的“上、下、左、右”在三维应该叫做什么? 在确定好迷宫的位置后,我们将迷宫的上对应Z轴的负半轴,下对应Z轴的正半轴,左对应X轴的负半轴,右对应Y轴的正半轴。 3、三维点绘制顺序以及OpenGL裁剪模式造成的一些面不可见问题。 这个问题是我在编写二维迷宫没有想到的。主要是因为二维迷宫描述墙是用一条直线,而到了三维则是一个面。由于在OpenGL有裁剪模式可以选择,我使用了 glFrontFace( GL_CW ); // 顺时针的绘制为正面 glEnable( GL_CULL_FACE ); // 剔除不是正面的面 进行设定,也就是说,所有在摄像机看来是逆时针绘制的图形都无法显示。因此我不得不用同样的顶点绘制两个面。下面是相关的函数: void DrawInnerWall( Point3F& p1, Point3F& p2, Point3F& p3, Point3F& p4 ) { glTexCoord2f( 0.0f, 1.0f ); glVertex3fv( p1 ); glTexCoord2f( 1.0f, 1.0f ); glVertex3fv( p2 ); glTexCoord2f( 1.0f, 0.0f ); glVertex3fv( p3 ); glTexCoord2f( 0.0f, 0.0f ); glVertex3fv( p4 ); } void DrawOuterWall( Point3F& p1, Point3F& p2, Point3F& p3, Point3F& p4 ) { glTexCoord2f( 1.0f, 1.0f ); glVertex3fv( p1 ); glTexCoord2f( 0.0f, 1.0f ); glVertex3fv( p2 ); glTexCoord2f( 0.0f, 0.0f ); glVertex3fv( p3 ); glTexCoord2f( 1.0f, 0.0f ); glVertex3fv( p4 ); } 在编写这些函数的时候尤其注意纹理坐标的绘制顺序。可以在纸上绘制一个草图。下面是我调用的代码: if ( Cell_UpWall( cell ) ) { DrawInnerWall( p8, p7, p3, p4 ); DrawOuterWall( p7, p8, p4, p3 ); } 4、怎样设置阻挡? 设置阻挡的基本原则还是先检测后执行。首先我先尝试着执行走一步,再判断这一步是不是出现了越界问题。如果出现了越界问题,那么不执行这一步,否则执行这一步。为了不让我们无限地靠近墙,我设定了一个gap,即摄像机必须与墙保持gap的距离。 下面是我相关的代码: bool View3D::CanGo( Maze& maze, float step ) { static float gap = m_CellSize.w / 8.0f;// 摄像机与墙最近不能超过的间隔 const Point3F& pos = m_Camera.Pos( ); Point3F tryPos; if ( pos.y > 0 && pos.y ( row - 1 ) * m_CellSize.w ); if (
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版)》(Reading, 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:Principles and Practice)。(Reading, 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。

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧