opengl计算机三维图形程序设计-颜色与光照

合集下载

OpenGL完全教程 第五章 颜色、光照和材质

OpenGL完全教程 第五章 颜色、光照和材质

OpenGL完全教程 第五章 颜色、光照和材质作者:何咏 日期:2006-2-3 20:53:31 点击:4493如需转载本文,请声明作者及出处。

第五章 颜色、光照和材质在第四章的示例程序中,我们使用了光照效果,这使得图形更加逼真。

本章就要具体讲解OpenGL 中的色彩调配和光照系统。

学习本章,你将了解:•在OpenGL中设置物体的颜色•OpenGL中光源的种类及创建方法•为顶点指定法线•设置物体的材质5.1 OpenGL中的颜色在未使用光照系统的前提下,我们可以直接为图元指定颜色。

在传入顶点之前调用glColor函数,就可以为即将指定的顶点设置颜色。

例如:glBegin(GL_TRIANGLES);glColor3ub(255,0,0);glVertex3f(0,1,0);glVertex3f(1,0,1);glVertex3f(1,1,0);glEnd;将绘制一个红色的三角形。

在绘制图元时,OpenGL会自动将图元的第一个顶点的颜色作为整个图元的颜色。

但有些时候,你可能希望为一个图元的各个顶点指定不同的颜色,使它们自然过度,就像图5.1-1那样。

图5.1-1这时,我们需要在绘制图元之前调用如下函数:glShadeModel(GL_SMOOTH);让OpenGL对顶点之间的颜色进行平滑过度。

你可以把参数改为GL_FLAT,禁止OpenGL对顶点进行平滑过度。

5.2 OpenGL 光照模效果的原理OpenGL的光照模型是用来模拟现实生活中的光照的。

你可以使用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光照

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

第六讲_OpenGL编程技术-光照

第六讲_OpenGL编程技术-光照

6.6.1、光照模型 ◇ 介绍例程:ep_7_1_光照球
6.6.1、光照模型 ◇ OpenGL光组成 在OpenGL简单光照模型中的几种光分为:辐射光 (Emitted Light)、环境光(Ambient Light)、漫 射光(Diffuse Light)、镜面光(Specular Light)。 辐射光是最简单的一种光,它直接从物体发出并 且不受任何光源影响。 环境光是由光源发出经环境多次散射而无法确定 其方向的光,即似乎来自所有方向。一般说来,房间 里的环境光成分要多些,户外的相反要少得多,因为 大部分光按相同方向照射,而且在户外很少有其他物 体反射的光。当环境光照到曲面上时,它在各个方向 上均等地发散(类似于无影灯光)。
光学反射模型
通常物体表面的反射光可以认为包含三个分量:对环境光的 反射、对特定光源的漫反射和镜面反射。
(a) 漫反射
(b) 理想镜面反射
(c) 一般光滑表面的镜面反射
(d) 理想镜面反射方向 与视线方向的夹角
图6-6 光学反射模型
环境光的反射: 环境光(ambient light)来自周围环境(如墙面)散射的光,在 空间近似均匀分布,入射至物体表面后向空间各个方向均匀 反射出去。物体对环境光的反射分量表示: 其中Ia是入射的环境光亮度,Ka是环境光漫反射系数,它与物 体表面性质有关。如果简单光照模型中仅考虑环境光的反射分 量,则物体表面的亮度是一个恒定值,没有明暗的自然过渡。 散射(diffuse reflection): 散射分量表示特定光源在物体表面的反射光中那些向空间 各个方向均匀反射出去的光。兰伯特(Lambert)余弦定律指出: 当点光源照射到一个散射体时,其表面反射光亮度和光源入射 角(入射光线和表面法矢量的夹角)的余弦成正比,即 I K d I l cos( ) 0 0 Kd 1

基于OpenGL的三维动画效果设计与实现

基于OpenGL的三维动画效果设计与实现

基于OpenGL的三维动画效果设计与实现OpenGL是一种跨平台的图形库,广泛应用于计算机图形学、游戏开发和虚拟现实等领域。

在OpenGL的基础上,可以实现各种精美的三维动画效果,如逼真的光影效果、自然的物理模拟和华丽的特效等。

本文将介绍如何基于OpenGL实现三维动画效果。

一、OpenGL简介OpenGL(Open Graphics Library)是一种跨平台的图形库,可以用于开发高性能的3D图形应用程序。

它提供了一套标准的API,程序员可以使用OpenGL库里的函数来绘制各种图形,包括点、线、三角形等。

OpenGL的主要优点是跨平台,程序可以在不同的操作系统和硬件上运行,并且不需要对程序做太多的修改。

二、OpenGL开发环境在开始OpenGL开发之前,需要配置正确的开发环境。

OpenGL的开发环境包括编程语言、OpenGL库、窗口系统和OpenGL的开发工具等。

编程语言:OpenGL支持多种编程语言,如C/C++、Java、Python等。

其中,C/C++是最常用的开发语言,因为它可以直接调用OpenGL的函数库。

OpenGL库:OpenGL库是开发OpenGL程序时必须的工具,它包含了OpenGL 的所有函数和常量。

窗口系统:OpenGL需要一个可视化的窗口系统,用来显示图形界面。

常用的窗口系统有Windows、Linux和MacOS等。

开发工具:开发OpenGL程序需要使用各种IDE和编辑器,如Visual Studio、CodeBlocks和Eclipse等。

三、实现三维动画效果的基础知识1.三维坐标系OpenGL使用右手坐标系表示三维坐标系,其中x轴向右,y轴向上,z轴向外。

2.矩阵变换OpenGL可以通过矩阵变换来实现图形的移动、旋转、缩放等操作。

常用的变换矩阵包括平移矩阵、旋转矩阵和缩放矩阵。

3.光照模型光照模型是OpenGL中重要的概念之一,它用来计算光源对物体的影响。

其中,主要包括光源的位置、光线的颜色和强度等因素。

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. 实践案例:结合实际项目,运用光照模型为三维场景添加光照效果,培养学生的实际操作能力。

OPenGL--光照

OPenGL--光照

从生理学的角度上讲,眼睛之所以看见各种物体,是因为光线直接或间接的从它们那里到达了眼睛。

人类对于光线强弱的变化的反应,比对于颜色变化的反应来得灵敏。

因此对于人类而言,光线很大程度上表现了物体的立体感。

请看图1,图中绘制了两个大小相同的白色球体。

其中右边的一个是没有使用任何光照效果的,它看起来就像是一个二维的圆盘,没有立体的感觉。

左边的一个是使用了简单的光照效果的,我们通过光照的层次,很容易的认为它是一个三维的物体。

图1OpenGL对于光照效果提供了直接的支持,只需要调用某些函数,便可以实现简单的光照效果。

但是在这之前,我们有必要了解一些基础知识。

一、建立光照模型在现实生活中,某些物体本身就会发光,例如太阳、电灯等,而其它物体虽然不会发光,但可以反射来自其它物体的光。

这些光通过各种方式传播,最后进入我们的眼睛——于是一幅画面就在我们的眼中形成了。

就目前的计算机而言,要准确模拟各种光线的传播,这是无法做到的事情。

比如一个四面都是粗糙墙壁的房间,一盏电灯所发出的光线在很短的时间内就会经过非常多次的反射,最终几乎布满了房间的每一个角落,这一过程即使使用目前运算速度最快的计算机,也无法精确模拟。

不过,我们并不需要精确的模拟各种光线,只需要找到一种近似的计算方式,使它的最终结果让我们的眼睛认为它是真实的,这就可以了。

OpenGL在处理光照时采用这样一种近似:把光照系统分为三部分,分别是光源、材质和光照环境。

光源就是光的来源,可以是前面所说的太阳或者电灯等。

材质是指接受光照的各种物体的表面,由于物体如何反射光线只由物体表面决定(OpenGL中没有考虑光的折射),材质特点就决定了物体反射光线的特点。

光照环境是指一些额外的参数,它们将影响最终的光照画面,比如一些光线经过多次反射后,已经无法分清它究竟是由哪个光源发出,这时,指定一个“环境亮度”参数,可以使最后形成的画面更接近于真实情况。

在物理学中,光线如果射入理想的光滑平面,则反射后的光线是很规则的(这样的反射称为镜面反射)。

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三维图形编程基础
2009年3月又公布了升级版新规范OpenGL 3.1,也是这套跨平台免费API有史以来的第九次更新。 OpenGL 3.1将此前引入的OpenGL着色语言“GLSL”从1.30版升级到了1.40版,通过改进程序增强 了对最新可编程图形硬件的访问,还有更高效的顶点处理、扩展的纹理功能、更弹性的缓冲管 理等等。
rgba模式颜色索引模式colorindexrgba模式为每个像素点指定颜色可提供丰富多彩的色彩效果其中a是混合因子用于各种特效处理对于显示能力不足的硬件可采用颜色索引模式系统提供一个颜色表通常有256或4096种颜色各像素点通过索引颜色表项得到颜色值opengl基本功能711光照和材质在现实生活中物体因为受光照射和自身对各种频率光波的吸收与反射能力的不同而呈现各自不同的颜色opengl的实现假设光仅仅由三原色rgb组成物体对三原色分别有不同的反射率即材质利用物理光学模型计算物体实际的颜色opengl基本功能811纹理映射texturemapping由于物体采用图元primitive表示点线多边形绘制时有效渲染的地方也仅仅是这些点线多边形其它位置的颜色值则通过插值实现这就造成了物体绘制的不真实纹理映射通过贴图的方式为物体表面贴上真实的色彩花纹这些被指定贴上的图片就称作纹理textureopengl提供了完善的纹理映射机制opengl基本功能911反走样antialiasing线段在计算机中是通过一系列的像素来近似逼近的而这些像素实际上是一个个的小正方形因此线段常常呈锯齿状这被称为走样aliasingopengl通过计算线段对各个像素的不同覆盖率来实现反走样antialiasingopengl基本功能1011图像特效融合blending为了使三维图形更加具有真实感经常需要处理半透明或透明的物体图像这就需要用到融合技雾fog正如自然界中存在烟雾一样opengl提供了fog的基本操作来达到对场景进行雾化的效果opengl基本功能1111双缓存doublebuffering动画出色的动画效果是opengl的一大特色opengl通过双缓存实现动画前台缓存显示当前帧后台缓存同时进行后续帧的场景计算生成画面opengl语法特点15所有opengl函数都使用gl作为前缀如glclearcolor所有opengl常量都使用gl开头并且所有字母都大写如glfalseopengl语法特点25opengl函数后缀说明后缀中的阿拉伯数字一般表示参数的数目如glvertex2i13表示该函数有两个参数阿拉伯数字后的小写字符一个或多个表示参数类型如glvertex2i13表示该函数的两个参数都为32位整数integer表示参数类型的后缀定义见下表opengl语法特点35opengl函数后缀说明opengl语法特点45opengl函数后缀说明有

Opengl实验报告及源代码实验六 颜色与光照

Opengl实验报告及源代码实验六  颜色与光照

南昌大学实验报告学生姓名:学号:专业班级:实验类型:□验证□综合□设计□创新实验日期:2018.11 实验成绩:一、实验名称实验六颜色与光照二、实验内容1.指定几何模型的绘制颜色,使用平滑着色模式用多种不同的颜色绘制多边形;2.通过定义光源、材质和光照模型属性渲染物体的光照效果;3.创建一个3D虚拟场景,利用定向光、点光源和聚光灯等不同光源实现3D场景的光照效果。

三、实验目的1.了解RGBA颜色的实现原理,掌握利用Flat和Smooth着色模式来绘制不同颜色的物体的方法;2.掌握OpenGL光照模型,理解光源、材质和光照模型如何综合影响物体的光照效果。

3.掌握定向光、点光源和聚光灯的不同属性及三种光源光照效果的计算方法。

四、实验步骤1.建立立方体几何模型。

定义立方体顶点的位置坐标和纹理坐标,设置不同立方体在世界坐标系中的位置:// Set up vertex data (and buffer(s)) and attribute pointersGLfloat vertices[] = {// Positions // Normals // Texture Coords-0.5f, -0.5f, -0.5f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f,0.5f, -0.5f, -0.5f, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f,0.5f, 0.5f, -0.5f, 0.0f, 0.0f, -1.0f, 1.0f, 1.0f,0.5f, 0.5f, -0.5f, 0.0f, 0.0f, -1.0f, 1.0f, 1.0f,-0.5f, 0.5f, -0.5f, 0.0f, 0.0f, -1.0f, 0.0f, 1.0f,-0.5f, -0.5f, -0.5f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f,-0.5f, -0.5f, 0.5f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f,0.5f, -0.5f, 0.5f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f,0.5f, 0.5f, 0.5f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f,0.5f, 0.5f, 0.5f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f,-0.5f, 0.5f, 0.5f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, -0.5f, -0.5f, 0.5f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f,-0.5f, 0.5f, 0.5f, -1.0f, 0.0f, 0.0f, 1.0f, 0.0f, -0.5f, 0.5f, -0.5f, -1.0f, 0.0f, 0.0f, 1.0f, 1.0f, -0.5f, -0.5f, -0.5f, -1.0f, 0.0f, 0.0f, 0.0f, 1.0f, -0.5f, -0.5f, -0.5f, -1.0f, 0.0f, 0.0f, 0.0f, 1.0f, -0.5f, -0.5f, 0.5f, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f, -0.5f, 0.5f, 0.5f, -1.0f, 0.0f, 0.0f, 1.0f, 0.0f,0.5f, 0.5f, 0.5f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f,0.5f, 0.5f, -0.5f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f,0.5f, -0.5f, -0.5f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f,0.5f, -0.5f, -0.5f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f,0.5f, -0.5f, 0.5f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f,0.5f, 0.5f, 0.5f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f,-0.5f, -0.5f, -0.5f, 0.0f, -1.0f, 0.0f, 0.0f, 1.0f,0.5f, -0.5f, -0.5f, 0.0f, -1.0f, 0.0f, 1.0f, 1.0f,0.5f, -0.5f, 0.5f, 0.0f, -1.0f, 0.0f, 1.0f, 0.0f,0.5f, -0.5f, 0.5f, 0.0f, -1.0f, 0.0f, 1.0f, 0.0f,-0.5f, -0.5f, 0.5f, 0.0f, -1.0f, 0.0f, 0.0f, 0.0f, -0.5f, -0.5f, -0.5f, 0.0f, -1.0f, 0.0f, 0.0f, 1.0f,-0.5f, 0.5f, -0.5f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f,0.5f, 0.5f, -0.5f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f,0.5f, 0.5f, 0.5f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f,0.5f, 0.5f, 0.5f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f,-0.5f, 0.5f, 0.5f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, -0.5f, 0.5f, -0.5f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f };// Positions all containersglm::vec3 cubePositions[] = {glm::vec3(0.0f, 0.0f, 0.0f),glm::vec3(2.0f, 5.0f, -15.0f),glm::vec3(-1.5f, -2.2f, -2.5f),glm::vec3(-3.8f, -2.0f, -12.3f),glm::vec3(2.4f, -0.4f, -3.5f),glm::vec3(-1.7f, 3.0f, -7.5f),glm::vec3(1.3f, -2.0f, -2.5f),glm::vec3(1.5f, 2.0f, -2.5f),glm::vec3(1.5f, 0.2f, -1.5f),glm::vec3(-1.3f, 1.0f, -1.5f)};2.加载立方体模型的顶点数据。

OPENGL-第4章颜色光照和材质

OPENGL-第4章颜色光照和材质

例子:litjet,漫反射和环境光,设置光源
设置某个光源:种类、分量、位置
GLfloat amb[]= {0.3,0.3,0.3,1.0}; GLfloat dif[]= {0.7,0.7,0.7,1.0}; GLfloat pos[]= {-50,50,100,1.0};
1:光源在该矢量方向 的无穷远处 0:在指定的位置
glColor3f(.75,.75,.75);
glBeigin(GL_TRIANGLE); … 方法2的优点是:可以直接用颜色设定 glEnd();
显示的颜色,符合习惯
例子:sphere1
直接用颜色参数
Opengl编程过程总结
• 初始化
–…
• 对每个场景:
– 建立相机 …
• 对每个光源 …
– glLight(...) – 设定光源参数
• 或:
• I(r,g,b)=Ia(r,g,b) Ka(r,g,b) • +Ip(r,g b)[Kd(r,g,b) (L • N)+Ks (R•V)n ]
光源
• 2种光源:
– 环境光Ia :光来自各个方向 – 某个光源Ip :指定位置的光:
• 反射光:
– 环境光:光来自各个方向,以各方向反射出去 – 漫反射光::光来自某个方向,均匀反射出去 – 镜面反射光:光来自某个方向,以特定方向反射 出去
glBeigin(GL_TRIANGLE);
… glEnd();
例子:sphere
物体的哪个面,光 反射类型 光反射的成分
材质函数-方法2
• 颜色跟踪法
用glColor设 置材质属性
glEnable(GL_COLOR_MATERIAL); //激活颜色属性

实验七 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 4颜色及3D图形绘制

OpenGL 4颜色及3D图形绘制
ຫໍສະໝຸດ 4.4 顶点数组
启用数组 glEnableClientState(GL_VERTEX_ARRAY); 将准备好的数组告知程序,使用glVertexPointer(),原 型如下: void glVertexPointer( GLint size, //每个顶点占用的数组元素数量 GLenum type, //数组元素的数据类型 GLsizei stride, //元素之间的间隔,一般系统为0 const GLvoid *pointer //指向数组的指针 );
正方体为例:
1 2 3 0
GLbyte indexs[] = {0,1,2,3,/**< 顶面索引 * 4,5,6,7,/**< 底面索引 0,3,4,7,/**< 右面索引 2,5,4,3,/**< 前面索引 2,1,6,5,/**< 左面索引 0,7,6,1};/**< 后面索引
6 5 4
7
GLfloat vertices[] = { 1.0f,1.0f,-1.0f, -1.0f,1.0f,-1.0f, -1.0f, 1.0f, 1.0f,1.0f, 1.0f, 1.0f, 1.0f,-1.0f, 1.0f,-1.0f,-1.0f, 1.0f, -1.0f,-1.0f,-1.0f,1.0f,-1.0f,-1.0f}; /** 顶点索引数组 */
第4章
OpenGL颜色及3D图形绘制
1
4.1 OpenGL中的颜色

在OpenGL中,一种颜色用红、绿、蓝成分的混 合来表示,每种成分的值范围是0.0到1.0 。 红色成分 绿色成分 0.0 0.0 1.0 蓝色成分 0.0 0.0 0.0
数据类型 黑 红 绿 黄
0.0 1.0

三维计算机图形的实现——OpenGL

三维计算机图形的实现——OpenGL


不提供描述类似于飞机、汽车、分子形状 等复杂形体的图形操作函数

必须从点、线、面等最基本的图形单元开 始构造自己的三维模型
API之争
API之争

Direct3D vs OpenGL

它们是两套3d渲染API, 而背后支持它们的3d 图形学的精髓是一致的,尽管他们有各自独特 的地方, 但把顶点数据传入显卡的基本功能 是等价的。



幸运的是,SGI发布了自己的OpenGL驱动 程序工具箱。 支持OpenGL的Win98硬件驱动不断出现, 游戏公司开始重新考虑使用OpenGL开发游 戏。 微软已经无法阻止OpenGL在消费者应用程 序领域的进展。微软只能再次同意在Win98 中支持Open开发一个新的名为 Fahrenheit的API,兼取OpenGL和D3D 之长。 后来,Fahrenheit逐渐被M$完全控制, 并放弃开发。(微软的吞并策略) 没有了SGI的支持,OpenGL反而开始焕 发出强大的生命力。今天已经成为实时3D 图形的行业标准。
硝烟四起(7)

现在,Windows平台的3D游戏中,D3D 已经取得了绝对的优势。
受Windows的全力支持;易于开发;开发成本 低,时间短。 继续对OpenGL的打压(Vista)。

战争继续
谢 谢!



M$开始坚持OpenGL应该用于精确和严 格的渲染需要,而D3D则用于实时渲染。 在M$的官方文档里,OpenGL被描述为 类似光线跟踪仪的东西,而不是实时渲染 API。 大胆公开的误导起到了显著的作用。现在 很多人都这么认为的。
硝烟四起(2)

在3D硬件(显卡)并不发达的时候,必须 通过软件渲染来创建3D游戏。(程序与 CPU)人们发现,D3D的软件渲染比 OpenGL快上许多倍。微软称:OpenGL 用于CAD,在没有硬件加速的情况下, OpenGL只能进行简单的静态图形和视觉 应用。

三维图形的光照、贴图及阴影处理(OpenGL)

三维图形的光照、贴图及阴影处理(OpenGL)

三维图形的光照、贴图及阴影处理(OpenGL)实验过程:一、在VS6.0中建立新工程。

1、新建一个Win32 Application的工程。

2、向工程项目添加C++源文件。

3、将OpenGL框架复制到文件中。

4、设置OpenGL窗口标题。

二、场景设置。

1、视线处于一具有地板及前、左、右三面墙壁的空间中。

2、空间顶部中央有一光源。

3、空间中央有一地球仪,不断旋转。

三、建立视口结构及视点属性。

1、在坐标系上建立视图结构。

如图。

2、参数设置。

窗口大小:800*600。

视口大小:800*600。

透视深度:0.1~100。

透视角:60°。

视点位置:(0.0, 2.0, 15.0)。

视线方向:z轴负方向。

视点上方向:y轴正方向。

3、调用函数glViewport()、gluPerspective()和gluLookAt()实现。

四、绘制三维图形。

1、开启深度测试模式。

为防止图形重叠时出现层次混乱,必须对绘制图形进行消隐处理。

直接调用函数glEnable(GL_DEPTH_TEST)开启深度测试。

2、绘制地面与墙壁。

调用OpenGL基本几何元素绘制过程glBegin(GL_QUADS)、glBegin(GL_QUAD_STRIP)绘制四个平面,坐标范围为:x: -10~10, y: -2~20, z: -10~10。

坐标系结构如图。

3、绘制地球仪。

设计函数void DrawEarth()实现地球仪的绘制,分别调用OpenGL球面绘制函数gluSphere()绘制地球形状、柱面绘制函数gluCylinder()绘制地轴两头形状。

(1)参数设置。

球面半径:2。

球面细度:水平100,垂直100。

柱面半径:0.05。

柱面高度:1。

柱面细度:水平50,垂直1。

(2)结构如图。

4、绘制模拟光源。

(1)绘制“灯罩”。

调用glBegin(GL_TRIANGLE_STRIP)绘制4个三角形,构成棱椎形灯罩的4个侧面。

(2)绘制“灯泡”。

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