一种基于OpenSceneGraph的三维动画制作方法

文档序号:9433582阅读:580来源:国知局
一种基于OpenSceneGraph的三维动画制作方法
【技术领域】
[0001]本发明属于场景图形模拟仿真技术领±或,更具体地,涉及一种基于OpenSceneGraph的三维动画制作方法。
【背景技术】
[0002]OpenSceneGraph(OSG)是一个开源的高性能三维图像清染引擎,基于修改的LGPL协议(OSGPL)免费发布,广泛用于视觉仿真、游戏、虚拟现实、科学可视化和建模等领域,它以成为工业标准的OpenGL为底层平台,使用可移植性的ANSI C++编写而成;解决了使用OpenGVS、Vega等商业引擎开发成本过高,不利于产品推广的问题,从实用的角度上更有意义,效果不亚于商业视景渲染软件。
[0003]虚拟视景技术,是虚拟仿真视景技术中一个重要分支,其组成部分主要包括仿真建模技术、动画仿真技术和实时视景生成技术。在虚拟视景中,动画的渲染非常重要,可以添加更多的娱乐和互动。目前,OSG中实现逼真的动画技术主要是骨骼动画,其显示效果非常逼真。但其技术难度非常高。在一些场景中,有一部分动画起到很重要的锦上添花的效果,使得场景更加真实、绚丽,但这部分动画效果主要是视觉上的需求,并不需要精确度;这种情况下使用骨骼动画将会耗费大量的资源。
[0004]以制作海底鱼群运动动画为例,游动的鱼群、波动的海草是必不可少的场景成员,若使用骨骼动画来实现,需要制作大量三维模型,并进行鱼类身体游动的计算,而大量的鱼群游动不是简单的平动,其还具有鱼类身体的扭动;但它们大部分并非是场景中的主体目标,而是修饰整个场景,使其更具有真实性;为了实现真实动画效果采用骨骼动画,计算工作量巨大,将耗费大量资源。

【发明内容】

[0005]针对现有技术的以上缺陷或改进需求,本发明提供了一种基于OpenSceneGraph的三维动画制作方法,其目的在于利用二维图片运动达到高度仿真三维动画视觉效果,克服了传统模型动画实现的复杂性。
[0006]为实现上述目的,按照本发明的一个方面,提供了一种基于OpenSceneGraph的三维动画制作方法,包括以下步骤:
[0007](I)删除原始图片中的背景纹理,获得仅包含目标物体纹理信息的第一图片,将所述第一图片保存为带有透明度信息的格式,获得仅包含目标物体纹理信息且带有透明度的第二图片;
[0008](2)设置第二图片每一帧的纹理坐标对应关系,获得各帧对应的子图;
[0009](3)对所述子图添加广告牌;
[0010](4)采用OpenSceneGraph的路径动画类创建路径动画对象,并将该路径动画对象关联至步骤(3)所述广告牌的节点,使得路径动画对象成为广告牌子节点;
[0011](5)采用OpenSceneGraph的矩阵变换类创建矩阵变换对象和矩阵变化节点,将步骤(3)所述广告牌的节点关联至所述矩阵变换对象下;通过所述矩阵变换对象改变图片的位置和姿态信息,产生相对于三维场景参考系的位置和姿态变化效果;
[0012](6)采用OpenSceneGraph的单视景器类创建单视景器对象,采用OpenSceneGraph的组节点类创建场景根节点,将步骤(5)中获得的矩阵变换对象关联至所述根节点下,并将单视景器对象的场景数据设置为根节点;
[0013](7)采用OpenSceneGraph的帧函数完成各帧的场景数据更新并清染绘制场景,获得二维动画。
[0014]优选地,步骤(2)创建子图的步骤具体如下:
[0015](2.1)采用OpenSceneGraph的纹理类创建纹理对象,并设置纹理大小、纹理颜色格式特征;
[0016](2.2)采用OpenSceneGraph的几何体类创建几何体对象,且将其设置为动态数据变量,使得该变量可在每一帧进行数据更新,且指定所述几何体对象局部坐标系的笛卡尔坐标系;
[0017](2.3)采用OpenSceneGraph的三维数组类创建三维数组对象,用以存放纹理,采用OpenSceneGraph的二维数组类创建二维数组对象,用以存放纹理坐标;进行纹理映射,完成几何体对象与纹理坐标绑定;
[0018](2.4)将上述纹理坐标对象与几何体对象进行关联,并设置几何体的定点数组;
[0019](2.5)采用OpenSceneGraph的四维数组类创建颜色数组对象,将颜色对象关联到步骤(2.2)中创建的几何体对象上;并将所述包含目标物体纹理信息且带有透明度的图片分为20*20的小格子,将小格顶点坐标与颜色坐标一对一对应,完成纹理映射;
[0020](2.6)创建图片对象,将步骤⑴获得的包含目标物体纹理信息且带有透明度的图片数据存入该图片对象,并将图片对象关联至(2.1)中创建的纹理对象上;
[0021](2.7)采用OpenSceneGraph的属性对象类创建属性对象;获得纹理映射与属性设置完全的子图;
[0022]通过步骤(2)进行每一帧子图创建,在每一帧进行数据更新,完成图片基于自身的运动。
[0023]优选地,步骤(2.1)包括以下子步骤:
[0024](2.1.1)利用OpenSceneGraph的纹理类的设置纹理大小函数设置纹理对象大小;
[0025](2.1.2)利用OpenSceneGraph的属性类的设置纹理属性和模式函数设置纹理对象的纹理格式,使其具有透明度通道,以免系统自动对背景纹理填充颜色;
[0026](2.1.3)利用OpenSceneGraph的纹理类的设置过滤方式函数设置纹理过滤方式允许进行插值或者均和,指定放大缩小的函数。
[0027]优选地,步骤(2.7)包括以下子步骤:
[0028](2.7.1)利用OpenSceneGraph的属性类创建属性对象,设置纹理属性和模式,并将步骤(2.1)中获得的纹理对象关联到所述属性对象上;
[0029](2.7.2)利用OpenSceneGraph的属性类的设置模式函数关闭光照,以消除阴影对图片颜色的干扰;
[0030](2.7.3)利用OpenSceneGraph的属性类的设置模式函数开启纹理混合模式;
[0031](2.7.4)将所述属性对象关联到步骤(2.2)中获得的几何体对象。
[0032]总体而言,通过本发明所构思的以上技术方案与现有技术相比,能够取得下列有益效果:
[0033](I)本发明提供的三维动画制作方法,通过预处理删除原始图片的背景,采用带有透明度且删除背景的二维图片改变其纹理坐标及顶点对应关系产生动画效果;
[0034](2)本发明提供的三维动画制作方法,添加广告牌技术使图片始终面向视角,利用二维图片运动达到高度仿真三维动画视觉效果;
[0035](3)本发明提供的三维动画制作方法,利用二维图片运动达到高度仿真三维动画视觉效果,克服了传统模型动画实现的复杂性,大大减少了计算工作量;与传统利用骨骼动画等方法,本发明所提供的方法,减少了建模、设计精细模型的运动的工作,大大降低了制作难度和制作成本,但同时获得了良好的视觉效果。
【附图说明】
[0036]图1是本发明提供的基于OpenSceneGraph的三维动画制作方法的流程示意图;
[0037]图2为实施例中采用的原始图片;
[0038]图3为实施例中对原始图片进行背景删除后获得的图片;
[0039]图4为实施例中经过预处理后带有透明度信息的图片;
[0040]图5为实施例中基于OpenSceneGraph的三维动画效果图。
【具体实施方式】
[0041]为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
[0042]实施例以鱼类动画的制作为例,具体阐述本发明提供的动画制作方法;其流程如图1所示,包括图片预处理步骤、创建子图步骤、添加广告牌步骤、创建路径动画步骤、创建矩阵变化节点步骤、更新场景数据步骤、渲染绘制场景步骤。
[0043]实施例中,待处理的图片之一如图2所示;下面以图2所示图片为例,进一步阐述本发明提供的基于OSG的动画制作方法,该方法包括以下步骤:
[0044](I)对图2所示的原始图片进行预处理,利用图像处理软件对图2所示的原始图片进行背景删除处理,并存储为带有透明通道的图片;实施例中,利用Adobe Photoshop对原始图片进行预处理,具体步骤如下:
[0045](1.1)将原始图片添加至图层,并对图层进行栅格化;
[0046](1.2)采用魔术棒和套索工具,删除鱼体以外的背景部分,获得如图3所示去除背景的图片;
[0047](1.3)将图3获得的图片保存为带有透明度的png格式,如图4所示;
[0048](2)创建子图,包括如下子步骤:
[0049](2.1)利用OpenSceneGraph的二维纹理类创建OSG的二维纹理对象,命名为texture,用于创建图片纹理;设置该二维纹理对象的各项特征,包括以下子步骤:
[0050](2.1.1)利用OpenSceneGraph的二维纹理类的设置纹理大小函数,设置二维纹理对象texture的大小,包括纹理的宽度和高度;
[0051](2.1.2)利用OpenSceneGraph的二维纹理类的设置纹理格式函数,将texture内在纹理格式设为GL_RGBA格式(颜色空间RGBA);该格式具有alpha通道,在绘制三维场景时对带有透明度的图片不进行背景填充;
[0052](2.1.3)利用OpenSceneGraph的二维纹理类的设置纹理过滤方式函数设置二维纹理对象texture的过滤模式;由于提供的纹理图像与屏幕坐标大小不同,通过设置过滤模式,允许插值或均和,指定放大缩小的函数,设置为线性模式,用2*2的包含纹理数据的数组加权作为纹理;
[0053](2.2)利用OpenSceneGraph的几何体类创建几何体对象,命名为polyGeom,将该几何体对象PolyGeom设置为动态数据变量,以实现几何体的更新绘制,且该几何体对象指定polyGeom局部坐标系为笛卡尔坐标系;
[0054](2.3)利用OpenSceneGraph的三维数组向量类创建三维向量组对象,命名为vertices,利用OpenSceneGraph的二维数组向量类创建二维向量组对象,命名为texcoords,确定纹理坐标,进行纹理映射,完成几何体顶点与纹理坐标绑定;
[0055](2.4)将三维向量组对象vertices关联到几何体对象polyGeom,设置几何体对象polyGeom的定点数组;
[0056](2.5)创建子图坐标和纹理映射关系;具体包括以下步骤:
[0057](2.5.1)利用OpenSceneGraph的四维数组向量类创建颜色数组对象,将颜色对象关联到步骤(2.2)中创建的几何体对
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1