4-OpenGL光照明

合集下载

OpenGL中的光照技术研究

OpenGL中的光照技术研究

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

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

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

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

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

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

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

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

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

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

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

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

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

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

(2)散射光。

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

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

(3)镜面光。

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

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

(4)发射光。

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

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

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

浅谈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光照

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

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光照效果

1.实验七OpenGL光照效果(选做)1.实验七:OpenGL光照效果。

2.实验目的:通过上机编程,熟悉并掌握OpenGL中光照效果的制造方法。

3.实验要求:(1)先做实验项目:实验六“OpenGL组合图形”。

(2)每人一组,独立完成。

(3)利用OpenGL提供的颜色、光源、材质设置,对实验六“OpenGL组合图形”中自己设计的物体设置绘制颜色和材质参数,并在场景中添加光源,形成一定的光照明暗效果。

4.实验原理及内容:在现实世界中,光线和物体的材质共同决定了物体在人眼中的效果。

OpenGL 中则涉及到绘制颜色、物体的材质参数、场景中的光源颜色和位置,以此达到一定的真实感光照效果。

(1)颜色:OpenGL通过指定红、绿、蓝(RGB)三个成分的各自亮度来确定颜色,有时还有第四个成分alpha:glColor*(red, green, blue[, alpha]);glColor()函数设置当前的绘图颜色,red、green和blue分别为红、绿、蓝的亮度,alpha为透明度,取值均为0.0~1.0。

在该函数之后绘制的所有物体都将使用该颜色。

(2)光线:OpenGL的光照模型中将光源分成四种:发射光:一个物体本身就是一个发光源,如太阳、电灯等,这种光不受其它任何光源的影响。

环境光:从光源出发后光线被环境多次反射,以致没有明确的方向,或者说来自于所有的方向。

被环境光照射的物体,各个表面都均等受光。

散射光:来自于某个方向,被物体表面均匀地反射,例如荧光照明、窗口射入的阳光等。

镜面光:来自于一个方向,被物体强烈地反射到另一个特定的方向。

高亮度的镜面光往往能在被照射的物体表面产生亮斑,如金属球上的高光区。

对于散射光和镜面光,入射角度、距离和衰减因子还会影响到最终的光照效果。

除了物体本身的发射光以外,通常意义上的光并不会是单纯的环境光、散射光或镜面光,而是由这三种类型的光混合组成的。

在OpenGL中,光也是采用RGBA值来定义的,分别描述光线中红绿蓝各成分的相对亮度。

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光照模型实现课程设计

opengl光照模型实现课程设计一、课程目标知识目标:1. 让学生掌握OpenGL中光照模型的基本概念和原理,包括环境光、散射光、镜面光等;2. 使学生了解并掌握OpenGL中实现光照效果的常用函数和技巧;3. 让学生掌握如何使用光照模型为三维场景添加真实感。

技能目标:1. 培养学生运用OpenGL库进行三维场景光照编程的能力;2. 培养学生通过调整光照参数,优化场景光照效果的能力;3. 培养学生运用光照模型解决实际场景渲染问题的能力。

情感态度价值观目标:1. 培养学生对计算机图形学及三维渲染技术的兴趣和热情;2. 培养学生具备团队协作精神,学会在项目实践中互相交流、分享经验;3. 培养学生关注科技发展,了解计算机图形学在现实生活和产业中的应用。

课程性质分析:本课程为计算机图形学相关课程,旨在让学生掌握OpenGL光照模型的应用,提高三维场景渲染的真实感。

学生特点分析:学生具备一定的编程基础和图形学知识,对OpenGL有一定了解,但对光照模型的应用尚不熟悉。

教学要求:1. 理论与实践相结合,注重学生动手实践能力的培养;2. 结合实际案例,引导学生运用所学知识解决实际问题;3. 注重培养学生的团队协作和沟通能力。

二、教学内容1. 光照模型基本原理:包括环境光、散射光、镜面光的产生和计算方法,以及光照模型的组成要素。

- 教材章节:第三章“光照模型基础”2. OpenGL光照函数:介绍OpenGL中实现光照效果的相关函数,如glEnable(GL_LIGHTING)、glLightfv等。

- 教材章节:第四章“OpenGL光照函数”3. 光照参数设置:讲解如何设置光照参数,包括光源位置、颜色、强度等,以及材质属性。

- 教材章节:第五章“光照参数设置”4. 光照效果优化:分析如何通过调整光照参数,优化三维场景的光照效果,提高真实感。

- 教材章节:第六章“光照效果优化”5. 实践案例:结合实际项目,运用光照模型为三维场景添加光照效果,培养学生的实际操作能力。

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

参数名 GL_AMBIENT GL_DIFFUSE GL_AMBIENT_AND_D IFFUSE GL_SPECULAR GL_SHINESS GL_EMISSION
缺省值 (0.2, 0.2, 0.2, 1.0) (0.8, 0.8, 0.8, 1.0)
说明 材料的环境光颜色 材料的漫反射光颜色 材料的环境光和漫反射 光颜色
GL_SPOT_DIRECTION (0.0,0.0,-1.0) GL_SPOT_EXPONENT 0.0 GL_SPOT_CUTOFF GL_CONSTANT_ATTE NUATION GL_LINER_ATTENUAT ION 180.0 1.0 0.0
GL_QUADRATIC_ATTE 0.0 NUATION
简单光照明模型
假设物体不透明则物体表面呈现的颜色仅由其反射光决定。 假设物体不透明则物体表面呈现的颜色仅由其反射光决定。 反射光组成 环境反射 环境反射假定入射光均匀地从周围环境入射至 景物表面并等量地向各个方向反射出去 漫反射与镜面反射 漫反射分量和镜面反射分量则表示特定光源照 射在景物表面上产生的反射光 要计算某一点的光亮度,就要分别求出这三个分量。 要计算某一点的光亮度,就要分别求出这三个分量。
pname 参数名 GL_AMBIENT GL_DIFFUSE GL_SPECULAR GL_POSITION
缺省值 (0.0, 0.0, 0.0, 1.0) (1.0, 1.0, 1.0, 1.0) (1.0,1.0,1.0,1.0) (0.0,0.0,1.0,0.0)
说明 RGBA模式下环境光 RGBA模式下漫反射光 RGBA模式下镜面光 光源位置齐次坐标 (x,y,z,w) 点光源聚光方向矢量 (x,y,z) 点光源聚光指数 点光源聚光截止角 常数衰减因子 线性衰减因子 平方衰减因子
镜面反射光为朝一定方向的反射光 镜面反射光为朝一定方向的反射光
N
入射光 反射光 入射光
N
n大
反射光
n小
采用余弦函数的幂次来模拟一般光滑表面的镜面反射光的空 间分布。 间分布。 n = k s I ps cos θ Is Is 为观察者接受到的镜面反射光亮度 Ips为入射光的光亮度 ks为镜面反射系数 与材料性质和入射光波长有关 为镜面反射系数(与材料性质和入射光波长有关 与材料性质和入射光波长有关) n为镜面反射光的会聚指数 与物体表面光滑度有关 为镜面反射光的会聚指数 与物体表面光滑度有关) 为镜面反射光的会聚指数(与物体表面光滑度有关 θ为镜面反射方向和视线方向的夹角,介于 o到90o之间 为镜面反射方向和视线方向的夹角, 为镜面反射方向和视线方向的夹角 介于0
(0.0, 0.0, 0.0, 1.0) 0.0 (0.0, 0.0, 0.0, 1.0)
材料的镜面反射光颜色 镜面指数(光亮度1128) 材料的辐射光颜色 材料的环境光、漫反射 光和镜面光颜色
GL_COLOR_INDEXES (0, 1, 1)
材质
• 对于材质,R、G、B值为材质对光的 、G、B成分的 对于材质, 、 、 值为材质对光的 值为材质对光的R、 、 成分的 反射率。比如,一种材质的R= 反射率。比如,一种材质的 =1.0、G=0.5、B= 、 = 、 = 0.0,则材质反射全部的红色成分,一半的绿色成分, ,则材质反射全部的红色成分,一半的绿色成分, 不反射蓝色成分。也就是说, 不反射蓝色成分。也就是说,若OpenGL的光源颜色 的光源颜色 ),材质颜色为 为(LR、LG、LB),材质颜色为(MR、MG、MB), 、 、 ),材质颜色为( 、 、 ), 那么,在忽略所有其他反射效果的情况下, 那么,在忽略所有其他反射效果的情况下,最终到达 眼睛的光的颜色为( 眼睛的光的颜色为(LR*MR、LG*MG、LB*MB)。 、 、 )。
单位法线 • 启用法线规范化,通知OpenGL自动将法线转换为单 启用法线规范化,通知 自动将法线转换为单 位法线。但效率会很低。 位法线。但效率会很低。 glEnable(GL_NORMALIZE); • 也可利用 也可利用glTools函数库里的: 函数库里的: 函数库里的 Void gltNormalizeVector(GLTVector VNormal); 可以接受任何法线向量为参数,对它进行单位化。 可以接受任何法线向量为参数,对它进行单位化。 • 用平面三个点来确定该平面的法线 Void gltGetNormalVector(GLTVector vP1,GLTvector vP2, GLTvector vP3,GLTVector vNormal); 如:GLTVector vPoints[3]={{ },{ },{ }}; gltGetNormalVector(vPoints[0], vPoints[1], vPoints[2],vNormal); glNormal3fv(VNormal);

颜色
• 颜色表模式(Color_Index Mode) • 可以调用glIndex*()函数从颜色表中选取当前 颜色。其函数形式为: • void glIndex{sifd}(TYPE c); • void glIndex{sifd}v(TYPE *c); 设置当前颜色索引值,即调色板号。若值大于颜 色位面数时则取模。
漫反射分量表示特定点光源在景物表面某一点的反射光中那 些向空间各方向均匀反射出去的光 表面对入射光在各个方向上都有强度相同的反射,因而无论 表面对入射光在各个方向上都有强度相同的反射,因而无论 从哪个角度观察,这一点的光亮度都是相同的。 从哪个角度观察,这一点的光亮度都是相同的。 对于一个漫反射体,表面的反射光亮度和光源入射角(入 对于一个漫反射体, 射光线和表面法向量的夹角)的余弦成正比,即 Ipd 射光线和表面法向量的夹角)的余弦成正比,
颜色
• 在RGBA模式下,可以用glColor*()来定义当前颜色。 其函数形式为: • void glColor3{b s i f d ub us ui}(TYPE r,TYPE g,TYPE b); • void glColor4{b s i f d ub us ui}(TYPE r,TYPE g,TYPE b,TYPE a); • void glColor3{b s i f d ub us ui}v(TYPE *v); • void glColor4{b s i f d ub us ui}v(TYPE *v);
以上列出的GL_DIFFUSE和GL_SPECULAR的缺省值只能用于 和 以上列出的 的缺省值只能用于 GL_LIGHT0,其他几个光源的 ,其他几个光源的GL_DIFFUSE和GL_SPECULAR 和 缺省值为(0.0,0.0,0.0,1.0)。 缺省值为 。
启动光照
• 使所有光源有效 glEnable(GL_LIGHTING); 若使光照无效, 若使光照无效,则调用 gDisable(GL_LIGHTING)。 。 只开一个光源或关闭一个则 glEnable(GL_LIGHT0); gDisable(GL_LIGHT0)。 。
创建具有某种特性的光源。 创建具有某种特性的光源。其中第一个参数light指定所 创建的光源号, 创建的光源号,如GL_LIGHT0、 、
GL_LIGHT1、...、GL_LIGHT7。第二个参数 、 、 。 pname指定光源特性,这个参数的辅助信息见下 指定光源特性, 指定光源特性 表所示。最后一个参数设置相应的光源特性值。 表所示。最后一个参数设置相应的光源特性值。
I=I环+I漫+I镜
简单光照明模型--环境反射光 简单光照明模型--环境反射光 --
环境反射光是由环境光在邻近物体上经过多次反射所产生的。 环境反射光是由环境光在邻近物体上经过多次反射所产生的。 光是来自四面八方的。 光是来自四面八方的。这种光产生的效应简化为它在各个方 向都有均匀的光强度 向都有均匀的光强度Ie,某一个可见物体在仅有环境光照明 的条件下,其上各点明暗程度完全一样。 的条件下,其上各点明暗程度完全一样。 环境反射光亮度可表示为: 环境反射光亮度可表示为:
材质
• OpenGL用材料对光的红、绿、蓝三原色的反射率来近 用材料对光的红、 用材料对光的红 似定义材料的颜色。 似定义材料的颜色。对环境光与漫反射光的反射程度决 定了材料的颜色, 定了材料的颜色,对镜面反射光的反射率通常是白色或 灰色(即对镜面反射光中红、 蓝的反射率相同)。 灰色(即对镜面反射光中红、绿、蓝的反射率相同)。 • void glMaterial{if}[v](GLenum face,GLenum pname,TYPE param) face可以是 可以是GL_FRONT、GL_BACK、 可以是 、 、 GL_FRONT_AND_BACK,它表明当前材质应该应用 , 到物体的哪一个面上; 说明一个特定的材质; 到物体的哪一个面上;pname说明一个特定的材质; 说明一个特定的材质 param是材质的具体数值,若函数为向量形式,则 是材质的具体数值, 是材质的具体数值 若函数为向量形式, param是一组值的指针,反之为参数值本身。 是一组值的指针, 是一组值的指针 反之为参数值本身。
I d = kd I pd cos i
Id为物体表面漫反射光的光亮度 Ipd为光源垂直入射时反射光的光 亮度,i为光源入射角 亮度 为光源入射角 kd 为漫射系数 , 决定于表面材料 为漫射系数, 及入射光的波长(0≤kd≤1) 及入射光的波长
Ipdcosi i
B C A
简单光照明模型--镜面反射光 简单光照明模型--镜面反射光 --
法线
• glBegin(GL_QUADS); glNormal3f(0.0f, 0.0f, 1.0f); glVertex3f(-x,-y, z); glVertex3f( x,-y, z); glVertex3f( x, y, z); glVertex3f(-x, y, z); • glEnd(); 对于一个多边形, 对于一个多边形,如果把它看作是根据法线向量所指向 方向进行绘制, 的 方向进行绘制,那么这几个顶点就是逆时针方向围绕 缺省情况下, 缺省情况下,如果一个多边形的各个顶点以逆时针的风 格出现,那么它就被定义为这个多边形的正面。 格出现,那么它就被定义为这个多边形的正面。
相关文档
最新文档