一种由镜面反射产生的3D虚拟场景面焦散效果的绘制方法

著录项
  • CN201010597769.8
  • 20101221
  • CN102074041A
  • 20110525
  • 长春理工大学
  • 陈纯毅;杨华民;蒋振刚;范静涛;丁莹;冯欣;底晓强;韩成;陈占芳;李奇
  • G06T17/00(2006.01)I
  • G06T17/00(2006.01)I

  • 吉林省长春市卫星路7089号
  • 中国,CN,吉林(22)
摘要
本发明公开一种由镜面反射产生的3D虚拟场景面焦散效果的绘制方法,属于真实感3D虚拟场景绘制技术领域。当前,常用光子映射算法绘制3D虚拟场景的面焦散效果。光子映射算法要求对光源发射的大量光子进行跟踪计算,这会严重降低3D虚拟场景面焦散效果的绘制效率。本发明首先计算所有镜面反射三角形面片顶点位置处的反射光线,再根据这些反射光线确定3D虚拟场景中的所有焦散照明体;在绘制3D虚拟场景时,如果待绘制场景点处于某个焦散照明体之中,则在该场景点的光照值中加入此焦散照明体的贡献,从而实现对面焦散效果的绘制。本发明方法可以很容易地集成到光线跟踪算法框架之中,能显著地提高3D虚拟场景绘制的真实感。
权利要求

1.一种由镜面反射产生的3D虚拟场景面焦散效果的绘制方法,其特征在于,所需的数据结构及实现步骤如下:

所需的数据结构:本发明提供一种存储3D虚拟场景(A001)中的镜面反射三角形面片的顶点位置(A002)、顶点法向量(A003)以及顶点位置处的反射光线方向向量(A004)的数据结构(A005),在本发明中称数据结构(A005)为镜面反射顶点数据结构(A006);镜面反射顶点数据结构(A006)包括顶点位置的x坐标P x(101)、顶点位置的y坐标P y(102)、顶点位置的z坐标P z(103)、顶点法向量的x分量n x(104)、顶点法向量的y分量n y(105)、顶点法向量的z分量n z(106)、顶点位置处的反射光线方向向量的x分量R x(107)、顶点位置处的反射光线方向向量的y分量R y(108)、顶点位置处的反射光线方向向量的z分量R z(109)等9个成员变量;

实现步骤:

本发明的方法(010)部分创建3D虚拟场景(A001)中的镜面反射顶点列表(B001),并计算各镜面反射顶点位置处的反射光线方向向量,具体步骤如下:

步骤(S011):将3D虚拟场景(A001)中的所有镜面反射三角形面片的顶点位置(B002)及其法向量(B003)存入镜面反射顶点列表(B001)中,其中镜面反射顶点列表(B001)的每个元素(B004)都是一个镜面反射顶点数据结构(A006)类型的变量;

步骤(S012):对镜面反射顶点列表(B001)中的每个元素(B004),做如下计算:

①计算从元素(B004)包含的顶点位置指向点光源(207)位置的向量(B005);

②对向量(B005)进行归一化运算;

③将元素(B004)包含的顶点法向量(B003)与向量(B005)进行点乘运算,如果点乘运算的结果小于或等于0,则将元素(B004)从镜面反射顶点列表(B001)中删除,否则以向量(B005)与元素(B004)包含的顶点法向量(B003)的夹角为入射角,根据镜面反射定律计算元素(B004)包含的顶点位置处的反射光线方向向量(B006),并将反射光线方向向量(B006)的x分量、y分量、z分量分别存储在元素(B004)的R x(107)、R y(108)、R z(109)成员变量之中;

本发明的方法(020)部分创建产生焦散照明体的三角形列表(C001),具体步骤如下:

步骤(S021):将3D虚拟场景(A001)中的所有镜面反射三角形面片存入一个镜面反射三角形列表(C002)中;

步骤(S022):对于镜面反射三角形列表(C002)中的每个三角形面片(C003),如果在镜面反射顶点列表(B001)中不能一一到与三角形面片(C003)的各个顶点位置对应的元素,则将三角形面片(C003)从镜面反射三角形列表(C002)中删除;

步骤(S023):将镜面反射三角形列表(C002)赋值给三角形列表(C001);

本发明的方法(030)部分实现场景点(D001)的焦散光照值的计算,具体步骤如下:

步骤(S031):创建一个包含场景点(D001)的平面(D002),且平面(D002)的法向量平行于场景点(D001)的法向量;

步骤(S032):对于三角形列表(C001)中的每个三角形面片(D003),做如下计算:

①在镜面反射顶点列表(B001)中出与三角形面片(D003)包含的三个顶点位置对应的元素的索引号,并分别赋值给索引变量id 1、id 2和id 3;

②将索引变量id 1对应的镜面反射顶点列表(B001)的元素赋值给变量V 1,将索引变量 id 2对应的镜面反射顶点列表(B001)的元素赋值给变量V 2,将索引变量id 3对应的镜面反射顶点列表(B001)的元素赋值给变量V 3;

③根据变量V 1包含的顶点位置的x坐标P x(101)、顶点位置的y坐标P y(102)、顶点位置的z坐标P z(103)、顶点位置处的反射光线方向向量的x分量R x(107)、顶点位置处的反射光线方向向量的y分量R y(108)、顶点位置处的反射光线方向向量的z分量R z(109)等6个成员变量,创建一条起始于变量V 1包含的顶点位置,方向平行于变量V 1包含的顶点位置处的反射光线方向向量的射线(D004),并判断射线(D004)与平面(D002)是否相交,如果相交则计算出对应的交点(D005)并置Flag1=1,否则置Flag1=0;

④根据变量V 2包含的顶点位置的x坐标P x(101)、顶点位置的y坐标P y(102)、顶点位置的z坐标P z(103)、顶点位置处的反射光线方向向量的x分量R x(107)、顶点位置处的反射光线方向向量的y分量R y(108)、顶点位置处的反射光线方向向量的z分量R z(109)等6个成员变量,创建一条起始于变量V 2包含的顶点位置,方向平行于变量V 2包含的顶点位置处的反射光线方向向量的射线(D006),并判断射线(D006)与平面(D002)是否相交,如果相交则计算出对应的交点(D007)并置Flag2=1,否则置Flag2=0;

⑤根据变量V 3包含的顶点位置的x坐标P x(101)、顶点位置的y坐标P y(102)、顶点位置的z坐标P z(103)、顶点位置处的反射光线方向向量的x分量R x(107)、顶点位置处的反射光线方向向量的y分量R y(108)、顶点位置处的反射光线方向向量的z分量R z(109)等6个成员变量,创建一条起始于变量V 3包含的顶点位置,方向平行于变量V 3包含的顶点位置处的反射光线方向向量的射线(D008),并判断射线(D008)与平面(D002)是否相交,如果相交则计算出对应的交点(D009)并置Flag3=1,否则置Flag3=0;

⑥如果Flag1=1且Flag2=1且Flag3=1,则转⑦,否则三角形面片(D003)产生的焦散照明体对场景点(D001)的光照贡献为0,结束三角形面片(D003)产生的焦散照明体对场景点(D001)的光照贡献计算;

⑦如果场景点(D001)处于由交点(D005)、交点(D007)和交点(D009)确定的三角形之内(或者确定的直线段之上),则转⑧,否则三角形面片(D003)产生的焦散照明体对场景点(D001)的光照贡献为0,结束三角形面片(D003)产生的焦散照明体对场景点(D001)的光照贡献计算;

⑧首先创建一个包含场景点(D001)的平面(D010),且平面(D010)的法向量平行于三角形面片(D003)的法向量,然后计算射线(D004)与平面(D010)的交点(D011),计算射线(D006)与平面(D010)的交点(D012),计算射线(D008)与平面(D010)的交点(D013);根据变量V 1、变量V 2、变量V 3包含的顶点位置处的反射光线方向向量,通过插值计算出,在由交点(D011)、交点(D012)和交点(D013)确定的三角形内(或者直线段上),场景点(D001)位置处的反射光线方向向量(D014);

⑨创建一条起始于场景点(D001)位置,方向平行于反射光线方向向量(D014)的反向向量的射线(D015);计算射线(D015)与三角形面片(D003)的交点(D016);创建一条起始于交点(D016),终止于点光源(207)位置的线段(D017);测试3D虚拟场景(A001)中是否有三角形面片(D018)与线段(D017)有交,如果无交则转⑩,否则三角形面片(D003)相对于点光源(207)被部分遮挡,其产生的焦散照明体对场景点(D001)的光照贡献为0,结束三角形面片(D003)产生的焦散照明体对场景点(D001)的光照贡献计算;

⑩计算由交点(D011)、交点(D012)和交点(D013)确定的三角形的面积与三角形面片(D003)的面积之比α(D019);创建从交点(D016)指向点光源(207)位置的向量(D020);对向量(D020)进行归一化计算;根据三角形面片(D003)的三个顶点位置,计算三角形面片(D003)的表面法向量(D021);根据点光源(207)到交点(D016)的距离、向量(D020)与表面法向量(D021)的夹角以及点光源(207)的辐射亮度,计算三角形面片(D003)的照明度(D022),将照明度(D022)乘以面积之比α(D019)并赋值给变量I(D023);根据变量I(D023)的值、场景点(D001)的材质属性以及场景点(D001)的法向量与反射光线方向向量(D014)的反向向量的夹角,按照光照反射模型计算三角形面片(D003)产生的焦散照明体对场景点(D001)的光照贡献值,并将其加到场景点(D001)的总光照值之中。

说明书
技术领域

技术领域

本发明属于真实感3D虚拟场景绘制技术领域,涉及一种绘制由镜面反射产生的3D虚拟场景的面焦散效果的方法。

背景技术

真实感3D虚拟场景绘制技术在数字娱乐、影视特效、建筑CAD、广告动画等领域受到人们的广泛关注。目前3D虚拟场景绘制技术虽然已经得到深入的研究,但是如何快速绘制具有高度真实感的3D虚拟场景画面仍然是一个有待进一步解决的难题。当光源发出的光线入射到光滑表面上时,光滑表面的镜面反射过程可能对反射光线产生聚焦或者离焦作用,从而导致反射光线形成复杂的空间分布。当这些空间分布复杂的反射光线再次入射到不透明的反射表面上时,就会在反射表面上产生形状复杂的亮斑,这就是由镜面反射产生的面焦散。

光子映射是一种绘制面焦散效果的经典方法。标准的光子映射算法首先对大量的从光源发射的光子进行跟踪,将这些光子与场景表面的碰撞位置及其相关数据记录在光子缓存中;然后根据光子缓存中的数据计算场景的焦散图;最后利用类似阴影映射的方法把焦散图投影到场景表面上,从而绘制出面焦散效果。由于大量的光子跟踪计算存在较大的系统执行时间和存储空间开销,因此利用光子映射算法绘制面焦散效果的效率通常不高。

随着3D虚拟场景绘制技术的不断发展,影视特效、游戏、视景仿真等3D应用对绘制画面的真实感要求变得越来越高。在这些3D应用中加入由镜面反射产生的3D虚拟场景的面焦散效果可显著增强绘制画面的真实感。目前人们迫切需要在不明显降低绘制效率的条件下,将面焦散效果加入到3D虚拟场景的绘制之中。因此设计快速绘制由镜面反射产生的3D虚拟场景的面焦散效果的方法具有重要的意义。值得注意的是,在大多数3D虚拟场景中,仅绘制由一次镜面反射(即对光源直接光照的镜面反射)产生的面焦散效果就可以获得很好的真实感。充分利用这一特点,可以设计出不需光子跟踪的算法来绘制由镜面反射产生的面焦散效果。

发明内容

本发明的目的在于提供一种快速绘制由镜面反射产生的3D虚拟场景的面焦散效果的方法。本方法首先计算所有镜面反射三角形面片顶点位置处的反射光线,根据这些反射光线确定3D虚拟场景中的所有焦散照明体;在绘制3D虚拟场景时,如果待绘制场景点处于某个焦散照明体之中,则在该场景点的光照值中加入此焦散照明体的贡献,从而实现对面焦散效果的绘制。

本发明首先提供一种存储3D虚拟场景(A001)中的镜面反射三角形面片的顶点位置(A002)、顶点法向量(A003)以及顶点位置处的反射光线方向向量(A004)的数据结构(A005),在本发明中称数据结构(A005)为镜面反射顶点数据结构(A006);如图1所示,镜 面反射顶点数据结构(A006)包括顶点位置的x坐标Px(101)、顶点位置的y坐标Py(102)、顶点位置的z坐标Pz(103)、顶点法向量的x分量nx(104)、顶点法向量的y分量ny(105)、顶点法向量的z分量nz(106)、顶点位置处的反射光线方向向量的x分量Rx(107)、顶点位置处的反射光线方向向量的y分量Ry(108)、顶点位置处的反射光线方向向量的z分量Rz(109)等9个成员变量。

本发明的方法(010)部分创建3D虚拟场景(A001)中的镜面反射顶点列表(B001),并计算各镜面反射顶点位置处的反射光线方向向量,具体步骤如下:

步骤(S011):将3D虚拟场景(A001)中的所有镜面反射三角形面片的顶点位置(B002)及其法向量(B003)存入镜面反射顶点列表(B001)中,其中镜面反射顶点列表(B001)的每个元素(B004)都是一个镜面反射顶点数据结构(A006)类型的变量;

步骤(S012):对镜面反射顶点列表(B001)中的每个元素(B004),做如下计算:

①计算从元素(B004)包含的顶点位置指向点光源(207)位置的向量(B005);

②对向量(B005)进行归一化运算;

③将元素(B004)包含的顶点法向量(B003)与向量(B005)进行点乘运算,如果点乘运算的结果小于或等于0,则将元素(B004)从镜面反射顶点列表(B001)中删除,否则以向量(B005)与元素(B004)包含的顶点法向量(B003)的夹角为入射角,根据镜面反射定律计算元素(B004)包含的顶点位置处的反射光线方向向量(B006),并将反射光线方向向量(B006)的x分量、y分量、z分量分别存储在元素(B004)的Rx(107)、Ry(108)、Rz(109)成员变量之中。

本发明的方法(020)部分创建产生焦散照明体的三角形列表(C001),具体步骤如下:

步骤(S021):将3D虚拟场景(A001)中的所有镜面反射三角形面片存入一个镜面反射三角形列表(C002)中;

步骤(S022):对于镜面反射三角形列表(C002)中的每个三角形面片(C003),如果在镜面反射顶点列表(B001)中不能一一到与三角形面片(C003)的各个顶点位置对应的元素,则将三角形面片(C003)从镜面反射三角形列表(C002)中删除;

步骤(S023):将镜面反射三角形列表(C002)赋值给三角形列表(C001)。

本发明的方法(030)部分实现场景点(D001)的焦散光照值的计算,具体步骤如下:

步骤(S031):创建一个包含场景点(D001)的平面(D002),且平面(D002)的法向量平行于场景点(D001)的法向量;

步骤(S032):对于三角形列表(C001)中的每个三角形面片(D003),做如下计算:

①在镜面反射顶点列表(B001)中出与三角形面片(D003)包含的三个顶点位置对应的元素的索引号,并分别赋值给索引变量id1、id2和id3;

②将索引变量id1对应的镜面反射顶点列表(B001)的元素赋值给变量V1,将索引变量id2对应的镜面反射顶点列表(B001)的元素赋值给变量V2,将索引变量id3对应的镜面反射顶点列表(B001)的元素赋值给变量V3;

③根据变量V1包含的顶点位置的x坐标Px(101)、顶点位置的y坐标Py(102)、顶点位置的z坐标Pz(103)、顶点位置处的反射光线方向向量的x分量Rx(107)、顶点位置处的 反射光线方向向量的y分量Ry(108)、顶点位置处的反射光线方向向量的z分量Rz(109)等6个成员变量,创建一条起始于变量V1包含的顶点位置,方向平行于变量V1包含的顶点位置处的反射光线方向向量的射线(D004),并判断射线(D004)与平面(D002)是否相交,如果相交则计算出对应的交点(D005)并置Flag1=1,否则置Flag1=0;

④根据变量V2包含的顶点位置的x坐标Px(101)、顶点位置的y坐标Py(102)、顶点位置的z坐标Pz(103)、顶点位置处的反射光线方向向量的x分量Rx(107)、顶点位置处的反射光线方向向量的y分量Ry(108)、顶点位置处的反射光线方向向量的z分量Rz(109)等6个成员变量,创建一条起始于变量V2包含的顶点位置,方向平行于变量V2包含的顶点位置处的反射光线方向向量的射线(D006),并判断射线(D006)与平面(D002)是否相交,如果相交则计算出对应的交点(D007)并置Flag2=1,否则置Flag2=0;

⑤根据变量V3包含的顶点位置的x坐标Px(101)、顶点位置的y坐标Py(102)、顶点位置的z坐标Pz(103)、顶点位置处的反射光线方向向量的x分量Rx(107)、顶点位置处的反射光线方向向量的y分量Ry(108)、顶点位置处的反射光线方向向量的z分量Rz(109)等6个成员变量,创建一条起始于变量V3包含的顶点位置,方向平行于变量V3包含的顶点位置处的反射光线方向向量的射线(D008),并判断射线(D008)与平面(D002)是否相交,如果相交则计算出对应的交点(D009)并置Flag3=1,否则置Flag3=0;

⑥如果Flag1=1且Flag2=1且Flag3=1,则转⑦,否则三角形面片(D003)产生的焦散照明体对场景点(D001)的光照贡献为0,结束三角形面片(D003)产生的焦散照明体对场景点(D001)的光照贡献计算;

⑦如果场景点(D001)处于由交点(D005)、交点(D007)和交点(D009)确定的三角形之内(或者确定的直线段之上),则转⑧,否则三角形面片(D003)产生的焦散照明体对场景点(D001)的光照贡献为0,结束三角形面片(D003)产生的焦散照明体对场景点(D001)的光照贡献计算;

⑧首先创建一个包含场景点(D001)的平面(D010),且平面(D010)的法向量平行于三角形面片(D003)的法向量,然后计算射线(D004)与平面(D010)的交点(D011),计算射线(D006)与平面(D010)的交点(D012),计算射线(D008)与平面(D010)的交点(D013);根据变量V1、变量V2、变量V3包含的顶点位置处的反射光线方向向量,通过插值计算出,在由交点(D011)、交点(D012)和交点(D013)确定的三角形内(或者直线段上),场景点(D001)位置处的反射光线方向向量(D014);

⑨创建一条起始于场景点(D001)位置,方向平行于反射光线方向向量(D014)的反向向量的射线(D015);计算射线(D015)与三角形面片(D003)的交点(D016);创建一条起始于交点(D016),终止于点光源(207)位置的线段(D017);测试3D虚拟场景(A001)中是否有三角形面片(D018)与线段(D017)有交,如果无交则转⑩,否则三角形面片(D003)相对于点光源(207)被部分遮挡,其产生的焦散照明体对场景点(D001)的光照贡献为0,结束三角形面片(D003)产生的焦散照明体对场景点(D001)的光照贡献计算;

⑩计算由交点(D011)、交点(D012)和交点(D013)确定的三角形的面积与三角形面片(D003)的面积之比α(D019);创建从交点(D016)指向点光源(207)位置的向量(D020);对向量(D020)进行归一化计算;根据三角形面片(D003)的三个顶点位置,计算三角形面片(D003)的表面法向量(D021);根据点光源(207)到交点(D016)的距离、向 量(D020)与表面法向量(D021)的夹角以及点光源(207)的辐射亮度,计算三角形面片(D003)的照明度(D022),将照明度(D022)乘以面积之比α(D019)并赋值给变量I(D023);根据变量I(D023)的值、场景点(D001)的材质属性以及场景点(D001)的法向量与反射光线方向向量(D014)的反向向量的夹角,按照光照反射模型计算三角形面片(D003)产生的焦散照明体对场景点(D001)的光照贡献值,并将其加到场景点(D001)的总光照值之中。

有益效果

本发明提供了一种由镜面反射产生的3D虚拟场景面焦散效果的绘制方法。本发明方法与光子映射方法相比,避免了对大量的从光源发射的光子的跟踪运算,提高了面焦散效果的绘制效率。另外,本发明方法能够很容易地集成到光线跟踪等全局光照绘制算法框架之中,可显著地提高3D虚拟场景画面绘制的真实感。

附图说明

图1是镜面反射顶点数据结构示意图。

具体实施方式

为了使本发明的特征和优点更加清楚明白,下面参照附图结合具体实施例对本发明作进一步的描述。

在本实施例中,使用光线跟踪算法绘制3D虚拟场景。由于光线跟踪算法只对镜面反射光线进行递归跟踪,因此无法绘制出漫反射表面上的面焦散效果。为此,需要在场景点的光照值计算中增加一个新过程,以便获得场景点的焦散光照值。计算出所有待绘制场景点的焦散光照值,就实现了对3D虚拟场景面焦散效果的绘制。将焦散光照值加到标准光线跟踪算法计算出的场景点光照值之中,可进一步地把面焦散效果合成到最终的3D虚拟场景绘制结果之中。下面将讲述这个新增加过程的具体实施方式。

本发明首先提供一种存储3D虚拟场景(A001)中的镜面反射三角形面片的顶点位置(A002)、顶点法向量(A003)以及顶点位置处的反射光线方向向量(A004)的数据结构(A005),在本发明中称数据结构(A005)为镜面反射顶点数据结构(A006);如图1所示,镜面反射顶点数据结构(A006)包括顶点位置的x坐标Px(101)、顶点位置的y坐标Py(102)、顶点位置的z坐标Pz(103)、顶点法向量的x分量nx(104)、顶点法向量的y分量ny(105)、顶点法向量的z分量nz(106)、顶点位置处的反射光线方向向量的x分量Rx(107)、顶点位置处的反射光线方向向量的y分量Ry(108)、顶点位置处的反射光线方向向量的z分量Rz(109)等9个成员变量。

本发明的方法(010)部分创建3D虚拟场景(A001)中的镜面反射顶点列表(B001),并计算各镜面反射顶点位置处的反射光线方向向量,具体步骤如下:

步骤(S011):将3D虚拟场景(A001)中的所有镜面反射三角形面片的顶点位置(B002)及其法向量(B003)存入镜面反射顶点列表(B001)中,其中镜面反射顶点列表(B001)的每个元索(B004)都是一个镜面反射顶点数据结构(A006)类型的变量;

步骤(S012):对镜面反射顶点列表(B001)中的每个元素(B004),做如下计算:

①计算从元素(B004)包含的顶点位置指向点光源(207)位置的向量(B005);

②对向量(B005)进行归一化运算;

③将元素(B004)包含的顶点法向量(B003)与向量(B005)进行点乘运算,如果点乘运算的结果小于或等于0,则将元素(B004)从镜面反射顶点列表(B001)中删除,否则以向量(B005)与元素(B004)包含的顶点法向量(B003)的夹角为入射角,根据镜面反射定律计算元素(B004)包含的顶点位置处的反射光线方向向量(B006),并将反射光线方向向量(B006)的x分量、y分量、z分量分别存储在元素(B004)的Rx(107)、Ry(108)、Rz(109)成员变量之中。

本发明的方法(020)部分创建产生焦散照明体的三角形列表(C001),具体步骤如下:

步骤(S021):将3D虚拟场景(A001)中的所有镜面反射三角形面片存入一个镜面反射三角形列表(C002)中;

步骤(S022):对于镜面反射三角形列表(C002)中的每个三角形面片(C003),如果在镜面反射顶点列表(B001)中不能一一到与三角形面片(C003)的各个顶点位置对应的元素,则将三角形面片(C003)从镜面反射三角形列表(C002)中删除;

步骤(S023):将镜面反射三角形列表(C002)赋值给三角形列表(C001)。

本发明的方法(030)部分实现场景点(D001)的焦散光照值的计算,具体步骤如下:

步骤(S031):创建一个包含场景点(D001)的平面(D002),且平面(D002)的法向量平行于场景点(D001)的法向量;

步骤(S032):对于三角形列表(C001)中的每个三角形面片(D003),做如下计算:

①在镜面反射顶点列表(B001)中出与三角形面片(D003)包含的三个顶点位置对应的元素的索引号,并分别赋值给索引变量id1、id2和id3;

②将索引变量id1对应的镜面反射顶点列表(B001)的元素赋值给变量V1,将索引变量id2对应的镜面反射顶点列表(B001)的元素赋值给变量V2,将索引变量id3对应的镜面反射顶点列表(B001)的元素赋值给变量V3;

③根据变量V1包含的顶点位置的x坐标Px(101)、顶点位置的y坐标Py(102)、顶点位置的z坐标Pz(103)、顶点位置处的反射光线方向向量的x分量Rx(107)、顶点位置处的反射光线方向向量的y分量Ry(108)、顶点位置处的反射光线方向向量的z分量Rz(109)等6个成员变量,创建一条起始于变量V1包含的顶点位置,方向平行于变量V1包含的顶点位置处的反射光线方向向量的射线(D004),并判断射线(D004)与平面(D002)是否相交,如果相交则计算出对应的交点(D005)并置Flag1=1,否则置Flag1=0;

④根据变量V2包含的顶点位置的x坐标Px(101)、顶点位置的y坐标Py(102)、顶点位置的z坐标Pz(103)、顶点位置处的反射光线方向向量的x分量Rx(107)、顶点位置处的反射光线方向向量的y分量Ry(108)、顶点位置处的反射光线方向向量的z分量Rz(109)等6个成员变量,创建一条起始于变量V2包含的顶点位置,方向平行于变量V2包含的顶点位置处的反射光线方向向量的射线(D006),并判断射线(D006)与平面(D002)是否相交,如果相交则计算出对应的交点(D007)并置Flag2=1,否则置Flag2=0;

⑤根据变量V3包含的顶点位置的x坐标Px(101)、顶点位置的y坐标Py(102)、顶点位置的z坐标Pz(103)、顶点位置处的反射光线方向向量的x分量Rx(107)、顶点位置处的反射光线方向向量的y分量Ry(108)、顶点位置处的反射光线方向向量的z分量Rz(109)等 6个成员变量,创建一条起始于变量V3包含的顶点位置,方向平行于变量V3包含的顶点位置处的反射光线方向向量的射线(D008),并判断射线(D008)与平面(D002)是否相交,如果相交则计算出对应的交点(D009)并置Flag3=1,否则置Flag3=0;

⑥如果Flag1=1且Flag2=1且Flag3=1,则转⑦,否则三角形面片(D003)产生的焦散照明体对场景点(D001)的光照贡献为0,结束三角形面片(D003)产生的焦散照明体对场景点(D001)的光照贡献计算;

⑦如果场景点(D001)处于由交点(D005)、交点(D007)和交点(D009)确定的三角形之内(或者确定的直线段之上),则转⑧,否则三角形面片(D003)产生的焦散照明体对场景点(D001)的光照贡献为0,结束三角形面片(D003)产生的焦散照明体对场景点(D001)的光照贡献计算;

⑧首先创建一个包含场景点(D001)的平面(D010),且平面(D010)的法向量平行于三角形面片(D003)的法向量,然后计算射线(D004)与平面(D010)的交点(D011),计算射线(D006)与平面(D010)的交点(D012),计算射线(D008)与平面(D010)的交点(D013);根据变量V1、变量V2、变量V3包含的顶点位置处的反射光线方向向量,通过插值计算出,在由交点(D011)、交点(D012)和交点(D013)确定的三角形内(或者直线段上),场景点(D001)位置处的反射光线方向向量(D014);

⑨创建一条起始于场景点(D001)位置,方向平行于反射光线方向向量(D014)的反向向量的射线(D015);计算射线(D015)与三角形面片(D003)的交点(D016);创建一条起始于交点(D016),终止于点光源(207)位置的线段(D017);测试3D虚拟场景(A001)中是否有三角形面片(D018)与线段(D017)有交,如果无交则转⑩,否则三角形面片(D003)相对于点光源(207)被部分遮挡,其产生的焦散照明体对场景点(D001)的光照贡献为0,结束三角形面片(D003)产生的焦散照明体对场景点(D001)的光照贡献计算;

⑩计算由交点(D011)、交点(D012)和交点(D013)确定的三角形的面积与三角形面片(D003)的面积之比α(D019);创建从交点(D016)指向点光源(207)位置的向量(D020);对向量(D020)进行归一化计算;根据三角形面片(D003)的三个顶点位置,计算三角形面片(D003)的表面法向量(D021);根据点光源(207)到交点(D016)的距离、向量(D020)与表面法向量(D021)的夹角以及点光源(207)的辐射亮度,计算三角形面片(D003)的照明度(D022),将照明度(D022)乘以面积之比α(D019)并赋值给变量I(D023);根据变量I(D023)的值、场景点(D001)的材质属性以及场景点(D001)的法向量与反射光线方向向量(D014)的反向向量的夹角,按照光照反射模型计算三角形面片(D003)产生的焦散照明体对场景点(D001)的光照贡献值,并将其加到场景点(D001)的总光照值之中。

本文发布于:2024-09-24 16:27:31,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/84686.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议