1.一种实现3D特效编辑器的方法,其特征在于,包括,
步骤一、定义元数据,所述元数据包括资源文件、渲染对象、场景设定,资源文件用于存储渲染物体的信息,所述渲染物体的信息包括网格信息、材质信息、纹理信息;渲染对象用于表示场景中所有可被渲染的渲染物体,所述渲染对象还包括摄像机、光源,摄像机用于根据摄像机取景框的范围确定可渲染的渲染物体,光源用于模拟现实中的光线,场景设定包括渲染目标和渲染顺序,所述渲染目标包括实时目标和捕获目标,所述渲染顺序是指摄像机的渲染顺序;
步骤二、构建场景,场景为包含渲染对象的一个3D可视化空间,
步骤三、进行场景交互,通过拖动鼠标驱动场景中的摄像机进行视角变换,以及在场景中执行渲染对象的平移、缩放、旋转操作;
步骤四、执行渲染,具体包括根据场景信息、渲染对象信息、资源文件信息进行渲染,构建渲染管理对象,将渲染管理对象实例化为场景渲染实例和预览渲染实例,场景渲染实例进行场景渲染,预览渲染实例进行预览渲染,所述场景渲染实例根据场景中可渲染的渲染物体、摄像机、光源、地面、摄像机视线、视平面以及场景交互中产生的操作进行场景渲染,所述预览渲染实例根据场景渲染实例中摄像机取景框内的渲染物体以及场景交互中产生的操作进行预览渲染,同时管理执行渲染过程中产生的操作,所述操作包括但不限于删除、移动渲染物体,所述管理为首先将当前执行渲染过程中用户产生的操作进行封装并存储在队列中,之后每次执行渲染前首先执行列队中封装的操作。
2.根据权利要求1所述的一种实现3D特效编辑器的方法,其特征在于,所述预览渲染实例进行预览渲染还包括当场景渲染实例中摄像机的数量多于一台时,对每个摄像机拍摄画面进行逐层渲染,将每个摄像机拍摄画面生成一个贴图,然后按照摄像机的渲染顺序,分别将每两个相邻贴图的像素进行混合生成一张新的贴图,新的贴图与下一层贴图再进行混合,所述混合指一个贴图与其它贴图的色彩叠加方式。
3.根据权利要求1所述的一种实现3D特效编辑器的方法,其特征在于,所述执行列队中封装的操作还包括当操作的类型一致时,对操作进行合并执行。
4.根据权利要求1所述的一种实现3D特效编辑器的方法,其特征在于,所述通过拖动鼠标驱动场景中的摄像机进行视角变换包括,步骤4a、以用户在显示观看的角度作为观察点,拖动鼠标,获取鼠标在显示屏幕的移动距离,通过显示屏幕的长宽对移动距离进行归一化;
步骤4b、根据观察点构建世界坐标系,根据摄像机构建摄像机坐标系,所述摄像机坐标系包括Right坐标轴、Up坐标轴、Foward坐标轴,将移动距离转换为旋转角度,所述旋转角度包括deltaX、deltaY,deltaX表示摄像机围绕世界坐标系Y轴的旋转角度,deltaY表示摄像机围绕摄像机坐标系的旋转角度,将旋转角度deltaX以四元数的方式存储为q1,将旋转角度deltaY以四元数的方式存储为q2,步骤4c、根据公式(1)计算摄像机相对观察点的向量v1,
v1=Translationcamera‑focusPoint (1)
其中Translationcamera表示摄像机在世界坐标系的位置坐标,focusPoint表示摄像机的观察点坐标,步骤4d、将向量v1根据公式(2)计算得到v3,根据公式(3)更新摄像机在世界坐标系的位置坐标,v3=q2·q1·v1·q1*·q2* (2)
Translationcamera=v3+focusPoint (3)
其中,q1*为q1的共轭四元数,q2*为q2的共轭四元数,
步骤4e、摄像机坐标系中Right坐标轴根据公式(4)进行旋转得到v2,根据公式(5)计算摄像机坐标系中up坐标轴,通过调用OpenGL中的lookAt函数,计算摄像机的变换矩阵,根据变换矩阵计算四元数qr,并将四元数转换为旋转矩阵R,根据公式(6)计算摄像机变换后的位置v',v为摄像机变换前的位置,根据v'获取渲染物体的信息并展示在显示屏幕中,v2=q2·right·q2* (4)up=v3×v2 (5)
v′=Translationcamera·R·v (6)
其中,v为摄像机变换前的位置,v'为摄像机变换后的位置。