计算机图形学重点和难点指导 联系客服

发布时间 : 星期三 文章计算机图形学重点和难点指导更新完毕开始阅读504283a1af45b307e87197ae

A?(y1?y0)?(z2?z0)?(z1?z0)?(y1?y0) B?(z1?z0)?(x2?x0)?(x1?x0)?(z2?z0) C?(x1?x0)?(y2?y0)?(y1?y0)?(x2?x0)

将A、B、C和点(x0,y0,z0)代入方程(9-10),得

D??Ax0?By0?Cz0

这样,从式(9-10)可以得到当前像素点(xs,ys)处的深度值

zs(xs,ys)??(Axs?Bys?D)

C这里,如果C=0,说明多边形表面的法矢量与z轴垂直,在xsOsys面内的投影为一条直线,在算法中可以不予以考虑。

如果已知扫描线yi与多边形表面的投影相交,左边界像素(xi,yi)的深度值为zs(xi,yi),其相邻点(xi+1,yi)处的深度值为zs(xi+1,yi)。

zs(xi?1,yi)?式中,??A(xi?1)?Byi?DA?zs(xi,yi)?

CCA为深度步长。 C由上式可以计算出该扫描线上的所有后续像素点的深度值。同一扫描线上的深度增量可由一步加法完成。

对于下一条扫描线y=yi+1,其最左边的像素点坐标的x值为

x(yi?1)?x(yi)?1 k式中k为有效边的斜率。

第10章 真实感图形

重点: RGB颜色模型;简单光照模型;Gouraud明暗处理;物体间光强插值公式;圆柱面的uv化表示;三维纹理的特点;

难点:Phong明暗处理;投射阴影的计算方法;几何纹理的映射原理;双线性内插法;

第10章重点学习指导:

1. RGB颜色模型

RGB颜色模型是显示器的物理模型,无论软件开发中使用何种颜色模型,只要是绘制到显示器上,图像最终是以RGB颜色模型表示的。

G 绿黄 青 白 红 蓝 B

黑 品红

R 图10-2 RGB立方体

RGB颜色模型可以用一个三维单位立方体表示,如图10-2所示。若归一化R、G、B分量到区间[0,1]内,则所定义的颜色位于RGB立方体内部。原点(0, 0, 0)代表黑色,顶点(1,1,1)代表白色。坐标轴上的3个立方体顶点(1, 0, 0)、(0,1, 0)、(0, 0,1)分别表示RGB三原色红、绿、蓝,余下的3个顶点(1,0,1)、(1,1,0)、(0,1,1)则表示三原色的补色品红、黄色、青色。立方体体对角线上的颜色是互补色。在立方体的主对角线上,颜色从黑色原点过渡到白色顶点,各原色的变化率相等,产生了由暗到明的灰度变化,称为灰度色。灰度色就是指纯白、纯黑以及两者中的一系列从黑到白的过渡色,灰度色中不包含任何色调。例如RGB(0,0,0)代表黑色,RGB(1,1,1)代表白色,而RGB(0.5,0.5,0.5)代表其中一个灰度。只有当R、G、B三原色的变化率不同步时,才会出现彩色。在计算机上进行颜色设计时,一般选择RGB宏表示颜色。每个原色分量用一个字节表示,最大强度为255,最小强度为0,各有256级亮度。RGB颜色总共能组合出224=16777216种颜色,通常称为千万色或24位真彩色。

为了对颜色进行融合以产生透明效果,往往还给RGB颜色模型添加一个alpha分量,形成RGBA模型。当两种颜色进行融合时,alpha因子决定了两种颜色为融合操作各贡献了多少颜色成分。在计算机图形学中,颜色多采用浮点数运算,可以定义CRGB类如下。

class CRGB { public: };

CRGB(); virtual ~CRGB();

double red; //红色分量 double green; //绿色分量 double blue; //蓝色分量 double alpha; //alpha分量

public:

将计算所得的颜色分量规范化到浮点数闭区间[0.0,1.0]范围内,使用时将颜色分量直接乘以255,就可以将CRGB类的对象转化为VC++中的RGB宏来表示。这种颜色的表达方式与OpenGL的表达方式一致。 2. 简单光照模型

计算机图形学的光照模型分为局部光照模型和全局光照模型。局部光照模型仅考虑光源

直接照射到物体表面所产生的效果,通常假设物体表面不透明且具有均匀的反射率。局部光照模型能够表现出光源直接投射在漫反射物体表面上所形成的连续明暗色调、镜面高光以及由于物体相互遮挡而形成的阴影。整体光照模型除了考虑上述因素外,还考虑周围环境对物体表面的影响,能模拟镜面的映像、光的折射以及相邻表面之间的色彩辉映等精确的光照效果。关于全局光照模型读者可参考相关书籍。本章只讨论简单的局部光照模型,简称为简单光照模型。

简单光照模型假定:光源为点光源,入射光仅由红、绿、蓝3种不同波长的光组成;物体是非透明物体,物体表面所呈现的颜色仅由反射光决定,不考虑透射光的影响;反射光被细分为漫反射光(diffuse light)和镜面反射光(specular light)两种。简单光照模型只考虑物体对直接光照的反射作用,而物体之间的反射作用,用环境光(ambient light)常量统一表示。点光源是对场景中比物体小得多的光源的最适合的逼近,如灯泡就是一个点光源。简单光照模型分为环境光模型、漫反射光模型和镜面反射光模型,全部属于经验模型。

简单光照模型表示为

I?Ie?Id?Is

式中,I表示物体表面上一点反射到视点的光强;Ie表示环境光光强;Id表示漫反射光光强;Is表示镜面反射光光强。 3. Gouraud明暗处理

法国计算机学家Gouraud(Henri Gouraud,1944~)于1971年提出了双线性光强插值模型,被称为Gouraud明暗处理。它的主要思想是:先计算物体表面多边形各顶点的平均法矢量,然后调用简单光照模型计算各顶点的光强,多边形内部各点的光强则通过对多边形顶点光强的双线性插值得到。

Gouraud明暗处理的优点是算法简单,计算量小,解决了多边形网格之间亮度不连续过渡的问题。但是,Gouraud明暗处理也存在一些缺陷:(1)使用Gouraud双线性光强插值实现相邻多边形之间的光滑过渡时,由于采用了光强插值,高光区域的多边形边界明显,马赫带效应没有完全消除。(2)镜面反射的高光区域只能在最小面片的周围形成,不能在面片的内部形成,导致Gouraud明暗处理生成的高光区域明显大于Phong明暗处理生成的高光区域。

4. 物体间光强插值公式

简单透明模型是一个应用非常广泛的经验模型。该模型简单地将物体A上各像素处的光强与其后的另一个物体B上相应像素处的光强作线性插值以确定物体A上各像素最终显示的光强。

I?(1?t)?IA?t?IB ,t∈〔0,1〕

式中,IA为物体A上某一像素的光强,IB为物体B上相应像素的光强。t为透明度,其值通常取自CRGB类的alpha分量。当t=1.0时,物体A透明,可以完全看到物体B;当t=0.0时,物体A完全不透明,物体B被物体A遮挡。当t的取值位于[0.0,1.0]内时,如t=0.5,物体的最终颜色是物体A的颜色与物体B的颜色的融合,即物体A的颜色与物体B的颜色各占50%。式(10-36)的绘制结果表明:如果物体A是透明的,透过物体A可以看到物体B。

5. 圆柱面的uv化表示

为物体表面添加纹理的技术称为纹理映射(texture mapping)。纹理映射是将纹理空间(texture space)坐标(u,v)映射为物体空间(object space)坐标(x,y,z),再进一步映射为图像空间(screen space)二维物体表面坐标(x,y)的过程。

高度为h、截面半径为r、三维坐标系原点位于底面中心。圆柱面的参数方程为 ?s?x?rco? , 0?y?h, 0???2? ??z?rsin圆柱面侧面展开图是长方形,通过下述线性变换将纹理空间[0,1]×[0,1]与物体空间[0,2

π]×[0,1]等同起来,如图10-44所示。

1v圆柱侧面展开图0u图10-44 圆柱面侧面的uv化

u??y ,v? 2?h

圆柱面的uv化表示为

?u)?x?rcos2(?y?hv ?,0?u?1, 0?v?1 ?z?rsin2(?u)?使用上式可以将一张图片映射到圆柱表面上。

6. 三维纹理的特点

二维纹理对于增强图形的真实感有重要作用,但是,由于纹理是二维的,而物体是三维的,很难在物体表面的连接处做到纹理自然过渡,降低了纹理的真实感。假如在三维物体空间中,物体上的每一个点P(x,y,z)均有一个纹理值t(x,y,z),其值由纹理函数惟一确定。那么对于物体上的空间点,就可以映射到一个定义了纹理函数的三维空间上了。由于三维纹理空间与物体空间维数相同,在进行纹理映射时,只需把场景中的物体变换到纹理空间即可。

第10章难点学习指导:

1. Phong 明暗处理

Phong于1975年提出的双线性法矢插值模型可以有效解决Gouraud明暗处理存在的缺陷,产生正确的高光区域。双线性法矢插值模型也称为Phong明暗处理。Phong明暗处理首先计算多边形网格的每个顶点的平均法矢量,然后使用双线性插值计算多边形内部各点的法矢量。最后才使用多边形网格上各点的法矢量调用简单光照模型计算其所获得的光强。

Phong明暗处理可以产生正确的高光区域。解决了三角形网格之间颜色不连续过渡的问题。但是,Phong明暗处理的主要缺点是既要通过三角形网格各顶点的法矢量来插值计算多边形内各点的法矢量,还要调用光照模型计算其光强,计算时间是Gouraud明暗处理的6~8倍。在OpenGL中只提供了Gouraud明暗处理,未提供Phong明暗处理。