java3D与计算机图形学期末复习 第五章 坐标变换与基本形体
图片与定义摘自《Java 3D 与计算机三维动态图形网络编程设计》
重点复习:
1、同一平面内点与多边形的包含判定
(1)凸多边形的叉积判断法
(补充一个知识点:
叉积的一个重要性质是可以通过它的符号判断两矢量相互之间的顺逆时针关系:
若 P × Q > 0 , 则P在Q的顺时针方向
若 P × Q < 0 , 则P在Q的逆时针方向
若 P × Q = 0 , 则P与Q共线,但可能同向也可能反向)
从给定的一个点向多边形的各个顶点做向量。按顶点顺序逐个计算每相邻两向量之间的叉积。如果所有的叉积符号相同,说明点在多边形内;反之,则在多边形外。
(2)夹角之和检验法
从给定的一个点向多边形的各个顶点做向量。按顶点顺序逐个计算每相邻两向量之间的夹角。如果所有的夹角符号相同,说明点在多边形内;反之,则在多边形外。
(3)交点计数检验法
从要判断的点向右做一条射线,求出射线与多边形交点的个数。如果交点的个数是奇数,则点在多边形内;反之,则在多边形外。
2、局部光照明计算模型
在给定光源(包括一个或多个光源)光源的类型、颜色以及几何体表面的各种特性参数后,不考虑场景中其他几何体的影响,通过某种计算算法计算几何体表面上各点的光颜色与强度,将这种算法称为局部光照明计算模型。
局部光照明计算模型只考虑物体表面对直射光、环境光的反射、散射与透射。
(注:以下这几种算法的原理和计算方法一定要看,考试要考)
3、Gouraud算法
基本过程:
(1)先计算出各个小多边形及其顶点的单位法线向量,公共顶点处用合成向量。
(2)在给定光源与几何体表面各特性参数基础上,用局部光照计算模型计算每个顶点的光颜色、光强度值。
(3)由两顶点的光颜色、光强度值,通过线性插值计算出两个顶点之间的边上的各点的光颜色、光强度值。
(4)在扫描线填色算法中,每条水平扫描线与多边形的边相交,都有一对交点,通过线性插值求出这些交点的光颜色与光强度值,再由这些交点的光颜色、光强度值,通过线性插值计算出该水平扫描线上位于多边形内部的各像素点的光颜色、光强度值。通过水平扫描线从上向下的移动,也就相应地求出了小多边形平面上所有点的光颜色、光强度值。
优点:计算量小
缺点:高光区域有时会出现异常;当对曲面用不同的多边形进行分割时会产生不同的显示效果;Gouraud明暗处理会造成表面上出现过亮或过暗的条纹,称为马赫带(Mach _band)效应。
4、Phong算法
基本过程:
(1)计算平面多边形的单位法矢量。
(2)计算多边形各顶点处的单位法矢量,进而计算各公共顶点的合成向量。
(3)通过对多边形各顶点的单位法向量进行双线性插值,计算多边形内部点的单位法向量。
(4)通过平面多边形内部各点处的单位法向量,利用局部光照明模型计算多边形内部各点光颜色,光强度值。
5、Whitted整体关照模型
为了增加三维图形显示的真实性,除了考虑各种类型光源对几何体表面的直接照射外,还必须考虑当前场景中来自于其他几何体的漫射光、镜面反射光和透射光对该几何体表面的照射,这样就会产生比较真实的照明效果,如阴影与透明效果等。将这种光照明计算模型称为整体光照明模型。
Whitted光照明模型是一种整体光照明模型,,它能很好地模拟光能在光滑几何体表面之间的镜面反射和通过透明体产生的规则透射。
6、光线追踪算法(Raytracing)
光线跟踪算法是一种在由多光源与多个几何体组成的场景中对几何体进行消隐与整体光强度计算的算法。
光线跟踪算法沿着到达视点的光线的反方向进行跟踪,经过屏幕上每一个像素点,找出所跟踪的光线与几何体的交点,在该交点处分别沿反射方向与折射方向再进行跟踪,找出影响该点光强度的所有光源,通过迭代、累加计算跟踪点的光颜色与光强度。光强度计算包括直接照射到几何体表面上一点的漫射光源、直射光源、透射光源,还包括来自反射跟踪方向的其他几何体传来的光强与沿着透射跟踪方向的其他几何体传来的光强。
7、Switch类
意为切换,Switch类可以控制哪些节点将被显示。
8、OrderedGroup类
一般情况下,在一个场景图中三维形体的显示顺序是不确定的,这种显示顺序依赖于当时程序的执行效率。但是,OrderedGroup 类可确保在一个场景图中的三维形体的显示顺序。
9、SharedGroup类
SharedGroup类提供了一种可对场景图中的子图进行链接(Link)复制的能力。这样,在生成复杂场景时,就可以通过Link叶子节点来共享与复制场景中的子图。SharedGroup节点允许叶子节点对其子图通过链接(由Link叶子节点实现)方式共享。
10、Link类
Link 叶子节点允许一个应用程序引用一个以SharedGroup为根的共享子图。任何数量的Link 叶子节点都能引用同一个SharedGroup节点。