




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一、简答题1、简述图形界面的Windows框架Windows框架是我们在Windows系统下运行的程序必须的架构,由三个函数构成:WinMain()程序入口,功能为定义一个Windows窗口的样式、大小等,并建立这个窗口;MsgProc()窗口调用函数,在整个运行周期中随时对回调的函数所定义的外部事件(鼠标移动、点击窗口变化、键盘和其他函数发出的消息)做出反应;GameLoop()消息循环,利用Windows的消息机制做成的主循环函数,它被程序反复执行,作用是侦听消息,有消息是返回Windows的消息链,没有消息时就执行OpenGL 的图形处理Render()。2、简述OpenGL的程序框架OpenGL的基本框架由四个函数组成:SetupPixelFormat(HDC hDC)检测安装OpenGLinit(int Width,int Height)OpenGL视口进行变换CleanUp()清楚OpenGL的连接Render()OpenGL图形处理3、简述OpenGL的构图形式OpenGL的构图形式为,在函数对glBegin(TYPE),glEnd()之间给出图形的顶点坐标集。连接定点的方式由glBegin中的类型决定。基本形式如下:glBegin(TYPE);/连接各顶点的方式/图形的定点坐标集;glEnd()4、至少列举8种OpenGL构图类型GL_POINTS 单个顶点集GL_LINES 多组双顶点线段GL_LINE_STRIP 不闭合折线GL_LINE_LOOP 闭合折线GL_POLYGON 单个简单填充凸多边形GL_TRAINGLES 多组独立填充三角形GL_QUADS 多组独立填充四边形GL_TRAINGLE_STRIP 线性连续填充三角形串GL_TRANGLE_FAN 扇形连续填充三角形串GL_QUAD_STRIP 连续填充四边形串5、简述OpenGL中glPushMatrix()和glPopMatrix()函数的应用glPushMatrix()函数:使用此函数就是要让OpenGL记住空间中当前的这个位置,以便经过一些变换后还能快速方便地回到此处位置。glPopMatrix()函数:此函数通知OpenGL在访问过空间的其他位置之后,返回到原先记住的位置。6、简述OpenGL中坐标变换的三个函数应用平移:glTranslatef(float x,float y,float z);将该函数以下的图形在三维坐标中移动(x,y,z)旋转:glRotatef(float angle,float a,float y,float z);将该函数以下的图形在指定轴上旋转angle度缩放:glScalef(float x,float y,float z);x,y,z是沿三个轴向缩放的比例因子7、OpenGL中,顶点在最终被绘制到屏幕上之前要经过哪3种类型的变换视图变换:设定视点的位置模型变换:在场景中移动物体投影变换:定义视体和裁剪平面8、OpenGL试图通过哪4种光的组合来模拟真实世界的光照环境光、散射光、镜面反射光、发射光9、简述OpenGL摄像漫游的实现原理观察点在场景中位置改变的结果10、简述OpenGL中纹理映射的技术原理纹理映射是一项技术,其能够将3D图形从一堆有颜色的三角形变成可以像照片一样具有真实感的场景。究其本质,纹理就是些图案。当纹理映射到一个多边形上时,纹理就随着多边形的变换而进行相应的变换。11、解释纹理坐标的应用如果对一个2D纹理加上一个坐标系,那么就可以确定其上的每一个点并对其进行操作,每一个点叫一个纹理坐标,通常以点(s,t)的形式表示。当纹理映射应用于表面时,使用参数坐标(u,v)来定义其纹理在表面上的方向,u和v的取值在(0,1)的区间内,对于所进行纹理映射的表面,其上的坐标u和v的最大值和最小值决定了纹理映射的范围。12、简述OpenGL中实现天空体常用的两种方法天空盒:用一个矩形方盒作为天空远景贴图的载体半球形天空模型13、简述MD2关键帧动画模型的原理MD2是一种关键帧关键帧动画模型。所谓关键帧动画模型,就是构成模型的各个结构组件,按一定的时间序列进行位置移动、旋转,形成模型的整个动作变化序列。14、简述MDL骨骼动画模型的原理骨骼动画模型是形象模型为蒙皮,动作架构为骨骼而有机组成的3D动画。其优势在于用线段代表动物的骨骼关节,动物的一切复杂动作是用数据量极小的线段在空间位置的变换来表示。真正的优势还在于骨骼和形象模型是可以分离和重新组合的。15、简述粒子系统的原理基本原理是用大量的粒子对仿真对象的流体力学原理进行模拟。粒子系统是多个独立元素或粒子的一个集合,每个粒子具有独立的属性,比如速度、颜色和生命周期等。每个粒子主要以其自主的方式进行运动,在一个给定的粒子系统中的粒子通常共享一组公用的属性。16、简述基于位置框的碰撞检测的基本原理任何一个物体在场景中都有一个确定的位置、大小,可用一个位置框来表示。当一个运行物体的位置框与另一个物体的位置框相遇或相交时,我们就说这两个物体发生了碰撞。17、OpenGL颜色立方体模型OpenGL通过三个独立的分量,红色分量、绿色分量和蓝色分量的强度来定义颜色。这些强度的取值范围从0.0(无光强)1.0(最大光强)。18、简述OpenGL状态机的概念OpenGL状态机由几百个设置项组成,在要做的每一件与OpenGL有关的事件中都会发生作用,其影响着绘制的方方面面,有众多的状态函数用以控制状态机:如glGet()函数用于查询状态机当前的设置。19、OpenGL中如何实现点画线段可以指定一个点画模式来绘制线段。点画模式定义了一个掩膜,用以确定线段的哪些部分该绘制而哪些部分不绘制。使用点画模式之前,需要调用带有GL_LINE_STRIPPLE参数的glEnable()函数来启用此项性能。然后,调用glLineStipple()函数设置点画模式,此函数定义如下:void glLineStipple(Glint factor,GLushort pattern);factor参数的默认值为1,其取值范围是1256.他决定了点画模式中每一位在开始绘制下一位之前应该被重复绘制的次数。pattern参数指定了一个16bit的模式。其中对于被设置为1的位,其相应的像素被绘制;而那些为0的,将不被绘制。应该注意的是这些位是按照逆序来应用的,所以绘制线段时低位先被应用,然后依次应用较高的位。20、简述OpenGL的两种投影变换平行投影:投影时所有物体无论它们相对于投影平面的距离远近,其在投影平面上的投影的大小比例保持不变。投影平面可以被认为是对着3D世界的摄像镜头,所有可见的3D点都要投射到这个2D平面上。可以分两步来完成:第一步先要将投影平面变换到3D空间的xy平面上,第二步除去所有可见点的z项坐标信息。透视投影:基于物体相对于投影平面的距离来确定其投影大小的,其投影时,3D空间中物体的所有投射光线会聚于观察者的眼睛这一点。其主要的思路就是确定反射光线与投影平面交点的位置,可以借助于一个透视变换矩阵来完成。21、OpenGL三维场景中的二维平面树怎么实现在一个矩形平面上贴一个树木的图片,让树的背景呈透明状态,并让这些平面树在我们旋转场景时也跟着一起旋转,使我们看到的都是看到的平面树的正面。二、程序设计1、基本图元的绘制a.画点void Point()glBegin(GL_POINTS);glVertex3f(0.0f,0.0f,0.0f);glEnd();b.画线void Line()glBegin(GL_LINES);glVertex3f(-1.0f,-1.0f,0.0f);glVertex3f(1.0f,-1.0f,0.0f);glEnd();c.画三角形void Triangle()glBegin(GL_TRIANGLES);glVertex3f(0.0,0 0,0.0);glVertex3f(1.0,0.0,0.0);glVertex3f(0.0, 1.0,0.0);glEnd();d.画正方形void SquareglBegin(GL_POLYGON);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();e.画立方体void Esquare()glBegin(GL_QUAD_STRIP);/填充凸多边形glVertex3f(0.0f,0.0f,0.0f);/a0glVertex3f(0.0f,1.0f,0.0f);/a1glVertex3f(1.0f,0.0f,0.0f);/b0glVertex3f(1.0f,1.0f,0.0f);/b1glVertex3f(1.0f,0.0f,-1.0f);/c0glVertex3f(1.0f,1.0f,-1.0f);/c1glVertex3f(0.0f,0.0f,-1.0f);/d0glVertex3f(0.0f,1.0f,-1.0f);/d1glVertex3f(0.0f,0.0f,0.0f);/a0glVertex3f(0.0f,1.0f,0.0f);/a1glEnd();/上下两个面glBegin(GL_POLYOON);glVertex3f(0.0f,0.0f,0.0f);/a0glVertex3f(1.0f,0.0f,0.0f);/b0glVertex3f(1.0f,0.0f,-1.0f);/c0glVertex3f(0.0f,0.0f,-1.0f);/d0glVertex3f(0.0f,1.0f,0.0f);/a1glVertex3f(1.0f,1.0f,0.0f);/b1glVertex3f(1.0f,1.0f,-1.0f);/c1glVertex3f(0.0f,1.0f,-1.0f);/d1glEnd();f.画圆void Park()glBegin(GL_TRIANGLE_PAN);glVertex3f(0.0f,0.0f,0.0f);for(int i=0;i=390;i+=30)float p=(float)(i*3.14/180);glVertex3f(float)sin(p)/2,(float)cos(p)/2,1.0f);glEnd();g.画圆柱void Pillar()glBegin(GL_QUADS_STRIP);for(int i=0;i=390;i+=30)float p=(float)(i*3.14/180);glVertex3f(float)sin(p)/2,(float)cos(p)/2,1.0f);/前圆glVertex3f(float)sin(p)/2,(float)cos(p)/2,0.0f);/后圆glEnd();2、简单组合图形的绘制用OpenGL基本图元和坐标变换来构造组合图形3、坐标变换旋转:glRotatef(float angle,float x,float y,float z);缩放:glScalef(float x,float y,float z);平移:glTranslatef(float x,float y,float z);4、纹理映射例:给一个正方形面贴图a./定义纹理信息 BITMAPINFOHEADER bitmapInfoHeader;/位图信息头 unsigned char* bitmapData;/纹理数据 unsigned int texture;/纹理对象b.将纹理数据载入内存通过LoadBitmapFile()函数c.定义一个绘制纹理正方形的函数void DrawTextureSquare(float xPos,float yPos,float zPos)glPushMatrix();glTranslatef(xPos,yPos,zPos);glBegin(GL_QUADS);glTexCoord2f(0.0f,0.0f);glVertex3f(0.0f,0.0f,0.0f);glTexCoord2f(1.0f,0.0f);glVertex3f(1.0f,0.0f,0.0f);glTexCoord2f(1.0f,1.0f);glVertex3f(1.0f,1.0f,0.0f);glTexCoord2f(0.0f,1.0f);glVertex3f(0.0f,1.0f,0.0f);glEnd();glPopMatrix();d.初始化函数void Initialize()glClearColor(0.0f,0.0f,0.0f);/将背景颜色清理为黑色glShadeModel(GL_SMOOTH);/使用平滑明暗处理glEnable(GL_DEPTH_TEST);/消除隐藏面glEnable(GL_CULL_FACE);/不计算多边形的背面glFrontFace(GL_CCW);/逆时针方向为多边形的背面glEnable(GL_TEXTURE_2D);/启用2D纹理映射 /载入位图文件bitmapData=LoadBitmapFile(“位图文件名”,&bitmapInfoHeader);glGenTextures(1,&texture);/生成纹理对象glBindTexture(GL_TEXTURE_2D,texture);/绑定纹理glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);glTexParameteri(GL_REXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);/载入纹理对象glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,bitmapInfoHeader.biWidth,bitmapInfoHeader.biHeight,0,GL_RGB,GL_UNSIGNED_BYTE,bitmapData);e.在Render()函数中调用DrawTextureSquare()函数void Render() /清理屏幕和深度缓存glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);glLoadIdentity(); glBindTexture(GL_TEXTURE_2D,texture);/绑定纹理DrawTextureSquare(0.0f,0.0f,0.0f);/绘制纹理正方形.5、位图字符a.设置显示列表的基准ID,因此要创建一个变量listBase: unsigned int listBase; 在应用程序结束时,可以创建一个函数来清理显示列表 void ClearFont(unsigned int base ) if(base!=0)glDeleteLists(base,96); b.使用CreateFont()函数来创建位图字体 unsigned int CreateBitmapFont(char *fontName,int fontSize)hFont hFont;/Windows字体 unisigned int base; base=glGenLists(96);/为96个字符生成显示列表 if(stricmp(fontName,”symbol”)=0) hFont=CreateFont(fontSize,0,0,0,FW_BOLD,FALSE,FALSE,FALSE,SYMBOL_CHARSET,OUT_TT_PRECIS,CLIP_DEFAULT_PRECIS,ANTIALIASED_QUALITY,FF_OONTCARE|DEFAULT_PITCH,fontName); else hFont=CreateFont(fontSize,0,0,0,FW_BOLD,FALSE,FALSE,FALSE,ANSI_CHARSET,OUT_TT_PRECIS,CLIP_DEFAULT_PRECIS,ANTIALIASED_QUALITY,FF_OONTCARE|DEFAULT_PITCH,fontName); If(!hFont) return 0;SelectObject(g_HDC,hFont);wglUseFontBitmaps(g_HDC,32,96,base);return base; c.PrintString()函数,以当前的位图字体在当前的光栅位置处显示一个文本字符串 void PrintString(unsigned int base,char *str) if(base=0)|(str=NULL)return;glPushAttrib(GL_LIST_BIT);glListBase(base-32);glCallLists(strlen(str),GL_UNSIGNED_BYTE,str); glPopAttrib(); d.初始化位图字体 void Initialize() glClearColor(0.0f,0.0f,0.0f);glSahdeModel(GL_SMOOTH);glEnable(GL_DEPTH_TEST);listBase=CreateBitmapFont(“字体名称”,48);/48磅 创建位图字体 e.在Render()函数中调用PrintSring()函数 void Render() glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);glLoadIdentity();glRasterPos2f(-0.35,0.0f);PrintSring(listBase,”要显示的文字”);/显示文本glFlush();SwapBuffers(g_HDC); 6、灯光/光照变量float ambientLight=0.3f,0.5f,0.8f,1.0f;/环境光float diffuseLight=0.25f,0.25f,0.25f,1.0f;/散射光float lightPosition=0.0f,0.0f,0.0f,1.0f;/光源位置float lightDirection=-1.0f,0.0,-1.0f;/光的方向/材质变量float matAmbient=1.0f,1.0f,1.0f,1.0f;/环境光材质属性float matDiff=1.0f,1.0f,1.0f,1.0f;/散射光环境属性float matSpecular=1.0f,1.0f,1.0f;/镜面反射光材质属性/初始化void Initialize()glClearColor(0.0f,0.0f,0.0f);glShadeModel(GL_SMOOTH);glEnable(GL_DEPTH_TEST);glEnable(GL_CULL_FACE);glFrontFace(GL_CCW);glEnable(GL_LIGHTING);/启用光照/现在开始设置LIGHT0glLightfv(GL_LIGHT0,GL_AMBIENT,ambientLight);/设置环境光分量glLightfv(GL_LIGHT0,GL_DIFFUSE,diffuseLight);/设置散射光分量glLightfv(GL_LIGHT0,GL_POSITION,lightPosition);/设置光源位置/启用LIGHT0glEnable(GL_LIGHT0);glEnable(GL_COLOR_MATERIAL);glColorMaterial(GL_FRONT,GL_AMBIENT_AND_DIFFUSE);/为LIGHT0设置材质glMaterialfv(GL_FRONT,GL_AMBIENT,matAmbient);glMaterialfv(GL_FRONT,GL_DIFFUSE,matDiff);glMaterialfv(GL_FRONT,GL_SPECULAR,matSpecular);glMaterialf(GL_FRONT,GL_SHININESS,10.0f);/Render 处理场景的绘制void Render()glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);glLoadIdentity();glBegin();/绘制物体glEnd();7、顶点数组以绘制地形为例/首先,声明将要使用的数组GLuint g_indexArrayMAP_X*MAP_Z*6;/顶点索引数组float g_terrainMAP_X*MAP_Z3;/顶点位置数据float g_colorArrayMAP_X*MAP_Z3;/颜色数组float g_texcoordArrayMAP_X*MAP_Z2;/纹理坐标数组/存入相应的数据并启用顶点数组 初始化void InitializeArrays()/用于跟踪索引数组中的当前元素int index=0;int currentVertex;/遍历地形图中的所有顶点for(int z=0;zMAP_Z;z+)for(int x=0;xMAP_X;x+)/从左至右,从上至下地计算顶点currentVertex=z*MAP_X+x;/设置颜色数组中的值g_colorArraycurrentVertex0=g_colorArraycurrentVertex1=g_colorArraycurrentVertex2=g_terrainx+MAP_X*z1/255.0f;/设置纹理坐标中的值g_texcoordArraycurrentVertex0=(float)x;g_texcoordArraycurrentVertex1=(float)z;for(z=0;zMAP_Z-1;z+)for(int x=0;xMAP_X;x+)currentVertex=z*MAP_X+x;g_indexArrayindex+=currentVertex+MAP+X;g_indexArrayindex+=currentVertex;/启用要使用的顶点数组glEnableClientState(GL_VERTEX_ARRAY);glEnableClientState(GL_COLOR_ARRAY);glEnableClientState(GL_TEXTURE_COORD_ARRAY);/将指针传递给OpenGLglVertexPointer(3,GL_FLOAT,0,g_terrain);glColorPointer(3,GL_FLOAT,0,g_colorArray);glTexCoordPointer(2,GL_FLOAT,0,g_texcoordArray);程序中通过glElements()函数来显示其数据For(int z=0;zMAP_Z-1;z+)/以三角形带的绘制模式来绘制三角形glDrawElements(GL_TRIANGLE_STRIP,MAP_X*2,GL_UNSIGNED_INT,&g_indexArrayz*MAP_X*2);8、显示列表以绘制金字塔为例void InitializePyramid(GLuint &pyramidList)pyramidList=glGenlists(1);glNewList(pramidList,GL_COMPILE);glBegin(GL_TRIANGLE_FAN);glVertex3f(0.0,1.0,0.0);glVertex3f(-1.0,0.0,1.0);glVertex3f(1.0,0.0,1.0);glVertex3f(1.0,0.0,-1.0);glVertex3f(-1.0,0.0,-1.0);glEnd();glEndList();现在,要绘制金字塔时,只需要先进行必要的平移、旋转、缩放,然后再调用:glCallList(pyramidList);最后释放该列表:glDeleteLists(pyramidList,1);三、综合设计1、详细阐述基于非控制台的windows窗口界面应用程序框架包含框架中每一部分的功能,用到的数据结构,函数等。#define WIN32_LEAN_AND_MEAN /定制所用的Windows函数库#include /主要的Windows头文件/Windows Produce事件处理器LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAN wParam, LPARAM lParam)PAINTSTRUCT paintStruct; /设备环境HDC hDC;char string=”Hello,world!”; /要被显示的文本switch(message)case WM_CREATE: /创建窗口return 0; /返回消息循环break;case WM_CLOSE: /窗口关闭PostQuitMessage(0); /发送退出消息return 0;break;case WM_PAINT: /在窗口中进行绘制,刷新hDC=BeginPaint(hwmd,& paintStruct);/激活窗口/设置文本颜色为蓝色SetTextColor(hDC,COLORREF(0x00FF0000);/在窗口中央显示文本TextOut(hDC,150,string,sizeof(string)-1);EndPaint(hwmd,& paintStruct); /在此进行绘制return 0;break;default:break;/传递所有未处理的消息至默认消息处理函数DefWindowProcreturn( DefWindowProc(hwnd,message,wParam,lParam);/程序的主入口 定义Windows窗口的样式、大小等,并创建窗口int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)WNDCLASSEX windowClass; /窗口类HWND hwnd; /窗口句柄MSG msg; /消息booldone;/应用程序退出标记/填充窗口类数据结构WNDCLASSEXwindowClass.cbSize=sizeof(WNDCLASSEX);windowClass.style=CS_HREDRAN|CS_VREDRAW;windowClass.lpfnWndProc=WndProc;windowClass.cbClsExtra=0;windowClass.cbWndExtra=0;windowClass.hInstance=hInstance;windowClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);windowClass.hCursor=LoadCursor(NULL,IDC_ARROW);windowClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);windowClass.lpszMenuName= NULL;windowClass.lpszClassName= MyClass;windowClass.hIconSm= LoadIcon(NULL, IDI_WINLOGO);/注册窗口类if(!RegisterClassEx(&windowClass)return 0;/窗口类注册完成后,创建窗口hwnd=CreateWindowEx(NULL, /扩展类型 MyClass,/ 窗口类的名字 A REAL Windows Application!,/ 应用程序的名字WS_OVERLAPPEDWINDOW | WS_VISIBLE | WS_SYSMENU,/窗口的风格类型100, 100,/ x,y 坐标400, 400,/ 窗口宽度、高度NULL,/ 父窗口句柄NULL, / 菜单句柄hInstance,/应用程序实例NULL); /无扩展参数/检查窗口是否创建失败(若失败,hwnd值将为NULL)if (!hwnd)return 0;done = false;/ 初始化循环条件变量/主消息循环while (!done)PeekMessage(&msg, hwnd, NULL, NULL, PM_REMOVE); /检查消息队列中待处理的消息if (msg.message = WM_QUIT)/是否收到WM_QUIT消息done = true;/如果收到,退出应用程序elseTranslateMessage(&msg);/ 翻译消息DispatchMessage(&msg);/将指定消息分发回windows系统并处理return msg.wParam;/返回终止代码要确保每一个Window系统设置任务按顺序完成。实际上,可以将它们分为以下几个步骤完成:(1)窗口类的设置(2)窗口类的注册(3)窗口的创建(4)用于事件处理的消息循环2、详细描述OpenGL三维场景中添加光照效果的程序流程结构向场景中添加光照需要四个步骤(1) 为每个顶点计算法向量。法线确定了物体相对于光源的指向glNormal3f(x,y,z);(2) 创建、选择并定位所有的光源(3) 创建并选择一种光照模型。光照模型定义了环境光,并设置用于光照计算的视点位置(4) 为场景中的物体定义材质属性程序流程结构:/定义光照变量float ambientLight=a1,a2,a3,1.0f;/环境光float diffuseLight=d1,d2,d3,1.0f;/散射光float lightPosition=l1,l2,l3,1.0;/光源位置float lightDirection=x0,y0,z0;/光的方向/定义材质变量float matAmbient=1.0,1.0,1.0,1.0;/环境光材质属性float matDiff=1.0,1.0,1.0,1.0;/散射光材质属性float matSpecular=1.0,1.0,1.0,1.0;/镜面反射光材质属性/初始化OpenGLvoid Initialize()glClearColor(0.0f,0.0f,0.0f); /清理为黑色glShadeModel(GL_SMOOTH); /使用平滑明暗处理glEnable(GL_DEPTH_TEST); /消除隐藏面glEnable(GL_CULL_FACE); /不计算多边形背面glFrontFace(GL_CCW);/多边形逆时针为正面glEnable(GL_LIGHTING);/启用光照/现在开始设置LIGHT0glLightfv(GL_LIGHT0,GL_AMBIENT,ambientLight);/设置环境光分量glLightfv(GL_LIGHT0,GL_DIFFUSE,diffuseLight);/设置散射光分量glLightfv(GL_LIGHT0,GL_POSITION,lightPosition);/设置光源位置/启用LIGHT0glEnable(GL_LIGHT0);glEnable(GL_COLOR_MATERIAL);glColorMaterial(GL_FRONT,GL_AMBIENT_AND_DIFFUSE);/为LIGHT0设置材质glMaterialfv(GL_FRONT,GL_AMBIENT,matAmbient);glMaterialfv(GL_FRONT,GL_DIFFUSE,matDiff);glMaterialfv(GL_FRONT,GL_SPECULAR,matSpecular);glMaterialf(GL_FRONT,GL_SHININESS,10.0f);/处理场景的绘制void Render()3、地球自转、绕太阳公转的三维场景效果流程、关键代码/在OpenGL.h头文件中定义地球自转和公转的旋转角度变量angleZ,angleGfloat angleZ,angleG;/在初始化函数中将angle初试化angleZ=0.0f;angleG=0.0f;/在Render中绘制3D场景void Render()if(angleG=359.9f)angleG=0.0f;if(angleZ=359.9f)angleZ=0.0f;angleG+=0.1;angleZ+=30.0f;glTranslatef(0.0f,0.0f,-15.0f);/绘制太阳glPushMatrix();glColor3f(1.0f,1.0f,0.0f);/黄色auxSolidSphere(2.0f);glPopMatrix();/绘制地球glPushMatrix();glRotatef(angleG,0.0f,1.0f,0.0f);glTanslatef(0.0f,0.0f,7.0f);glRotatef(angleZ,0.0f,1.0f,0.0f);glColor3f(0.0f,0.0f,1.0f);/蓝色auxSolidSphere(0.5f);glPopMatrix();4、实现位图、轮廓字体的程序流程结构位图字体 同 二、5轮廓字体:/声明一个有256个GLYPHMETRICSFLOAT变量的数组,用于存储每个字符单元中的字符轮廓GLYP
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 制造行业质量控制检查表
- 2018年小升初数学真题解析汇编
- 中考英语语法难点专项突破练习
- 医疗机构病人资料保密管理办法
- 茶叶品牌打造与市场推广策略指南
- 幼儿园教师教学评价指标体系
- 潍坊垃圾倾倒管理办法
- 湖州工程结算管理办法
- 高三文言文阅读专项训练题库
- 航运证书档案管理规范标准
- 海门市小升初历年数学试卷
- 2025-2030中国天然气汽车行业发展分析及发展前景与趋势预测研究报告
- 2025年辅警招聘考试试题库附完整答案(历年真题)
- 痔疮病人护理课件
- 2025至2030中国5G毫米波设备行业项目调研及市场前景预测评估报告
- 现代教育技术说课
- 部编版五年级上册语文单元教学计划
- 产品经理绩效管理制度
- 2025年烟台市中考历史试卷真题(含答案)
- 2025四川产业振兴基金投资集团有限公司招聘12人笔试参考题库附带答案详解析集合
- 风湿免疫病患者结核病诊治及预防实践指南(2025版)解读课件
评论
0/150
提交评论