1.超大规模三维场景的直接光照效果绘制方法,其特征在于:在创建三维场景模型时把三维场景的几何对象模型划分成Nm个分组,每个几何对象模型分组包含三维场景的一部分几何对象模型,使单个几何对象模型分组的数据能够被一次性地从计算机的磁盘加载到计算机的内存中,按1,2,3,…,Nm的顺序对各个几何对象模型分组进行编号,把各个几何对象模型分组的数据保存在计算机的磁盘中;逐个地把各几何对象模型分组数据装入计算机的内存,并利用光线投射技术绘制几何对象模型分组中的几何对象,把结果保存在计算机的内存中,同时从计算机内存中删除几何对象模型分组数据;通过综合各次绘制得到的结果可以得到最终的三维场景画面绘制结果;具体实现步骤如下:提供一种数据结构TRAY,用于存储光线相关信息;数据结构TRAY包含光线起点rayBP、光线方向向量rayDir共两个成员变量;
提供一种数据结构SPOINT,用于存储三维场景点相关信息;数据结构SPOINT包含场景点位置sPos、场景点所在位置的表面法向量sNrm、场景点材质参数sMAT共三个成员变量;
1)在创建三维场景模型时,对三维场景的几何对象模型进行分组建模并分别存放在不同的计算机磁盘文件中,具体方法如下:
步骤Step101:在创建三维场景模型时,把需要添加到三维场景中的所有几何对象模型划分成Nm个分组,按1,2,3,…,Nm的顺序对各个几何对象模型分组A001进行编号,使单个几何对象模型分组A001的数据能够被一次性地从计算机的磁盘加载到计算机的内存中;
步骤Step102:对第i个几何对象模型分组A001,i=1,2,3,…,Nm,执行如下操作:
设置第i个几何对象模型分组A001的所有几何对象在三维场景中的模型数据,把第i个几何对象模型分组A001的模型数据保存在第i个计算机磁盘文件A002中,计算机磁盘文件A002存放在计算机的磁盘中;
2)逐个地绘制各个几何对象模型分组A001的几何对象,并通过综合所有绘制结果得到最终的三维场景画面绘制结果,具体方法如下:步骤Step201:在计算机的内存中,创建一个包含Npixr行、Npixc列的二维数组ArrRay,Npixr表示虚拟相机的虚拟像素平面上的像素行数,Npixc表示虚拟相机的虚拟像素平面上的像素列数,数组ArrRay的每个元素存储一个数据结构TRAY类型的变量;根据虚拟相机参数,从视点发射穿过虚拟像素平面上的每个像素的光线B001,光线B001与虚拟像素平面上的像素一一对应;对于每条光线B001,做如下操作:计算光线B001对应的虚拟像素平面上的像素在虚拟像素平面上所在的行号iRow,计算光线B001对应的虚拟像素平面上的像素在虚拟像素平面上所在的列号jCol,在计算机的内存中创建一个数据结构TRAY类型的变量B002,把光线B001的起点赋值给变量B002的光线起点rayBP成员变量,把光线B001的方向赋值给变量B002的光线方向向量rayDir成员变量,把变量B002赋值给数组ArrRay的第iRow行、第jCol列的元素;
步骤Step202:在计算机的内存中,创建一个包含Npixr行、Npixc列的二维数组ArrPoint,Npixr表示虚拟相机的虚拟像素平面上的像素行数,Npixc表示虚拟相机的虚拟像素平面上的像素列数,数组ArrPoint的每个元素存储一个列表B003,列表B003的每个元素存储一个数据结构SPOINT类型的变量;令数组ArrPoint的每个元素存储的列表B003为空;
步骤Step203:令编号ID=1;
步骤Step204:如果编号ID大于Nm,则转步骤Step207,否则把第ID个计算机磁盘文件A002的数据加载到计算机的内存中,实现把第ID个几何对象模型分组A001的模型数据存放在计算机的内存中;
步骤Step205:对于数组ArrRay的每个元素B004,执行如下操作:
步骤Step205-1:计算元素B004在数组ArrRay中的行号nRow,计算元素B004在数组ArrRay中的列号mCol;
步骤Step205-2:判断由元素B004的光线起点rayBP成员变量表示的光线起点和元素B004的光线方向向量rayDir成员变量表示的光线方向确定的光线B005是否与第ID个几何对象模型分组A001包含的几何对象相交,如果不相交,转步骤Step205-3,否则计算离光线B005的光线起点最近的交点位置B006并创建一个数据结构SPOINT类型的变量B007,把变量B007的场景点位置sPos成员变量赋值为交点位置B006,把变量B007的场景点所在位置的表面法向量sNrm成员变量赋值为交点位置B006处的表面法向量,把变量B007的场景点材质参数sMAT成员变量赋值为交点位置B006处的几何对象材质参数,进一步判断数组ArrPoint的第nRow行、第mCol列元素存储的列表B003是否为空,如果为空,则把变量B007添加到数组ArrPoint的第nRow行、第mCol列元素存储的列表B003中,否则进一步计算从视点到数组ArrPoint的第nRow行、第mCol列元素存储的列表B003的第一个元素存储的数据结构SPOINT类型的变量的场景点位置sPos成员变量表示的场景点位置的距离B008,计算从视点到交点位置B006的距离B009,如果距离B009大于距离B008,则转步骤Step205-3,否则清空数组ArrPoint的第nRow行、第mCol列元素存储的列表B003,把变量B007添加到数组ArrPoint的第nRow行、第mCol列元素存储的列表B003中;
步骤Step205-3:对元素B004的操作结束;
步骤Step206:从计算机的内存中删除第ID个几何对象模型分组A001的模型数据;令ID=ID+1;转步骤Step204;
步骤Step207:在计算机的内存中,创建一个包含Npixr行、Npixc列的二维数组ILLUMIN,Npixr表示虚拟相机的虚拟像素平面上的像素行数,Npixc表示虚拟相机的虚拟像素平面上的像素列数,数组ILLUMIN的每个元素用于存储点光源发出的光经场景点散射后进入虚拟相机的光亮度,令数组ILLUMIN的每个元素的值为0;
步骤Step208:对于数组ArrPoint的每个元素B010,执行如下操作:
步骤Step208-1:计算元素B010在数组ArrPoint中的行号nID,计算元素B010在数组ArrPoint中的列号mID;
步骤Step208-2:如果元素B010存储的列表B003为空,则转步骤Step208-3,否则令VSPT代表元素B010存储的列表B003的第一个元素存储的数据结构SPOINT类型的变量,在不考虑几何遮挡的情况下,基于光在几何对象表面上的散射理论,根据VSPT的场景点位置sPos成员变量表示的场景点位置、VSPT的场景点所在位置的表面法向量sNrm成员变量表示的表面法向量、VSPT的场景点材质参数sMAT成员变量表示的场景点材质参数、点光源位置以及视点位置,计算点光源发出的光经VSPT的场景点位置sPos成员变量表示的场景点位置散射后入射到视点处的光亮度B011,把数组ILLUMIN的第nID行、第mID列元素赋值为光亮度B011的值;
步骤Step208-3:对元素B010的操作结束;
步骤Step209:令编号ID=1;
步骤Step210:如果编号ID大于Nm,则转步骤Step213,否则把第ID个计算机磁盘文件A002的数据加载到计算机的内存中,实现把第ID个几何对象模型分组A001的模型数据存放在计算机的内存中;
步骤Step211:对于数组ArrPoint的每个元素B010,执行如下操作:
步骤Step211-1:计算元素B010在数组ArrPoint中的行号nID,计算元素B010在数组ArrPoint中的列号mID;
步骤Step211-2:如果元素B010存储的列表B003为空,则转步骤Step211-3,否则令VSPT代表元素B010存储的列表B003的第一个元素存储的数据结构SPOINT类型的变量,判断从VSPT的场景点位置sPos成员变量表示的场景点位置到点光源位置的线段是否与第ID个几何对象模型分组A001包含的几何对象相交,如果不相交,转步骤Step211-3,否则把数组ILLUMIN的第nID行、第mID列元素赋值为0;
步骤Step211-3:对元素B010的操作结束;
步骤Step212:从计算机的内存中删除第ID个几何对象模型分组A001的模型数据;令ID=ID+1;转步骤Step210;
步骤Step213:把数组ILLUMIN的每个元素存储的光亮度值转换成三维场景画面图像像素颜色值,并把三维场景画面图像显示在显示器上。