第十章 OpenGL光照

合集下载

OpenGL中的光照技术研究

OpenGL中的光照技术研究

OpenGL中的光照技术研究摘要:光照处理是增强图形真实感的重要组成部分,主要研究了如何在场景中添加OpenGL光照,介绍了添加光照的基本步骤以及实现方法,并对如何设置物体的材质属性作了简要介绍。

关键词:光照;真实感;OpenGL;材质0 引言当观察一个物体时,所看到的颜色是基于光子的分布而形成的,正是这些光子刺激了人眼圆锥细胞。

这些光子可能来自单个光源,也可能来自多个光源。

有些光子被表面所吸收,有些光子则被表面所反射。

不同的表面所具有的属性不同。

物体本身如果是用光滑的材质所组成,在此情况下就会反射更多的光,人的眼睛因此也将接受到更多的光子。

如果物体是由粗糙的材质所组成,更多的光子会被其吸收或者被反射出视野之外,因此眼睛就不会接受到很多的光子,物体就会比较暗。

用OpenGL在模拟光照时,通过将光近似地分解成红、绿和蓝色分量来计算光和光照。

也就是说,一个光的颜色由此光中的红、绿和蓝色分量的数量决定。

当光照射到一个表面时,OpenGL根据其表面的材质来确定此表面所应该反射的光的红、绿和蓝色分量的百分比数量。

1 OpenGL中光的类型(1)环境光。

环境光并不来自任何特定的方向。

它来自某个光源,但光线却是在房间或场景中四处反射,没有方向性可言。

由环境光所照射的物体在所有方向上的所有表面都是均匀照亮的。

(2)散射光。

散射光来自于一个特定的方向,但它均匀地在一个表面反射开来。

虽然光是均匀反射的,但受到光线直接指向的物体表面还是比其它从某个角度受到光线掠过的表面更亮一些。

(3)镜面光。

镜面光也是有方向的,但它的反射角度很锐利,是沿一个特定的方向。

高强度镜面光趋向于在它所照射的表面上形成一个亮点。

(4)发射光。

带有发射光的物体看起来就好像自身会发光,只不过这样的光不会对场景中的其它物体产生影响。

在OpenGL 中,发射光增加了物体的亮度,但是任何光源都不会影响发射光。

2 OpenGL中添加光照的步骤在OpenGL中添加光照需要遵循以下步骤:①为每个物体的每个顶点计算法向量,法线确定了物体相对于光源的指向;②创建、选择并定位所有的光源;③创建并选择一种光照模型;④为场景中的物体定义材质属性。

OpenGL中的光照模型

OpenGL中的光照模型

OpenGL中的光照模型一、OpenGL的光照模型在OpenGL的简单光照模型中反射光可以分成三个分量,环境反射光(Ambient Light)、漫反射光(Diffuse Light)和镜面反射光(Specular Light):a、环境光Ambient,是由光源发出经环境多次散射而无法确定其入射方向的光,即似乎来自所有方向。

当环境光照到曲面上时,它在各个方向上均等地发散(类似于无影灯光)。

特征:入射方向和出射方向均为任意方向。

b、漫射光Diffuse,来自特定方向,它垂直于物体时比倾斜时更明亮。

一旦它照射到物体上,则在各个方向上均匀地发散出去,效果为无论视点在哪里它都一样亮。

特征:入射方向唯一、出射方向为任意方向。

c、镜面光Specular,来自特定方向并沿另一方向反射出去,一个平行激光束在高质量的镜面上产生100%的镜面反射。

特征:入射方向和出射方向均唯一。

二、创建光源定义光源特性的函数:glLight*(light , pname, param)其中第一个参数light指定所创建的光源号,如GL_LIGHT0、GL_LIGHT1、...、GL_LIGHT7;第二个参数pname指定光源特性,这个参数的辅助信息见表1所示;最GL_LIGHT0,其他几个光源的GL_DIFFUSE和GL_SPECULAR缺省值为(0.0,0.0,0.0,1.0)。

三、启用光源和明暗处理如果光照无效,则只是简单地将当前颜色映射到当前顶点上去,不进行法向、光源、材质等复杂计算。

要启用光照或关闭光照,调用函数:glEnable(GL_LIGHTING) 或glDisable(GL_LIGHTING)。

启用光照后必须调用函数glEnable(GL_LIGHT0) ,使所定义的光源有效。

其它光源类似,只是光源号不同而已。

在OpenGL中,用单一颜色处理的称为平面明暗处理(Flat Shading),用许多不同颜色处理的称为光滑明暗处理(Smooth Shading),也称为Gourand明暗处理(Gourand Shading)。

浅谈OpenGL中的光照技术

浅谈OpenGL中的光照技术

浅谈OpenGL中的光照技术下面的这边文章,让我对OpenGL中的光照有了新的认识OpenGL场景中模型颜色的产生,大致为如下的流程图所描述:(1)当不开启光照时,使用顶点颜色来产生整个表面的颜色。

用glShadeModel可以设置表面内部像素颜色产生的方式。

GL_FLAT/GL_SMOOTH.(2)一般而言,开启光照后,在场景中至少需要有一个光源(GL_LIGHT0.。

.GL_LIGHT7)通过glEnable(GL_LIGHT0)glDisable(GL_LIGHT0)来开启和关闭指定的光源。

--- 全局环境光---GLfloat gAmbient[]= {0.6,0,6,0,6,1.0};glLightModelfv(GL_LIGHT_MODEL_AMBIENT,gAmbient);(3)设置光源的光分量-- 环境光/漫色光/镜面光默认情况下,GL_LIGHT0.。

.GL_LIGHT7 的GL_AMBIENT值为(0.0,0.0,0.0,1.0); GL_LIGHT0的GL_DIFFUSE和GL_SPECULAR值为(1.0,1.0,1.0,1.0),GL_LIGHT1.。

.GL_LIGHT7 的GL_DIFFUSE和GL_SPECULAR值为(0.0,0.0,0.0,0.0)。

GLfloat lightAmbient[]= {1.0,1.0,1.0,1.0};GLfloat lightDiffuse[]= {1.0,1.0,1.0,1.0};GLfloat lightSpecular[]= {0.5,0.5,0.5,1.0};glLightfv(GL_LIGHT0,GL_AMBIENT,lightAmbient);glLightfv(GL_LIGHT0,GL_DIFFUSE,lightDiffuse);glLightfv(GL_LIGHT0,GL_SPECULAR,lightSpecular);(4)设置光源的位置和方向-- 平行光-- 没有位置只有方向GLfloat lightPosiTIon[]= {8.5,5.0,-2.0,0.0}; // w=0.0。

实验OpenGL光照

实验OpenGL光照

实验7 OpenGL光照一、实验目的了解掌握OpenGL程序的光照与材质,能正确使用光源与材质函数设置所需的绘制效果。

二、实验内容(1)下载并运行Nate Robin教学程序包中的lightmaterial 程序,试验不同的光照与材质系数;(2)运行示范代码1,了解光照与材质函数使用。

三、实验原理为在场景中增加光照,需要执行以下步骤:(1)设置一个或多个光源,设定它的有关属性;(2)选择一种光照模型;(3)设置物体的材料属性。

具体见教材第8章8.6节用OpenGL生成真实感图形的相关内容。

四、实验代码#include<GL/glut.h>#include<stdlib.h>static int year =0,day=0;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};GLfloat white_light[]={1.0,1.0,1.0,1.0};GLfloat Light_Model_Ambient[]={0.2,0.2,0.2,1.0};glClearColor(0.0,0.0,0.0,0.0);glShadeModel(GL_SMOOTH);//glMaterialfv(材质指定,单值材质参数,具体指针);glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular);//镜面反射光的反射系数glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess);//镜面反射指数//glLightfv(光源,属性名,属性值);glLightfv(GL_LIGHT0, GL_POSITION, light_position); //光源位置glLightfv(GL_LIGHT0, GL_DIFFUSE, white_light); //漫放射光分量强度glLightfv(GL_LIGHT0, GL_SPECULAR, white_light); //折射光强度glLightModelfv(GL_LIGHT_MODEL_AMBIENT,Light_Model_Ambient);//光源2 GL_LIGHT1GLfloat mat_specular1[]={1.0,1.0,1.0,1.0};GLfloat mat_shininess1[]={50.0};GLfloat light_position1[]={0.0,0.0,0.0,0.0};GLfloat red_light[]={1.0,0.0,0.0,1.0};GLfloat Light_Model_Ambient1[]={0.2,0.2,0.2,1.0};glLightfv(GL_LIGHT1, GL_POSITION, light_position1); //光源位置glLightfv(GL_LIGHT1, GL_DIFFUSE, red_light); //漫放射光分量强度glLightfv(GL_LIGHT1, GL_SPECULAR, red_light); //折射光强度glLightModelfv(GL_LIGHT_MODEL_AMBIENT,Light_Model_Ambient1);//开启灯光glEnable(GL_LIGHTING);glEnable(GL_LIGHT0);glEnable(GL_LIGHT1);glEnable(GL_DEPTH_TEST);}void display(void){glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);glPushMatrix();// 定义太阳的材质并绘制太阳{GLfloat sun_mat_ambient[] = {1.0f, 0.0f, 0.0f, 1.0f}; //定义材质的环境光颜色,偏红色GLfloat sun_mat_diffuse[] = {0.5f, 0.5f, 0.0f, 1.0f}; //定义材质的漫反射光颜色,偏红色GLfloat sun_mat_specular[] = {1.0f,0.0f, 0.0f, 1.0f}; //定义材质的镜面反射光颜色,红色GLfloat sun_mat_emission[] = {0.0f, 0.0f, 0.0f, 1.0f}; //定义材质的辐射光颜色,为0GLfloat sun_mat_shininess = 32.0f;glMaterialfv(GL_FRONT,GL_AMBIENT,sun_mat_ambient);glMaterialfv(GL_FRONT,GL_DIFFUSE,sun_mat_diffuse);glMaterialfv(GL_FRONT,GL_SPECULAR,sun_mat_specular);glMaterialfv(GL_FRONT,GL_EMISSION,sun_mat_emission);glMaterialf (GL_FRONT,GL_SHININESS,sun_mat_shininess);glutSolidSphere(0.5,40,16);//太阳glRotatef((GLfloat) year,0.0,1.0,0.0);}glPushMatrix();{GLfloat earth_mat_ambient[] = {0.0f, 0.0f, 1.0f, 1.0f}; //定义材质的环境光颜色,偏蓝色GLfloat earth_mat_diffuse[] = {0.0f, 0.0f, 0.5f, 1.0f}; //定义材质的漫反射光颜色,偏蓝色GLfloat earth_mat_specular[] = {1.0f, 0.0f, 0.0f, 1.0f}; //定义材质的镜面反射光颜色,红色GLfloat earth_mat_emission[] = {0.0f, 0.0f, 0.0f, 1.0f}; //定义材质的辐射光颜色,为0GLfloat earth_mat_shininess = 30.0f;glMaterialfv(GL_FRONT, GL_AMBIENT, earth_mat_ambient);glMaterialfv(GL_FRONT, GL_DIFFUSE, earth_mat_diffuse);glMaterialfv(GL_FRONT, GL_SPECULAR, earth_mat_specular);glMaterialfv(GL_FRONT, GL_EMISSION, earth_mat_emission);glMaterialf (GL_FRONT, GL_SHININESS, earth_mat_shininess);glTranslatef(0.8,0.0,0.0);glRotatef((GLfloat) day,0.0,1.0,0.5);//位置变化glutSolidSphere(0.2,20,8);//地球{GLfloat earth_mat_ambient[] = {0.0f, 1.0f, 0.0f, 1.0f}; //定义材质的环境光颜色,偏绿色GLfloat earth_mat_diffuse[] = {0.0f, 0.5f, 0.0f, 1.0f}; //定义材质的漫反射光颜色,偏绿色GLfloat earth_mat_specular[] = {1.0f, .0f, 0.0f, 1.0f}; //定义材质的镜面反射光颜色,红色GLfloat earth_mat_emission[] = {0.0f, 0.0f, 0.0f, 1.0f}; //定义材质的辐射光颜色,为0GLfloat earth_mat_shininess = 30.0f;glMaterialfv(GL_FRONT, GL_AMBIENT, earth_mat_ambient);glMaterialfv(GL_FRONT, GL_DIFFUSE, earth_mat_diffuse);glMaterialfv(GL_FRONT, GL_SPECULAR, earth_mat_specular);glMaterialfv(GL_FRONT, GL_EMISSION, earth_mat_emission);glMaterialf (GL_FRONT, GL_SHININESS, earth_mat_shininess);glTranslatef(0.4,0.0,0.0);glRotatef((GLfloat) day,0.0,1.0,0.0);glutSolidSphere(0.1,20,8);//月亮}}glPopMatrix();glPopMatrix();glutSwapBuffers();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();gluLookAt(0.0,0.0,5.0,0.0,0.0,0.0,0.0,1.0,0.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;case 27:exit(0);break;default: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;}五、实验结果以下是实验结果截图:六、实验分析实验中,两个主要函数,glMaterialfv(材质指定,单值材质参数,具体指针),设置图形材质,glLightfv(光源,属性名,属性值),用来设置光源。

OpenGL光照

OpenGL光照

简单光照模型
当光照射到一个物体表面上时,会出现三种情 形。
– 首先,光可以通过物体表面向空间反射,产生反射光。 – 其次,对于透明体,光可以穿透该物体并从另一端射
出,产生透射光。 – 最后,部分光将被物体表面吸收而转换成热。
在上述三部分光中,仅仅是透射光和反射光能够进入人 眼产生视觉效果。简单光照模型只考虑被照明物体表 面的反射光影响,假定物体表面光滑不透明且由理想 材料构成,环境假设为由白光照明。
glEnable(GL_LIGHTING);
若使光照无效,则调用gDisable(GL_LIGHTING)可 关闭当前光照。然后,必须使所定义的每个光源有效, 例中只用了一个光源,即:
glEnable(GL_LIGHT0);
其它光源类似,只是光源号不同而已。
• 材质颜色
材质
OpenGL中,材质的定义与光源的定义很相似,是通 过定义材料对红、绿、蓝三色光的反射率来近似定义材 料的颜色。象光源一样,材料颜色也分成环境、漫反射 和镜面反射成分,它们决定了材料对环境光、漫反射光 和镜面反射光的反射程度。
在进行光照计算时,材料对环境光的反射率与每个进 入光源的环境光结合,对漫反射光的反射率与每个进入 光源的漫反射光结合,对镜面光的反射率与每个进入光 源的镜面反射光结合。
对环境光与漫反射光的反射程度决定了材料的颜色, 并且它们很相似。对镜面反射光的反射率通常是白色或 灰色(即对镜面反射光中红、绿、蓝的反射率相同)。 镜面反射高光最亮的地方将变成具有光源镜面光强度的 颜色。例如一个光亮的红色塑料球,球的大部分表现为 红色,光亮的高光将是白色的。
OpenGL光组成
• 漫射光来自一个方向,它垂直于物体时比倾斜时 更明亮。一旦它照射到物体上,则在各个方向上 均匀地发散出去。于是,无论视点在哪里它都一 样亮。来自特定位置和特定方向的任何光,都可 能有散射成分。

精编OpenGL点光源资料

精编OpenGL点光源资料

OpenGL点光源在OpenGL场景描述中可以包含多个点光源,光源的各种属性设置使用函数:void glLight{if} (GLe num light, GLenum pn ame, TYPE param);void glLight{if}v (GLe num light, GLenum pn ame, TYPE *param);指定。

其中,参数 light指定进行参数设置的光源,其取值可以是符号常量GL_LIGHT0 , GL_LIGHT1,…,GL_LIGHT7 ;参数pname指定对光源设置何种属性,其取值参见表10-1 ;参数param指定对于光源light的pname属性设置何值,非矢量版本中,它是一个数值,矢量版本中,它是一个指针,指向一个保存了属性值的数组。

表10-1参数pname的取值及其含义(0.0. l-0>GL DIFFUSE{1 a l .o, 1 0)軸D血0.0, 0.0.1GL SPECtTAR i i.o. ia m⑷oo.o.o, io>.也用爭憶圉光井GL_PO$mON(0.0. DO. to.o ovGL_SPOT__D(RECT(OX{gGL SPOT EXPONENT㈣卜ISO®止金GL COX STANT ATION 1.4GD世袁减因子-AT FEN1TAT1ON g子GL QUADRATIC ATTENL ATION二JX配廣因于丿(1)点光源的颜色点光源的颜色由环境光、漫反射光和镜面光分量组合而成,在GL_AMBIENT、GL_DIFFUSE和GL_SPECULAR 指定。

其中,漫反射光成分对物体的影响最大。

(2)点光源的位置和类型点光源的位置使用属性GL_POSITION指定,该属性的值是一个由4个值组成的矢量(X, y,乙w)。

其中,如果 w值为0,表示指定的是一个离场景无穷远的光源,( x, y, z) 指定了光源的方向,这种光源被称为方向光源,发出的是平行光;如果w值为1,表示指定的是一个离场景较近的光源,(x, y, z)指定了光源的位置,这种光源称为定位光源。

OpenGL中的光照

OpenGL中的光照

计算机图形学课程报告光照学生:蒋志强学号:S062311老师:代术成目录目录 (1)计算机图形学及OPENGL简介 (2)光照简介 (3)光照中的光源 (4)光照中的材质 (5)光照中的纹理 (9)三维太阳系模拟程序(SOLAR SYSTEM)介绍 (11)SOLAR SYSTEM详细说明 (12)参考资料 (22)计算机图形学及OpenGL简介计算机图形学是计算机科学的重要组成部分,在模拟仿真、虚拟现实、飞行员驾驶员训练、医疗、教学、演示等各个方面都得到了广泛得应用。

其中最火热的应用是在3D游戏方面,并极大的推动了相关计算机硬件的高速发展。

我第一次接触3D游戏是在小学6年纪的时候,当时玩的就是每个游戏爱好者都如雷贯耳的DOOM。

从那个时候开始,由于游戏商业利润的吸引,相应的计算机硬件的发展速度惊人的迅速,竞争的激烈也可以用残酷来形容。

以至于3D加速卡曾经的业界老大3dfx都走了被nvida兼并的一天。

DOS版本下的DOOM正是因为硬件的飞速发展才为计算机图形学在各个领域的广泛应用铺平了道路,让相应的API软件开发包有了在现实舞台上一展身手的机会。

微软的3D API开发包从最早MS-DOS下的DirectX 1.0到如今Vista的.NET平台下的DirectX 10,OpenGL在工业界的事实上的标准的确立,移动平台上的JA V A 3D 的发展,这些3D开发API的发展为3D开发程序员提供了强大的工具。

在这些3D API中,OpenGL有着特殊的地位,在工业上被广泛的使用,是事实上的工业标准。

OpenGL是一个到图形应将爱你的软件接口(API),包括250个函数,程序员使用它们来创建和控制3D交互程序。

OpenGL是一个独立于硬件的高效接口,可在很多硬件平台上实现,在UNIX、Linux、Mactosh上都可以使用OpenGL开发。

当然在PC上也提供相应的支持,在PC游戏史上上有着划时代意义的电子游戏QUAKE的3D图像在底层就是使用的OpenGL。

opengl灯光

opengl灯光

另外,在OpenGL中还可以设置聚光灯效果,这里我们就不讨论了。
光照处理
我们先看一下两个效果图,左边是没有光照的,右边是有光照的(不要认为有光照就亮,没有光照就黑哦,判别的依据应该是右图中出新了阴影,因此立体感也更强,如果觉得这个效果不好,可以自行调整个参数的)。
下面我们讨论具体的实现过程,同时阐述各个语句的作用:
1、添加几个全局变量:
下面这些变量用于控制光照开关的,我们通过按键L来控制光照开关。
glLightfv(GL_LIGHT1, GL_DIFFUSE, LightDiffuse); // 设置漫反射分量
glLightfv(GL_LIGHT1, GL_POSITION,LightPosition); // 设置光源位置
Hale Waihona Puke glLightModelfv(GL_LIGHT_MODEL_AMBIENT, Light_Model_Ambient);
此时的效果就正常了。
设置反射光:和环境光,漫反射光设置的方法类似,我们首先增加全局变量,它们分别表示光源的反射光分量和材质的反射光分量,它们共同决定了最终的颜色,现在我们将它设置成白色,可以起到反射很强的效果,你可以自己修改参数:
GLfloat LightSpecular[]= { 1.0f, 1.0f, 1.0f, 1.0f };
glMaterialfv(GL_FRONT,GL_SPECULAR,MaterialSpecular);//材质的反射分量
glMaterialf(GL_FRONT,GL_SHININESS,128);//后面的值越大,光线越集中
GL_SHININESS设置的值越大(最大也就128),光线越集中,但事实上我们并没有看到聚焦的效果,这是因为我们的图形分得不够细,我们如果改用一只轮胎(这个是glaux.h中提供的),就可以看清这个值的作用了。光照作用到整个场景中,以后随着场景的复杂度增加,光照的效果会更好。只要用这个代码代替绘制三棱锥和立方体代码就行了:

OpenGL中的光照模型

OpenGL中的光照模型

OpenGL中的光照模型一、OpenGL的光照模型在OpenGL的简单光照模型中反射光可以分成三个分量,环境反射光(Ambient Light)、漫反射光(Diffuse Light)和镜面反射光(Specular Light):a、环境光Ambient,是由光源发出经环境多次散射而无法确定其入射方向的光,即似乎来自所有方向。

当环境光照到曲面上时,它在各个方向上均等地发散(类似于无影灯光)。

特征:入射方向和出射方向均为任意方向。

b、漫射光Diffuse,来自特定方向,它垂直于物体时比倾斜时更明亮。

一旦它照射到物体上,则在各个方向上均匀地发散出去,效果为无论视点在哪里它都一样亮。

特征:入射方向唯一、出射方向为任意方向。

c、镜面光Specular,来自特定方向并沿另一方向反射出去,一个平行激光束在高质量的镜面上产生100%的镜面反射。

特征:入射方向和出射方向均唯一。

二、创建光源定义光源特性的函数:glLight*(light , pname, param)其中第一个参数light指定所创建的光源号,如GL_LIGHT0、GL_LIGHT1、...、GL_LIGHT7;第二个参数pname指定光源特性,这个参数的辅助信息见表1所示;最GL_LIGHT0,其他几个光源的GL_DIFFUSE和GL_SPECULAR缺省值为(0.0,0.0,0.0,1.0)。

三、启用光源和明暗处理如果光照无效,则只是简单地将当前颜色映射到当前顶点上去,不进行法向、光源、材质等复杂计算。

要启用光照或关闭光照,调用函数:glEnable(GL_LIGHTING) 或glDisable(GL_LIGHTING)。

启用光照后必须调用函数glEnable(GL_LIGHT0) ,使所定义的光源有效。

其它光源类似,只是光源号不同而已。

在OpenGL中,用单一颜色处理的称为平面明暗处理(Flat Shading),用许多不同颜色处理的称为光滑明暗处理(Smooth Shading),也称为Gourand明暗处理(Gourand Shading)。

浅谈OpenGL中的光照技术

浅谈OpenGL中的光照技术

浅谈OpenGL中的光照技术下面的这边文章,让我对OpenGL中的光照有了新的认识OpenGL场景中模型颜色的产生,大致为如下的流程图所描述:(1)当不开启光照时,使用顶点颜色来产生整个表面的颜色。

用glShadeModel可以设置表面内部像素颜色产生的方式。

GL_FLAT/GL_SMOOTH.(2)一般而言,开启光照后,在场景中至少需要有一个光源(GL_LIGHT0.。

.GL_LIGHT7)通过glEnable(GL_LIGHT0)glDisable(GL_LIGHT0)来开启和关闭指定的光源。

--- 全局环境光---GLfloat gAmbient[]= {0.6,0,6,0,6,1.0};glLightModelfv(GL_LIGHT_MODEL_AMBIENT,gAmbient);(3)设置光源的光分量-- 环境光/漫色光/镜面光默认情况下,GL_LIGHT0.。

.GL_LIGHT7 的GL_AMBIENT值为(0.0,0.0,0.0,1.0); GL_LIGHT0的GL_DIFFUSE和GL_SPECULAR值为(1.0,1.0,1.0,1.0),GL_LIGHT1.。

.GL_LIGHT7 的GL_DIFFUSE和GL_SPECULAR值为(0.0,0.0,0.0,0.0)。

GLfloat lightAmbient[]= {1.0,1.0,1.0,1.0};GLfloat lightDiffuse[]= {1.0,1.0,1.0,1.0};GLfloat lightSpecular[]= {0.5,0.5,0.5,1.0};glLightfv(GL_LIGHT0,GL_AMBIENT,lightAmbient);glLightfv(GL_LIGHT0,GL_DIFFUSE,lightDiffuse);glLightfv(GL_LIGHT0,GL_SPECULAR,lightSpecular);(4)设置光源的位置和方向-- 平行光-- 没有位置只有方向GLfloat lightPosiTIon[]= {8.5,5.0,-2.0,0.0}; // w=0.0glLightfv(GL_LIGHT0,GL_POSITION,lightPosiTIon);-- 点光源-- 有位置没有方向GLfloat lightPosiTIon[]= {8.5,5.0,-2.0,1.0}; // w不为0glLightfv(GL_LIGHT0,GL_POSITION,lightPosition);-- 聚光灯-- 有位置有方向GLfloat lightPosition[]= {-6.0,1.0,3.0,1.0}; // w不为0glLightfv(GL_LIGHT0,GL_POSITION,lightPosition);GLfloat lightDirection[]= {1.0,1.0,0.0};glLightfv(GL_LIGHT0,GL_SPOT_DIRECTION,lightDirection); // 聚光灯主轴方向spot directionglLightf(GL_LIGHT0,GL_SPOT_CUTOFF,45.0); // cutoff角度spot cutoff** 平行光不会随着距离d增加而衰减,但点光源和聚光灯会发生衰减。

OPENGL光照绘制

OPENGL光照绘制

计算机图形学
福建师范大学
增加镜面光
• 在SetupRC()中添加如下代码 • 定义直射光线 GLfloat specular[] = { 1.0f, 1.0f, 1.0f, 1.0f }; 指定光线强度 • 定义反射系数 GLfloat specref[] = { 1.0f, 1.0f, 1.0f, 1.0f }; • 设置镜面光 glLightfv(GL_LIGHT0,GL_SPECULAR, specular); • 设置材料的反射属性 glMaterialfv(GL_FRONT, GL_SPECULAR, specref); glMateriali(GL_FRONT, GL_SHININESS, 128);
OPENGL光照模型绘制 光照模型绘制
计算机图形学
福建师范大学
在使用光照之前
• Jet.cpp • 程序功能: (1)用几个三角形组成简单的飞机模型 (2)对这些三角形设置不同的颜色 • 注意键盘的操作 (1)在main之前定义函数void SpecialKeys(int key, int x, int y) 1 main void (2)在main中glutSpecialFunc(SpecialKeys); (3)定义全局变量 static GLfloat xRot = 0.0f; static GLfloat yRot = 0.0f; (4)在SpecialKeys函数中根据键盘的方向键修改xRot和yRot的值, 并最后调用glutPostRedisplay();来通知操作系统重绘显示窗口 (5)在绘制时,使用xRot和yRot来控制三维物体的转向
计算机图形学
福建师范大学
(3)在void RenderScene(void)中添加如下 代码: ambientLight[0]=strength*1.0f; ambientLight[1]=strength*1.0f; ambientLight[2]=strength*1.0f; glLightModelfv(GL_LIGHT_MODEL_AMBIE NT,ambientLight);

探究OpenGL光照模型的着色器实现

探究OpenGL光照模型的着色器实现

探究OpenGL 光照模型的着色器实现探究OpenGL 光照模型的着色器实现OpenGL 的着色器是新一代显卡提供给开发者一个小程序,为的是让开发者对光照、坐标转换以及像素进行一些个性化的处理。

OpenGL 的着色器有一种专门的语言:GLSL ,现在的GLSL 应该全面转向Shader Model5 ,像我这样的初学者还需要花费更长的时间来学习才能基本了解OpenGL 的着色器方面的知识。

下面两图展示了OpenGL 从固定渲染管线到可编程渲染管线的变化从图中我们可以很容易地看出,OpenGL 的顶点着色器取代了固定渲染管线的转换、光照、纹理坐标生成和转换;片断着色器取代了纹理、颜色求和和雾的操作。

在OpenGL3.2 版本中加入了几何着色器( GeometryShader )这个概念,在OpenGL4.0 中又添加了分格化控制( Tessellation Control ) 和分格化评估( Tessellation Evaluation )着色器,最新的OpenGL 版本4.3 则添加了计算着色器 ( Compute Shader )。

看来OpenGL 的着色器真是越来越复杂,越来越重要了。

下面介绍一下光照模型在顶点着色器的实现,所有的内容都可以在《OpenGL 超级宝典 (第四版)》中找到。

漫反射光照是一种简单的光照模型,它只考虑漫反射。

它的公式是:N 是顶点的单位法线,L 是表示从顶点到光源的单位向量方向。

C mat 是表面材料的颜色,C li 是光线的颜色,C diff 是最终的散射颜色。

注意,N 和L 在传入之前一定要单位化。

如果用顶点着色器来实现的话,则是:uniform vec3 lightPos[1];void main( void ){// 法线的MVP 变换gl_Position = gl_ModelViewProjectionMatrix *gl_Vertex;vec3 N = normalize( gl_NormalMatrix * gl_Normal );vec4 V = gl_ModelViewMatrix * gl_Vertex;vec3 L = normalize( lightPos[0] - V.xyz ); // 输出散射颜色float NdotL = dot( N, L ); gl_FrontColor = gl_Color* vec4( max( 0.0, NdotL ) );} 注意,这里lightPos 是一个标记为uniform 的变量,这意味着可以在运行期传入的一个值到lightPos 中来改变着色器的行为。

OpenGL中的颜色光照和材质

OpenGL中的颜色光照和材质

(2)GL_SHININESS属性。



GL_LIGHT_MODEL_COLOR_CONTROL表示颜色计算方式。如果设置为 GL_SINGLE_COLOR,表示按通常顺序操作,先计算光照,再计算纹理。 如果设置为GL_SEPARATE_SPECULAR_COLOR,表示将 GL_SPECULAR属性分离出来,先ቤተ መጻሕፍቲ ባይዱ算光照的其它部分,待纹理操作完成 后再计算GL_SPECULAR。后者通常可以使画面效果更为逼真.
步骤3:启动光源
函数: glEnable


使用glEnable函数可以开启这些光源。 如:glEnable(GL_LIGHT0);可以开启第0号光源。 使用glDisable函数则可以关闭光源。 注意:一些OpenGL实现可能支持更多数量的 光源,但总的来说,开启过多的光源将会导致 程序运行速度的严重下降,
(1)GL_AMBIENT、GL_DIFFUSE、 GL_SPECULAR属性。


这三个属性与光源的三个对应属性类似,每一属性都由四个值组成。 GL_AMBIENT表示各种光线照射到该材质上,经过很多次反射后最 终遗留在环境中的光线强度(颜色)。 GL_DIFFUSE表示光线照射到该材质上,经过漫反射后形成的光线 强度(颜色)。 GL_SPECULAR表示光线照射到该材质上,经过镜面反射后形成的 光线强度(颜色)。通常,GL_AMBIENT和GL_DIFFUSE都取相同 的值,可以达到比较真实的效果。 使用GL_AMBIENT_AND_DIFFUSE可以同时设置GL_AMBIENT和 GL_DIFFUSE属性。
GL_LIGHT0进行设置,第二个参数表示要设置的是漫反射光成分,第三个参 数则是一个数组(表示光照属性值)

光线跟踪 辐射度法 OpenGL中的光照

光线跟踪 辐射度法 OpenGL中的光照

全局光照2.5 光线跟踪算法2.5 光线跟踪算法2.5.1 基本光线跟踪算法zT1 R122.5.1 基本光线跟踪算法2.5.1 基本光线跟踪算法2.5.1 基本光线跟踪算法2.5.2 快速光线跟踪算法2.5.2 快速光线跟踪算法2.5.2 快速光线跟踪算法2.5.2 快速光线跟踪算法P in P out2.6 辐射度光照模型dYX2.6 辐射度光照模型2.6 辐射度光照模型d2.6 辐射度光照模型2.6 辐射度光照模型2.6 辐射度光照模型2.6 辐射度光照模型中的光照3.1 OpenGL中的光照设置设置光照模型属性3.2 定义法矢量3.2 定义法矢量P 2 P 3u 2*p3, double *n )12N u un[0]=a[1]*b[2]-a[2]*b[1]; n[1]=a[2]*b[0]-a[0]*b[2];3.3 创建光源3.3 创建光源3.3 创建光源3.3 创建光源3.3 创建光源3.3 创建光源3.3 创建光源3.3 创建光源3.3 创建光源GL_SPOT_CUTOFF3.4设置光照模型属性3.4设置光照模型属性3.4设置光照模型属性3.4设置光照模型属性3.5定义物体表面材质属性3.5定义物体表面材质属性3.5定义物体表面材质属性3.5定义物体表面材质属性3.5定义物体表面材质属性void init(void)glMaterialfv(GL_FRONT,GL_SHININESS,mat_shiness);glShadeModel(GL_SMOOTH); /*绘制茶壶*/void myReshape(GLsizei w,GLsizei h)。

opengl光源光照使用范例

opengl光源光照使用范例

OpenGL光源光照使用范例1. 光照模型环境光——经过多次反射而来的光称为环境光,无法确定其最初的方向,但当特定的光源关闭后,它们将消失.全局环境光——每个光源都能对场景提供环境光。

此外,还有一个环境光,它不来自任何特定的光源,称之为全局环境光。

这也就是为什么我们不加任何自定义光源,也能看见绘制的物体的原因。

散射光——来自同一方向,照射到物体表面后,将沿各个方向均匀反射,因此,无论从哪个方向观察,表面的亮度都相同. 主要通过设置GLfloat light_diffuse[] = { 0.0, 1.0, 0.0, 1.0 }来发射绿光镜面反射光——来自特定方向,也被反射到特定方向.镜面反射度与之相关.材质发射光——用于模拟发光物体.在OpenGL光照模型中,表面的发射光增加了物体的亮度,它不受光源的影响,另外,发射光不会给整个场景中增加光线.当光照射到一个物体表面上时,会出现三种情形。

首先,光可以通过物体表面向空间反射,产生反射光。

其次,对于透明体,光可以穿透该物体并从另一端射出,产生透射光。

最后,部分光将被物体表面吸收而转换成热。

在上述三部分光中,仅仅是透射光和反射光能够进入人眼产生视觉效果。

这里介绍的简单光照模型只考虑被照明物体表面的反射光影响,假定物体表面光滑不透明且由理想材料构成,环境假设为由白光照明。

一般来说,反射光可以分成三个分量,即环境反射、漫反射和镜面反射。

环境反射分量假定入射光均匀地从周围环境入射至景物表面并等量地向各个方向反射出去,通常物体表面还会受到从周围环境来的反射光(如来自地面、天空、墙壁等的反射光)的照射,这些光常统称为环境光(Ambient Light);漫反射分量表示特定光源在景物表面的反射光中那些向空间各方向均匀反射出去的光,这些光常称为漫射光(Diffuse Light);镜面反射光为朝一定方向的反射光,如一个点光源照射一个金属球时会在球面上形成一块特别亮的区域,呈现所谓“高光(Highlight)”,它是光源在金属球面上产生的镜面反射光(Specular Light)。

opengl学习笔记之光照、材质(转载)

opengl学习笔记之光照、材质(转载)

opengl学习笔记之光照、材质(转载)OpenGL在处理光照时把光照系统分为三部分,分别是光源、材质和光照模型。

光源、材质和光照模式都有各⾃的属性,尽管属性种类繁多,但这些属性都只⽤很少的⼏个函数来设置。

使⽤glLight*函数可设置光源的属性,使⽤glMaterial*函数可设置材质的属性,使⽤glLightModel*函数可设置光照模式。

GL_AMBIENT、GL_DIFFUSE、GL_SPECULAR这三种属性是光源和材质所共有的,如果某光源发出的光线照射到某材质的表⾯,则最终的漫反射强度由两个GL_DIFFUSE属性共同决定,最终的镜⾯反射强度由两个GL_SPECULAR属性共同决定。

在OpenGL中,仅仅⽀持有限数量的光源。

使⽤GL_LIGHT0表⽰第0号光源,GL_LIGHT1表⽰第1号光源,依次类推,OpenGL⾄少会⽀持8个光源,即GL_LIGHT0到GL_LIGHT7。

使⽤glEnable函数可以开启它们。

例如,glEnable(GL_LIGHT0);可以开启第0号光源。

使⽤glDisable函数则可以关闭光源。

⼀些OpenGL实现可能⽀持更多数量的光源,但总的来说,开启过多的光源将会导致程序运⾏速度的严重下降,光源GL_LIGHT0与其他⼏个光源不同,GL_DIFFUSE,GL_SPECULAR的默认值是(1.0,1.0,1.0,1.0)⽽其他光源的默认值是(0.0,0.0,0.0,1.0)。

使⽤OpenGL的光照模型包括以下⼏个步骤:1 设置光源的种类、位置和⽅向(对于平⾏光源)2 为每个图元的每个顶点指定它的法线向量3 为各个图元指定它的材质4 启⽤光照模型1 光源设置设置环境光glLightfv(GL_LIGHT0,GL_AMBIENT,ambientLight);设置漫射光成分glLightfv(GL_LIGHT0,GL_DIFFUSE,DiffuseLight)设置镜⾯光成分glLightfv(GL_LIGHT0,GL_SPECULAR,SpecularLight);光源的属性GL_SPECULAR影响镜⾯反射区域的颜⾊,⼀般物体的镜⾯反射区域的颜⾊为⼊射光线的颜⾊,要实现真实感,应该将它的值设置成与GL_DIFFUSE相同。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

漫反射分量: 漫反射分量:表示特定光源在景物表面的反射光中那些向空间各
方向均匀反射出去的光,这些光常称为漫射光( 方向均匀反射出去的光,这些光常称为漫射光(Diffuse Light); ); 为朝一定方向的反射光, 镜面反射光为朝一定方向的反射光,如一个点光源照射一个金属球 时会在球面上形成一块特别亮的区域,呈现所谓“ 时会在球面上形成一块特别亮的区域,呈现所谓“高光 (Highlight)”,它是光源在金属球面上产生的镜面反射光 ) )。对于较光滑物体 (Specular Light)。对于较光滑物体,其镜面反射光的高光区域小 )。对于较光滑物体, 而亮;相反,粗糙表面的镜面反射光呈发散状态, 而亮;相反,粗糙表面的镜面反射光呈发散状态,其高光区域大而不 亮。 下面先看一个简单的光照例程。 下面先看一个简单的光照例程。
第十章 OpenGL光照 光照
10.2.2 OpenGL光组成 光组成 简单光照模型中的几种光分为: 在OpenGL简单光照模型中的几种光分为:辐射 简单光照模型中的几种光分为 )、环境光 光(Emitted Light)、环境光(Ambient Light)、 )、环境光( )、 漫射光( )、镜面光 漫射光(Diffuse Light)、镜面光(Specular )、镜面光( Light)。 )。 辐射光是最简单的一种光 最简单的一种光, 辐射光是最简单的一种光,它直接从物体发出并 且不受任何光源影响。 且不受任何光源影响。 环境光是由光源发出经环境多次散射而无法确定 环境光是由光源发出经环境多次散射而无法确定 其方向的光,即似乎来自所有方向。一般说来, 其方向的光,即似乎来自所有方向。一般说来,房间 里的环境光成分要多些,户外的相反要少得多, 里的环境光成分要多些,户外的相反要少得多,因为 大部分光按相同方向照射, 大部分光按相同方向照射,而且在户外很少有其他物 体反射的光。当环境光照到曲面上时, 体反射的光。当环境光照到曲面上时,它在各个方向 上均等地发散(类似于无影灯光)。 上均等地发散(类似于无影灯光)。
第十章 OpenGL光照 光照
void myinit(void) { GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 }; glLightfv(GL_LIGHT0, GL_POSITION, light_position); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glDepthFunc(GL_LESS); glEnable(GL_DEPTH_TEST); }
第十章 OpenGL光照 光照
void main(void) { auxInitDisplayMode (AUX_SINGLE | AUX_RGBA); auxInitPosition (0, 0, 500, 500); auxInitWindow ("Simple Lighting"); myinit(); auxReshapeFunc (myReshape); auxMainLoop(display); }
第十章 OpenGL光照 光照
简单光照例程(light0.c) 例10-1 简单光照例程 #include "glos.h" #include <GL/gl.h> #include <GL/glu.h> #include <GL/glaux.h> void myinit(void); void CALLBACK myReshape(GLsizei w, GLsizei h); void CALLBACK display(void);
第十章 OpenGL光照 光照
物体表面向空间给定方向辐射的光强可应用光照模 型进行计算。 型进行计算。简单的光照模型通常假定物体表面是光滑的 且由理想材料构成, 且由理想材料构成,因此只考虑光源照射在物体表面产生 的反射光, 的反射光,所生成的图形可以模拟出不透明物体表面的明 暗过渡,具有一定的真实感效果。 暗过渡,具有一定的真实感效果。 复杂的光照模型除了考虑上述因素外, 复杂的光照模型除了考虑上述因素外,还要考虑周围环境 的光对物体表面的影响。 的光对物体表面的影响。如光亮平滑的物体表面会将环境 中其它物体映像在表面上, 中其它物体映像在表面上,而通过透明物体也可看到其后 的环境景象。这类光照模型称为整体光照模型, 的环境景象。这类光照模型称为整体光照模型,它能模拟 出镜面映像、透明等较精致的光照效果。 出镜面映像、透明等较精致的光照效果。
第十章 OpenGL光照 光照
10.2、光照模型 、 10.2.1 简单光照模型
当光照射到一个物体表面上时,会出现三种情形: 当光照射到一个物体表面上时,会出现三种情形: 首先,光可以通过物体表面向空间反射,产生反射光。 首先,光可以通过物体表面向空间反射,产生反射光。 其次,对于透明体,光可以穿透该物体并从另一端射出, 其次,对于透明体,光可以穿透该物体并从另一端射出, 产生透射光。 产生透射光。 最后,部分光将被物体表面吸收而转换成热。 最后,部分光将被物体表面吸收而转换成热。 在上述三部分光中, 在上述三部分光中,仅仅是透射光和反射光能够进入人眼 产生视觉效果。 产生视觉效果。这里介绍的简单光照模型只考虑被照明物 体表面的反射光影响, 体表面的反射光影响,假定物体表面光滑不透明且由理想 材料构成,环境假设为由白光照明。 材料构成,环境假设为由白光照明。
第十章 OpenGL光照 光照
为了更真实的绘制图形,还要考虑物体表面的细节纹理, 为了更真实的绘制图形,还要考虑物体表面的细节纹理, 这通常使用一种称为“纹理映射” 这通常使用一种称为“纹理映射”(texture mapping) ) 的技术把已有的平面花纹图案映射到物体表面上, 的技术把已有的平面花纹图案映射到物体表面上,并在 应用光照模型时将这些花纹的颜色考虑进去, 应用光照模型时将这些花纹的颜色考虑进去,物体表面 细节的模拟使绘制的图形更接近自然景物。 细节的模拟使绘制的图形更接近自然景物。 以上内容中, 以上内容中,真实感图形绘制的四大步骤前两步在 前面的章节已经详细介绍过,这里不再重复, 前面的章节已经详细介绍过,这里不再重复,第三步 OpenGL将自动完成所有消隐过程,第四步下面几节详 将自动完成所有消隐过程, 将自动完成所有消隐过程 另外,部分复杂光照模型应用将在后续章节里介绍。 述。另外,部分复杂光照模型应用将在后续章节里介绍。
第十章 OpenGL光照 光照
由于真实感图形是通过景物表面的颜色和 由于真实感图形是通过景物表面的颜色和 明暗色调来表现景物的几何形状、 明暗色调来表现景物的几何形状、空间位置以 及表面材料的, 及表面材料的,而一个物体表面所呈现的颜色 是由表面向视线方向辐射的光能决定的。 是由表面向视线方向辐射的光能决定的。 在计算机图形学中, 在计算机图形学中,常采用一个既能表示光能 大小又能表示其颜色组成的物理量即光亮度 (luminance)或光强(intensity of light) )或光强( ) 来描述物体表面朝某方向辐射光能的颜色。采 来描述物体表面朝某方向辐射光能的颜色。 用这个物理量可以正确描述光在物体表面的反 透射和吸收现象, 射、透射和吸收现象,因而可以正确计算出物 体表面在空间给定方向上的光能颜色。 体表面在空间给定方向上的光能颜色。
OpenGL基础图形编程 基础图形编程 OpenGL光照 光照
张志华 数理学院
第十章 OpenGL光照 光照
本章是比较重要的一部分,前几章只是基础,在 本章是比较重要的一部分,前几章只是基础, 这章里将着重讲述光照模型、明暗处理、光源设置、 这章里将着重讲述光照模型、明暗处理、光源设置、 材质定义以及有关的计算机图形学概念等内容, 材质定义以及有关的计算机图形学概念等内容,介绍 如何运用OpenGL函数来绘制真实感图形,充分展示 函数来绘制真实感图形, 如何运用 函数来绘制真实感图形 三维图形世界的魅力。 三维图形世界的魅力。如果读者以前从未接触过这方 面的概念,要直接应用OpenGL函数库编写三维图形 面的概念,要直接应用 函数库编写三维图形 程序,是很困难的。因此,我们将结合OpenGL的特 程序,是很困难的。因此,我们将结合些有关真实感图形绘制的概念, 帮助读者理解基本的OpenGL光照、材质等函数的应 光照、 帮助读者理解基本的 光照 用方式,顺利掌握最基本的真实感图形编程方法, 用方式,顺利掌握最基本的真实感图形编程方法,引 导读者快速进入OpenGL三维图形世界。 导读者快速进入 三维图形世界。 三维图形世界
第十章 OpenGL光照 光照
10.1、真实感图形基本概念 、
真实感图形绘制是计算机图形学的一个重要 组成部分,它综合利用数学、物理学、 组成部分,它综合利用数学、物理学、计算机科 学和其它科学知识在计算机图形设备上生成象彩 色照片那样的具有真实感的图形。一般说来, 色照片那样的具有真实感的图形。一般说来,用 计算机在图形设备上生成真实感图形必须完成以 下四个步骤: 下四个步骤:
第十章 OpenGL光照 光照
四个步骤: 四个步骤: 一是用建模,即用一定的数学方法建立所需三维场景的几 一是用建模, 何描述, 何描述,场景的几何描述直接影响图形的复杂性和图形绘 制的计算耗费; 制的计算耗费; 二是将三维几何模型经过一定变换转为二维平面透视投影 图; 三是确定场景中所有可见面, 三是确定场景中所有可见面,运用隐藏面消隐算法将视域 外或被遮挡住的不可见面消去; 外或被遮挡住的不可见面消去; 四是计算场景中可见面的颜色, 四是计算场景中可见面的颜色,即根据基于光学物理的光 照模型计算可见面投射到观察者眼中的光亮度大小和颜色 分量,并将它转换成适合图形设备的颜色值, 分量,并将它转换成适合图形设备的颜色值,从而确定投 影画面上每一象素的颜色,最终生成图形。 影画面上每一象素的颜色,最终生成图形。
第十章 OpenGL光照 光照
void CALLBACK display(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); auxSolidSphere(1.0); glFlush(); }
相关文档
最新文档