计算机图形学考试重点// 注意001// 三个文件库:gl.h; glu.h; glaux.h// 注意002// OpenGL 的窗口绘制函数ReSizeGLScene()// 注意003// OpenGL 的绘制初始化函数InitGL()// 所有绘制代码,增添在DrawGLScene(GLvoid) 函数之中// 注意004// 一般来说,OpenGL 的绘制代码在DrawGLScene() 函数里// 注意005// 平移函数glTranslatef(X,Y,Z)// glTranslatef(-1.5f,1.0f,-6.0f);// 向左移动1.5,向上移动1,向(屏幕里)移动6// 绘制三角形// 第一步:移动坐标原点glTranslatef(-1.5f,0.0f,-6.0f);// Move Left 1.5 Units And Into The Screen 6.0//glTranslatef(-1.5f,0.0f,-12.0f);// 注意006// 所有的绘制(三角形、四边形)// 均以glBegin() 开始// 均以glEnd() 结束// 注意007// 绘制(0,0) (1,0) (0.5,0.5) 三定点的三角形// glBegin(GL_TRIANGLES);// glVertex3f( 0.0f, 0.0f, 0.0f);// glVertex3f( 1.0f, 0.0f, 0.0f);// glVertex3f( 0.5f, 0.5f, 0.0f);// glEnd()// 注意008// 绘制定点函数glVertex3f()// 注意009// glVertex3f(X,Y,Z)// X,Y,Z 分别代表一个点的三维坐标值// 第二步:标识GL_TRIANGLES,用于绘制三角形,以函数glBegin() 为开始// 所有的OpenGL 绘制,均以glBegin() 函数开始,以glEnd() 函数结束glBegin(GL_TRIANGLES);// Drawing Using Triangles// 第三步:确定三角形的三个顶点glVertex3f( 0.0f, 1.0f, 0.0f); // TopglVertex3f(-1.0f,-1.0f, 0.0f); // Bottom LeftglVertex3f( 1.0f,-1.0f, 0.0f); // Bottom Right// 第四步:以glEnd() 函数结束绘制glEnd(); // Finished Drawing The Triangle // 注意010// 给你四个定点:// (0,0) (1,0) (1,1) (0,1)// 绘制四边形的代码为:// glBegin(GL_QUADS);// glVertex3f(0.0f, 0.0f, 0.0f);// glVertex3f(1.0f, 0.0f, 0.0f);// glVertex3f(1.0f, 1.0f, 0.0f);// glVertex3f(0.0f, 1.0f, 0.0f);// glEnd()// 注意011// GL_TRIANGLES 为绘制三角形标识// GL_QUADS 为绘制四边形标识// 绘制四边形glTranslatef(3.0f,0.0f,0.0f); // Move Right 3 Units//glTranslatef(1.5f,0.0f,0.0f);// 注意012// windows API 编程中,主程序是:WinMain()// 以前学的C语言是int main(int argc, char* argv[])// 注意013// OpenGL 的着色函数:// glColor3f()// 注意014// glColor3f(R,G,B)// 三个变量:// R 红色// G 绿色// B 蓝色// 考点:着色函数不能放在这个位置,一定要注意// 注意015// OpenGL 的旋转函数:// glRotatef()// 注意016// 旋转函数glRotatef(X,Y,Z)中三个参数:// X-- 绕X轴旋转// Y-- 绕Y轴旋转// Z-- 绕Z轴旋转// 注意017// 给出一段代码:// glRotatef(rtri,0.0f,1.0f,0.0f);// 绕Y轴旋转1.0f// glRotatef(rtri,-2.0f,0.0f,0.0f);// 绕X轴旋转-2.0f// glRotatef(rtri,0.0f,0.0f,0.5f);// 绕Z轴旋转0.5f// 重点018// GLfloat:// 用于定义OpenGL 的浮点型变量// 增加两个全局旋转变量// 重点019// 不停旋转一个物体,使用旋转函数:// glRotatef(r-degree,X,Y,Z)// 以速度0.2f/每帧绕X 轴旋转// 代码为:// int DrawGLScene(GLvoid)// { ... ... ... ...// glRotatef(r-degree,1.0f,0f,0f)// ... ... ... ...// r-degree += 0.2f;// }// 重点020// 不停旋转一个物体,使用旋转函数:// glRotatef(r-degree,X,Y,Z)// 以速度-0.5f/每帧绕Z 轴旋转// 代码为:// int DrawGLScene(GLvoid)// { ... ... ... ...// glRotatef(r-degree,0f,0f,1.0f)// ... ... ... ...// r-degree -= 0.5f;// }// 注意021// 三维空间中任意一个旋转,// 都可以分解为绕X轴,绕Y轴,绕Z轴的一组旋转(并不唯一)// 注意022// 三维空间中任意一个旋转,// 根据绕X轴、Y轴、Z轴旋转的顺序不同// 可分解为多组旋转。
GLfloat xrot; // X Rotation ( NEW )GLfloat yrot; // Y Rotation ( NEW )GLfloat zrot; // Z Rotation ( NEW )/*使用一个数组用于记录当前的纹理注意:这是定义了一个元素的数组*/// 注意023// 用于打开文件的库:stdio.h// #include <stdio.h>// 注意024// 用于打开文件的函数:// fopen( Filename ,"r")// 以只读的方式,打开一个文件// 文件名存放于:Filename 变量之中// 注意025// 用于关闭文件的函数:// fclose()// 关闭一个文件,文件名存放于File 变量之中,代码为:// fclose(File);// 注意026// 纹理开关,打开函数:// glEnable(GL_TEXTURE_2D);// 注意027// 纹理开关,关闭函数:// glDisable(GL_TEXTURE_2D);// 打开纹理开关:即允许纹理映射glEnable(GL_TEXTURE_2D); // Enable Texture Mapping ( NEW ) // 启用阴影平滑glShadeModel(GL_SMOOTH); // Enable Smooth Shading// 设置背景颜色glClearColor(0.0f, 0.0f, 0.0f, 0.5f); // Black Background// 设置深度缓存glClearDepth(1.0f); // Depth Buffer Setup// 启用深度测试glEnable(GL_DEPTH_TEST); // Enables Depth Testing// 所做深度测试的类型glDepthFunc(GL_LEQUAL); // The Type Of Depth Testing To Do glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);// Really Nice Perspective Calculationsreturn TRUE; // Initialization Went OK}// 注意028// 有一组代码:// glRotatef(0.5f,1.0f,0.0f,0.0f);// glRotatef(0.9f,0.0f,1.0f,0.0f);// glRotatef(-1.2f,0.0f,0.0f,1.0f);// 这里是一组绕X轴、Y轴、Z轴的旋转// 旋转的顺序是:// 第一个旋转:绕X轴;旋转了0.5f// 第二个旋转:绕Y轴;旋转了0.9f// 第三个旋转:绕Z轴;旋转了-1.2f// 注意029// 有一组代码:// glRotatef(-0.7f,0.0f,1.0f,0.0f);// glRotatef(0.3f,1.0f,0.0f,0.0f);// glRotatef(-1.5f,0.0f,0.0f,1.0f);// 这里是一组绕Y轴、X轴、Z轴的旋转// 第一个旋转:绕Y轴;旋转了-0.7f// 第二个旋转:绕X轴;旋转了0.3f// 第三个旋转:绕Z轴;旋转了-1.5f// 分别绕3 个轴旋转glRotatef(xrot,1.0f,0.0f,0.0f);glRotatef(yrot,0.0f,1.0f,0.0f);glRotatef(zrot,0.0f,0.0f,1.0f);// 注意030// OpenGL中的纹理粘贴函数:glBindTexture( )// 粘贴纹理glBindTexture(GL_TEXTURE_2D, texture[0]);// 注意031// 纹理映射代码:// glTexCoord2f(u, v);// glVertex3f(x,y,z);// 将纹理图像定点坐标(u,v)映射值三维空间定点(x,y,z)// 以下两行代码:// glTexCoord2f(0.0f, 0.0f);// glVertex3f(-1.0f, -1.0f, 1.0f);// 将纹理图像顶点坐标(0,0)映射至三维空间坐标(-1,-1,1)// 注意032// OpenGL 中光源分为两种:一种是:环境光, 另一种是:漫射光// 设置环境光参数GLfloat LightAmbient[]= { 0.5f, 0.5f, 0.5f, 1.0f };// 设置漫射光参数GLfloat LightDiffuse[]= { 1.0f, 1.0f, 1.0f, 1.0f };// 设置光源位置GLfloat LightPosition[]= { 0.0f, 0.0f, 2.0f, 1.0f };// 注意033// OpenGL 设置不同精度的纹理,目的是防止物体旋转很快、物体距离很远时,导致较差的视觉效果GLuint filter; // Which Filter To UseGLuint texture[3]; // Storage For 3 Textures// 三个纹理,存储不同精度的纹理, 目的:防止物体旋转很快、物体距离很远时,导致较差的视觉效果,接下来的代码中,采用texture[filter] 来使用纹理// 注意034// 函数glLightfv() 用于设置、操作光源参数// glLightfv(GL_LIGHT1, GL_AMBIENT, LightAmbient);// 采用LightAmbient的值作为光源GL_LIGHT1 的环境光值// GL_AMBIENT 为环境光标识// glLightfv(GL_LIGHT1, GL_DIFFUSE, LightDiffuse);// 采用LightDiffuse的值作为光源GL_LIGHT1 的漫射光值// GL_DIFFUSE 为漫射光标识// glLightfv(GL_LIGHT1, GL_POSITION,LightPosition);// 采用LightPosition的值作为光源GL_LIGHT1 的光源位置值// GL_POSITION 为光源位置标识// 注意035// 打开光照开关// glEnable(GL_LIGHT1)// 使光源GL_LIGHT1 有效// 注意036// 关闭光照开关// glDisable(GL_LIGHT1)// 使光源GL_LIGHT1 失效// 注意037// 运行中DrawGLScene() 函数一直不断地被循环调用,使得能够绘制动画效果// 在OpenGL 绘制过程中,DrawGLScene() 函数一直不断地被循环调用// 法线函数:glNormal3f()// 注意038// 相关的键盘控制功能的实现代码,应该写在:主函数WinMain() 之中// Windows API 编程与DOS 下的main(int argc, char *argv[])主函数是不一样的Turbo C 2.0 (主要支持C 语言), Turbo C 3.0 (只要支持C++ 语言)。