L7V1:OPENGL 着色:学习动机
1.光照的重要性
1)能够真正显示出形状感知的外观;
2)准确的着色和光照对对传达物体的形状非常重要;
3)着色的方式也十分重要:平面着色(GL_FLAT)、平滑着色(GL_SMOOTH)。
2.颜色
1)RGB模式:分为Red、Green、Blue三个通道
2)RGBA模式:OpenGL中常用此模式,A代表着透明度,每个通道占8bit,总共4字节。
L7V2:OPENGL 着色:Gouraud and Phong Shading
1.Gouraud Shading--标准的平滑着色
1)方法:采用线性插值的方法进行平滑着色;
2)变量说明:I1、I2、I3分别为三个顶点的颜色值,Ip为所要求的颜色值,Ia、Ib为横向扫描线上的交点;
3)公式推导:
a.首先沿Y轴方向插值,得到Ia、Ib:
b.在扫描线上沿X轴方向插值,得到Ip:
4)极端情况:当以上公式分母等于0时,该公式无法进行插值;
解决方法:将模型细化,分割成足够多的三角形。
2.Phong Shading (≠ Phong Illumination)
1)思想:不是对颜色进行插值,而是对法向量进行插值;
2)整个光照计算是逐个像素进行的;
L7V3:OPENGL 着色:光照和着色
1.光源
1)属性:Position、Color;
2)衰减模型:
其中:atten代表光强,d代表距离,kc、kl、kq为常数;
3)常数设置(一般情况下,假设光源不存在能量衰竭):
a)点光源:(kc, kl, kq)=(0, 0, 1);
b)线光源:(kc, kl, kq)=(0, 1, 0);
c)面光源(方向光源):(kc, kl, kq)=(1, 0, 0),此处忽略光强衰减;
2.材质
1)计算法向量 -->进而计算漫反射、镜面反射的反射方向;需要计算出每一个顶点的法向量;
一些由GLUT提供的图形,GLUT已经计算好了法向量;
2)着色模式:
A)环境光(Ambient):即使没有光照射到表面,仍然有光在屋内来回反射,并且产生了漫反射或环境光的感觉;需要设置一个环境光强度,一般来说很小,使不存在黑色的像素;
B)漫反射(Diffuse):对应粗糙不光滑的表面,如墙壁、地板;光均匀地向各个方向反射;
C)镜面反射(Specular):对应于光滑的物体;
D)发射光(Emissive):对应于太阳光等光源,对应于直接看向光源发出的光,而不是反射方向的,在OpenGL中,想看到光源还必须创建光源的几何体;
3.Phong Illumination
1)简单依赖于视点的高光,不基于物理;
2)思想:a)在镜面反射上,选择视线和反射光线之间进行点积,更进一步,给cos项加上指数来控制表面的光泽度,高光到底有多亮;b)取光源、视线之间的角度的一半,求视线和法向的点积,这样会更接近;
3)Phong Formula
4)Blinn-Phong Formula
CS184.1X 计算机图形学导论 第7讲 V1-3 学习笔记
原文:https://www.cnblogs.com/mzyan/p/9641982.html