计算机图形学 1 —— 颜色模型图像基本知识,Phong光照模型
色彩视觉
什么是色彩?
色彩是对不同波长的光的能量的感知:
- 不同波长的电磁波(electromagnetic waves) 对应不同的色彩;
- 对于人眼能感知的光(可见光),其波长范围为 380nm到760nm之间。
光的谱分布:
- 光 是由不同波长的电磁波按照某种能量分布混合叠加而成。
例如,“白光”则是由所有可见波长的电磁波以相等的强度混合得到。
- 谱分布:光在各个可见波长的分量的强度分布函数,称为光的谱分布。
和光类似,色彩也可以用谱分布函数来进行描述,但是有些情况下同一种颜色,可能对多个谱分布,即 不同的谱分布函数对应同一种色彩,就是异谱同色现象。
色彩空间:
在所有用于表示色彩的各个色彩空间中,RGB红绿蓝 色彩空间 在计算机图形学中,使用最为广泛:
色彩使用三通道RGB向量(r,g,b)来表示;在RGB的色彩空间中,有部分的常用操作可以通过对RGB三通道分别处理而进行;通常可以将r,g,b 分别规整化为 [0,1] 内的浮点数;当使用8位进行存储时,r,g,b 通常取值为 [0,255] 内的整数。
色彩被表示为三个基本色彩: 红色(R) ,绿色(G),蓝色(B) 的线性组合:
-C = rR+gG +bB r ,g, b 三个系数来表示颜色
为什么选择的是红绿蓝作为基本色彩?
以人类视觉的三刺激理论为基础:人眼的视网膜中有三种锥状视觉细胞,分别对红,绿,蓝三种光最为敏感。
但是,一部分色彩,无法表示成R,G,B光波的正线性组合,这是RGB 色彩空间的缺点。
下图是所有可见光波的RGB 分量图:
正是这种问题,国际标准化组织引入另一种颜色空间做修正。
图像和像素:
图像可以看作成一个二维离散函数 : f(x,y)
函数f 的定义域 是由矩阵排列着的许多格子组成,这些格子被称为像素(pixel)。
函数 f 的取值则为各个像素的色彩:对于彩色的图像,可以是RGB 或者RGBA; 对于灰度图像,f 为单值函数。
图形学的任务是: 确定图像上每个像素的值,主要还是跟像素打交道。
三角网格模型:
光栅图形学,处理的是平面上的多边形。如何在屏幕上显示多边形 —— 裁剪消影等操作。真实感图形学要处理立体的图形。如何用三角形表示复杂的多边形。
图形学目标:从虚拟的三维场景及相机的位置信息中,生成一副二维图像。
- 而三维的场景又以怎样的数据结构来表示呢?
- 简单的球体,长方体可直接用其参数描述。
- 对于复杂模型,则需要使用 参数曲线 和 曲面或者 更一般的网格模型来进行描述。
- 网格模型之中又以三角网格最为常用。因为三角网格表示模型,在计算机硬件处理上更为方便。
- 三角网格 是 由一系列欧式空间中的三维顶点以及连接这些顶点的若干三角面片组成,具体包括:
- 顶点的集合 V = (V1,V2,V3...Vn) 顶点表
- 面片的集合 F = (f1,f2,f3...Fm) 其中F中的每个面片 f i 都是由V中的顶点构成的空间三角形:
fl=(Va1,Vb1,Vc1),f2=(Va2,Vb2,Vc2), ...... 面表,就是一个三元组,有三个顶点编号。顶点表有100万个点,我只需要记住他的序号即可。
模型牛上显示了三角网格的结构,模型龙和人头则是利用三角网格进行绘制的结果。
三角网格处理 —— 法向量 (normal)
- 三角面片的法向量 是 垂直于该三角面片所在平面的非零向量;
- 对于每个三角面片单独而言,其法向量都有两种可能的朝向;
- 法向量的朝向决定了一个三角面片的正面与反面。
- 对于连续可定向的三角网格整体而言,相邻的三角面片需要具备一致的法向量朝向。
—— 法向量 是影响物体上的一点色彩 的一个非常重要的因素,所以要时时刻刻计算表面的法向量。
法向量的计算:
三角网格顶点的法向量可以通过其周围的所有三角面片的法向量通过加权叠加计算:
如何绘制三角网格?
三角网格的简单绘制:
- 三角网格模型的每个顶点需要指定一个色彩属性。
- 基于色彩的绘制,模型表面的每个点的色彩通过其所在的三角面片的顶点色彩插值得到。
- 基于光照的绘制 需要指定一个虚拟光照环境,即要有光源;如何计算光照对色彩的影响是最大的问题(光照模型)。
由上可知,我们得会算 光照下的颜色 ,从网格模型出发,去算,再度插值。
如何基于物理的原理 来算颜色值,这是图形学中非常重要的事情。
光照模型
- 光照模型(lighting model 或 illumination mode) 用于计算光的强度:
-- 局部光 照明(Local Lighting)
关注物体直接受到光源影响所产生的光照效果。不考虑物体间的互相影响。
-- 全局光 照明(Global Lighting )
关注阴影效果;
关注所有不是直接与光源位置相关的光照效果,例如:反射和折射效果,等等...既考虑直接照射,又考虑间接照射。
光照模型的提出,使得我们一下子从 光栅图形学 踏入 真实感图形学,也就是今天大片特性,游戏特效,都是参照光照模型。
关照模型的历史:
1967年,Wylie等人 第一次在显示物体时加入光照效果,认为光的强度与物体到光源的距离成反比关系。1970年,Bouknight 第一次提出了光反射模型:Lambert 漫反射光 + 环境光;1971年,Gouraud 提出漫反射模型 加 插值的思想 : Lambert 漫反射光 + Barycentric插值;1975年,Phong 提出图形学中第一个有影响也是最有影响的光照模型:Phong 模型:漫发射(diffuse light) + 环境光(ambient light) + 高光(specular light)
如何去计算上面提到这些模型呢?还需一些概念。
- 第一个:光的传播:
光的传播遵循反射定律:
入射角等于反射角;入射光线,反射光线,以及反射面的法向量 位于同一平面内 ,即共面的,且反射角等于入射角。
光的传播遵循折射定律(Snell定律):
入射角和反射角的正弦值之比是一个仅仅取决于介质的常熟;
这个常数称为相对折射系数。
- 光线传播的能量方程
光的传播遵循能量守恒定律:
然后我们要一些概念来度量光,光的度量方法:
Phong 光照模型 —— 这是第一个有影响的光照模型,写入所有教科书的光照模型,各种游戏软件等非常常用的光照模型,它是一个数学模型,一个简化的模型。
- Phone模型支持 点光源 和 方向光源 。
- Phone模型是局部光照模型,将局部光的照明效果分解为三个部分:
1. 漫反射效果,2.镜面反射效果,3.环境光效果。
我们先来看第一个漫反射效果:
L是入射光方向;R是反射光;N是物体表面的法向量;V是视点方向;H是L和V夹角的角平分线方向。
这个公式要说明什么呢? 他想说的是:物体表面上的一点,他的颜色或者他的光强,主要取决于什么:主要取决于入射光和法向量的夹角,因为是点积,夹角越大越弱,夹角越小,就越强。所以早上的太阳弱,中午太阳厉害就是这个原理,因为它垂直于你。Kd 这个是反射系数,编程的时候,颜色就是由它来表示出来的。
我们先来看第二个镜面反射效果:
- 对于光滑的平面,依据反射定律,反射光线往往集中在一个小的立体角内,这些反射光,我们称之为镜面反射光;
- 镜面反射光的强度为 :
R是反射光,V是视角。反射光线和视角的夹角,如果这个夹角是0的话,意味着 光直接打到眼睛里了。夹角越小,值越大;夹角越大,值越小。因为物体表面有粗糙度,不是完全光滑的,所以这个光线反射的时候,他不一定严格准确的局限在这个反射出去的光线上,相邻的地方也有反射光的影响。所以我们用这样的一个公式来表示它这个光照模型。
我们先来看第三个环境光效果:
其他的光,都不管它们了,统一用常数 K 来表示 环境光。
以上三项在一起,就是一个完整的Phong模型基本组成。
Phong模型示例:有很多系数,有Kd 有 Ks ,有漫反射和镜面反射2个系数,通过调节这些系数,可以得到不同的光照效果。
软件Demo:
马赫带效应:人的眼睛的视觉系统:对相邻颜色的小微的视觉差异,会本能的做放大处理。是一种主观的边缘的对比效应。当观察两块亮度不同的区域时,边界处亮度对比加强,使轮廓表现得特别明显。
所以,模型是由很多面片表示的,有棱有角会显得非常难看,所以必须给其做插值,做光滑处理。这就是做明暗处理的原因。
色彩插值 和 法向插值 两种做法
- 1971年 Gouraud 的明暗处理 色彩插值 计算方法:
1. 首先计算所有模型顶点的色彩值;
2. 然后对模型上的任何一点,按照其所在的三角面片上顶点的色彩值,按重心插值(Barycentric Interpolation)的结果赋予其色彩值。
- 1973年 Phong的明暗处理 点的法向量进行插值
计算方法:与Gouraud 的明暗处理不同,他的这个明暗处理,不对色彩进行插值,而是对点的法向量进行插值,得到连续的法向量场,再利用该法向量场,逐点使用光照模型进行色彩的计算。从而可能得到了原来光滑曲面的一种近似,所以这种做法是有一定的道理的。
现在的计算机,GPU自动就把上面的这种状态处理了,想看到也不容易。
扫描转换算法(很重要) —— 给一个多边形,怎么求出里面每一个像素,把多边形的边界表示,转化成像素表示。 为什么很重要,它提出了一个思想叫图形相关,整数运算,怎么搞的最快。计算机是一个实践性很强的学科,需要技巧。明暗处理这块,可以通过增量算法来加速。
图形的变换:
视点变换和视点方向:
- 图形学关注于如何将几何模型组成三维场景绘制成 rendering 高质量的彩色图像。
- 变换在图形学中至关重要:通过变换,可以简洁高效地设置和编辑三维场景,光照位置,以及视点方向。
你可以用openGL 重写一段代码,也可以灵活的做一次变换。基于变换的解决方案在图形学中随时都需要用到,使用变换的可以使代码更加灵活,快速,模块化。
类似于 猫变老虎 的效果 就是 Morphing ; 物体上一些尺寸上的变化Deformation。
计算机图形学 1 —— 颜色模型图像基本知识,Phong光照模型相关推荐
- 计算机图形学中需要掌握的数学基础知识有哪些?
计算机图形学中使用了大量数学知识,尤其是矩阵和线性代数.虽然我们倾向于认为3D图形编程是紧跟最新技术的领域之一(它在很多方面确实是),但它用到的很多技术实际上可以追溯到上百年前,其中一些甚至是由文艺复 ...
- 计算机基础:图形、图像相关知识笔记
1.图形.图像的基础知识 图形:由称为矢量的数学对象所定义的直线和曲线等组成. 图像:也称为栅格图像,由点阵图或位图图像.用像素来代表图像.每一个像素都被分配一个特点的位置和颜色值. 图形和图像之间在 ...
- 真彩色图像数据量 计算_计算机基础:图形、图像相关知识笔记
1.图形.图像的基础知识 图形:由称为矢量的数学对象所定义的直线和曲线等组成. 图像:也称为栅格图像,由点阵图或位图图像.用像素来代表图像.每一个像素都被分配一个特点的位置和颜色值. 图形和图像之间在 ...
- 计算机图形学-3D观察与图像渲染流水线-投影全解析
本文目标: 理清OpenGL在3D观察的整个流程. 清楚各个专业术语的含义. 对坐标系变换的数学有所掌握. 1 三维观察与观察流程 1.1 三维观察与照相观察的对比 三维观察过程与使用照相机拍摄照片类 ...
- 计算机图形学(十二):真实感图形(光照模型、材质模型)
目录 光照模型 第一节 漫反射及具体光源的照明 1. 环境光 2. 漫反射 3. 镜面反射与Phong模型 4. 光的衰减 第二节 多边形网的明暗处理 1. 常数明暗法 2. Gouraud方法 3 ...
- 计算机图形学基础:光栅图像(Fundamentals of computer graphic:Raster Images) 学习笔记
<Fundamentals of computer graphics>4th edition: 3. Raster Images 本文仅仅是本人的学习笔记,由于自己能力有限,可能存在许多错 ...
- 计算机图形学之三维网格模型光顺
实验要求 (1)掌握Obj或off文件的读入: (2)利用给定的数据结构类,建立读入网格模型数据结构: (3)利用OpenGL类库,对三维模型进行绘制,增加光照明等效果: (4)利用OpenGL类库, ...
- 计算机图形及分类的相关知识,“计算机图形学”课程教与学
摘 要:本文针对作者几年来在"计算机图形学"课程教学过程中实际遇到的问题,从教师如何教授知识和学生如何学习知识两个方面进行深入分析和研究,提出了改进课堂教学.实验教学以及学生学习的 ...
- 计算机图形学原理及实践学习笔记第一章
第一章 绪论 1.1 计算机图形学简介 在计算机图形学中,"模型"这个词指的可以是 几何模型 也可以是 数学模型. 几何模型:我们想要呈现在图像中的物体的模型,例如 构建的汽车模型 ...
最新文章
- anaconda与python的idle冲突吗_anaconda(python3)与python2共存
- 【转】校园网综合布线系统设计方案
- JDK14性能管理工具:jstat使用介绍
- Linux系统编程下做一个简易的shell
- linuxShell之一 文件读取 循环与分支
- selenium和PhantomJS的使用
- pandas to_sql
- 再谈Bellman-Ford
- C#两路list数组归并去重
- 数据库系统概论 思维导图
- FME转换器参考手册目录汉化索引
- 常见的一些反爬虫策略(上篇)-Java网络爬虫系统性学习与实战系列(9)
- oracle远程导入数据库
- [AtCoder ARC093F]Dark Horse
- 浩辰cad2019破解补丁|浩辰cad2019无限试用破解补丁下载(附浩辰cad2019激活工具/无需激活码)
- springboot初次使用template可能遇到的问题
- 独家对话行癫:最详解密阿里云顶层设计和底层逻辑
- 【微信小程序】断点调试一
- Android通过Canvas手绘一个折线图
- Caused by: java.lang.NumberFormatException: For input string: “?2130969371“
热门文章
- 一个创业的故事——Philippe Kahn 和Anders Hejlsberg
- 多种密码破解工具medusa-1.5.tar.gz
- python自动裁剪图片_自动裁剪与Python / PIL的图像(Automatically cropping an ima
- 为什么选择快速开发?
- Uipath如何截图粘贴到Excel
- 新一代电商app移动框架_用于下一代弹性移动应用程序的安全,可靠的通信
- 租赁补贴,2022年武汉市工业厂房租赁费补贴申报奖励标准以及申报条件流程
- Hyperion 用户目录更改
- SKIL/工作流程/实验中的TensorFlow
- 电脑客户端如何同时登陆多个微信账号