APP下载

基于视频数据与三维模型的虚拟场景生成

2018-02-28宋田茹童立靖李思哲高思琨

电子技术与软件工程 2018年23期
关键词:三维模型

宋田茹 童立靖 李思哲 高思琨

摘要

该文为设计与实现一个基于视频数据与三维模型的虚拟场景生成系统。先构建一个基于OpenGL的三维模型开发平台,在此平台上完成三维模型的载入、几何变换、人机交互等功能。然后用摄像机采集某一特定场景的视频数据,并对视频数据进行视频解码,提取其各帧的图像数据。在开发平台上基于解析的图像数据完成三维场景的背景构建,同时构建三维人体的静态模型,通过程序对三维人体静态模型各部分进行空间几何变化,完成三维人体的运动模拟,并与背景图像进行合成,从而完成基于特定场景的人物运动的虚拟场景生成。

【关键词】三维模型 人体运动 OpenGL 视频解码

1 引言

OpenGL是由SGI公司推出的一种图形与硬件的接口,包括120个图形函数,开发者可以用这些函数来建立三维模型和进行三维实时交互。由于其强大的图形可视化功能且易于使用,已被认为是高性能图形和交互式视景处理的标准。

目前基于OpenGL的三维图形开发正快速涌现,尤其是一些游戏制作中,虚拟场景的构建、运动仿真、科学计算可视化等更是关键环节。本文基于Windows下的OpenGL开发技术和方法,借助Visual Studio实现简单的三维模型及虚拟场景,有一定的参考价值。

2 三维模型的导入

通过3dsMax将人物模型以OpenGL可处理的格式(OBJ文件格式)导出,然后基于该文件进行模型的导入。

2.1 OBJ文件格式简介

OBJ模型文件为文本类型,定义了对象的几何和其它的一些特性,其文件结构非常简单,保存的是一些多边形的信息,如顶点的几何坐标、纹理坐标等,适合在应用程序中读取或进行3D文件格式转换。这里的OBJ文件是一种定义物体几何模型的3D文件。OBJ文件可以是二进制文件,也可以是ASCⅡ文件,其中二进制格式文件的扩展名是.mod,ASCⅡ格式文件的扩展名是.obj。

OBJ文件不需要任何种文件头,整个文件由一行行文本组成,每一行以关键字开头,关键字可以说明该行数据的属性。常用的关键字如下:

v:几何体顶点(Geometric vertices)。表示本行指定一个顶点。此前缀后面跟着3个单精度浮点数,分别表示该定点的X、Y、Z坐标值。

Vt:纹理坐标点(Texture vertices)。表示本行指定一个纹理坐标。此前缀后跟着两个单精度浮点数,分别表示此纹理坐标的U、V值。

Vn:顶点法线(Vertex normals)。表示本行指定一个法线向量。此前缀后跟着3个单精度浮点数,分别表示该法向量的X、Y、Z坐标值。

usemtl:材质名称(Material name)

mtllib:材质库(Material library)。

2.2 分析OBJ文件并导入三维模型

在OBJ文件的基础上建立对应的模型数据结构,存储顶点信息、纹理信息等。通过编写针对于OBJ文件的有效数据提取函数,对每行数据进行切割分析,提取出该行中具体的点的坐标并进行绘制。

3 纹理映射

在三维图形中,纹理映射(TextureMapping)的方法运用广泛,对模型进行纹理贴图可以增强三维场景绘制的真实感,并能提高三维场景的渲染速度。纹理映射的本质是对三维物体进行二维参数化,即先求得三维物体表面上任一点的二维(x,y)参数值,进而得到该点的纹理值。

在程序中,一个纹理图像就是一个一维或二维数组,存储每一个像素的颜色值(包括R、G、B、A分值)。纹理贴图,就是把纹理图像根据纹理坐标对应到图元上。

OpenGL支持4种基本的纹理图:1D纹理、2D纹理、3D纹理和立体纹理。在光栅化期间,OpenGL通过插值计算纹理坐标,并将其赋给每个生成的片元。OpenGL将这些坐标作为索引,以获取纹理图像中的纹素。然后根据纹理状态参数修改片元的主颜色。

纹理映射的基本步骤如下:

(1)生成纹理。使用glGenTextureso获得未用的纹理对象标识符;

(2)控制纹理使用glTexParameter()设置纹理对象的状态参数;

(3)定义纹理。使用glTexImage2D()指定纹理图像;

(4)绑定纹理。使用glBindTexture()绑定纹理对象;

(5)使用glEnable()启用纹理映射;

(6)绘制场景,给出顶点的纹理坐标和几何坐标。

纹理贴图的主要流程如图1所示。

4 动态场景的生成

OpenGL能够提供高效的实时动画响应。由于具有能对动画颜色、深度、模板和累积进行双缓存的操作函数,OpenGL能对动画实现连续显示,不但大幅简便了程序算法,还可以提升画面动态显示的速度。

繪制动态场景,首先要收集足够多的与人物模型相适应的纹理图片。纹理图片的收集主要依靠单反相机,由于三维建模对素材图片的要求比较高,在相机的设置和拍摄时间选择上应注意拍摄前应把相机的拍摄质量设置高些,一般要求在3MB以上;拍摄时间应尽量选择阳光能够照射到建筑物大部分表面的时候,这样拍摄的图片便于后期的纹理处理。

然后基于OpenCV库来实现的视频分割,将获取到的视频转换为一帧帧的图像。在转换过程中,用到了OpenCV提供的VideoWriter、VideoCapture类,最终完成分割任务。

最后在将得到的纹理图作为人物的背景图,设置定时器,定时更换图片,结合人物的运动,形成人物在某空间行走的感觉。

5 实验结果

基于上述描述方法及过程,将三维人物模型导入到了搭建好的OpenGL平台上,如图2,并进行纹理映射,如图3所示

给人物模型加上背景图,如图4所示。

6 结语

本文提供一种基于特点场景的人物运动的虚拟场景生成方法,首先将三维模型载入实验平台,然后对该模型进行纹理映射。通过摄像机采集某一特点场景的视频数据并进行视频解码,提取其各帧的图像数据,然后将图像数据导入到开发平台上,从而完成三维场景的背景构建。最后将背景与人物动态相结合,从而实现基于特点场景的人物运动的虚拟场景生成。

参考文献

[1]李婷婷,余庆军.基于OpenGL的交互式虚拟漫游系统开发研究[J].计算机技术与发展,2018,28(01):131-133.

[2]贺琼,李涛,张文杰.纹理贴图的硬件实现与验证[J].信息技术,2018,2:116-120.

[3]卢婧宇,符智棱,李婷婷.三维模型建模方法的总结及其应用[Jl,电子技术与软件工程,2018:200-202.

[4]周碧佳.三维虚拟场景关键技术研究[J].软件导刊,2016,15(01):179-181.

猜你喜欢

三维模型
数字化人体图像和三维模型在解剖教学中的应用
虚拟仿真技术在家畜解剖教学中的应用
基于WebGL的三维物理模型设计与开发
基于SolidWorks的零件建模参数化设计应用简析
西南地区男青年标准人体三维模型的建立