发明名称 一种由镜面反射产生的3D虚拟场景面焦散效果的绘制方法
摘要 本发明公开一种由镜面反射产生的3D虚拟场景面焦散效果的绘制方法,属于真实感3D虚拟场景绘制技术领域。当前,常用光子映射算法绘制3D虚拟场景的面焦散效果。光子映射算法要求对光源发射的大量光子进行跟踪计算,这会严重降低3D虚拟场景面焦散效果的绘制效率。本发明首先计算所有镜面反射三角形面片顶点位置处的反射光线,再根据这些反射光线确定3D虚拟场景中的所有焦散照明体;在绘制3D虚拟场景时,如果待绘制场景点处于某个焦散照明体之中,则在该场景点的光照值中加入此焦散照明体的贡献,从而实现对面焦散效果的绘制。本发明方法可以很容易地集成到光线跟踪算法框架之中,能显著地提高3D虚拟场景绘制的真实感。
申请公布号 CN102074041B 申请公布日期 2012.10.10
申请号 CN201010597769.8 申请日期 2010.12.21
申请人 长春理工大学 发明人 陈纯毅;杨华民;蒋振刚;范静涛;丁莹;冯欣;底晓强;韩成;陈占芳;李奇
分类号 G06T17/00(2006.01)I 主分类号 G06T17/00(2006.01)I
代理机构 代理人
主权项 一种由镜面反射产生的3D虚拟场景面焦散效果的绘制方法,其特征在于,所需的数据结构及实现步骤如下:所需的数据结构:提供一种存储3D虚拟场景A001中的镜面反射三角形面片的顶点位置A002、顶点法向量A003以及顶点位置处的反射光线方向向量A004的数据结构A005,称数据结构A005为镜面反射顶点数据结构A006;镜面反射顶点数据结构A006包括顶点位置的x坐标Px101、顶点位置的y坐标Py102、顶点位置的z坐标Pz103、顶点法向量的x分量nx104、顶点法向量的y分量ny105、顶点法向量的z分量nz106、顶点位置处的反射光线方向向量的x分量Rx107、顶点位置处的反射光线方向向量的y分量Ry108、顶点位置处的反射光线方向向量的z分量Rz109共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的Rx107、Ry108、Rz109成员变量之中;方法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坐标Px101、顶点位置的y坐标Py102、顶点位置的z坐标Pz103、顶点位置处的反射光线方向向量的x分量Rx107、顶点位置处的反射光线方向向量的y分量Ry108、顶点位置处的反射光线方向向量的z分量Rz109共6个成员变量,创建一条起始于变量V1包含的顶点位置,方向平行于变量V1包含的顶点位置处的反射光线方向向量的射线D004,并判断射线D004与平面D002是否相交,如果相交则计算出对应的交点D005并置Flag1=1,否则置Flag1=0;④根据变量V2包含的顶点位置的x坐标Px101、顶点位置的y坐标Py102、顶点位置的z坐标Pz103、顶点位置处的反射光线方向向量的x分量Rx107、顶点位置处的反射光线方向向量的y分量Ry108、顶点位置处的反射光线方向向量的z分量Rz109共6个成员变量,创建一条起始于变量V2包含的顶点位置,方向平行于变量V2包含的顶点位置处的反射光线方向向量的射线D006,并判断射线D006与平面D002是否相交,如果相交则计算出对应的交点D007并置Flag2=1,否则置Flag2=0;⑤根据变量V3包含的顶点位置的x坐标Px101、顶点位置的y坐标Py102、顶点位置的z坐标Pz103、顶点位置处的反射光线方向向量的x分量Rx107、顶点位置处的反射光线方向向量的y分量Ry108、顶点位置处的反射光线方向向量的z分量Rz109共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并赋值给变量ID023;根据变量ID023的值、场景点D001的材质属性以及场景点D001的法向量与反射光线方向向量D014的反向向量的夹角,按照光照反射模型计算三角形面片D003产生的焦散照明体对场景点D001的光照贡献值,并将其加到场景点D001的总光照值之中。
地址 130022 吉林省长春市卫星路7089号