OpenGL导入3DS模型模拟服装试穿

2014-06-27 03:19祝双武兰振华
西安工程大学学报 2014年4期
关键词:人体模型曲面纹理

吕 珍,谢 倩,祝双武,兰振华

(1.西安工程大学 纺织与材料学院,陕西 西安 710048; 2.西安工程大学 服装与艺术设计学院,陕西 西安 710048; 3.河南省体育彩票管理中心 技术开发部,河南 郑州 450003)

0 引 言

目前,基于二维拓扑空间的服装CAD技术已很普遍且基本成熟并趋于稳定.相对于二维服装CAD而言,三维服装CAD具有立体、直观、易操作可提供真实的试衣效果等诸多优点.进入21世纪以来,三维建模技术飞速发展,例如袁铭等人提出的一种古建筑三维建模方法[1]为从现实世界获取数据并进一步在计算机世界进行加工建模提供了依据;古文物艺术造型的数字化与虚拟展示[2]、定制化人像产品[3]、皮影人物造型[4]等三维模型的研究均为虚拟三维人体模型的进一步发展奠定了基础.在织物的三维着装效果展示方面,有的学者在几何造型的基础上,以明暗处理和纹理映射技术来实现三维着装效果的真实感;部分学者在采用光照纹理进一步实现三维着装效果的真实感的描绘上进行了有益的探索.从产生的图像方面分析,能够较真实地反映二维图像的三维着装效果[5],但是纹理重复的均匀性依赖于构造服装模型的数据,其稀疏不均也会造成纹理分布不匀.

在利用人台进行三维服装展示时,人台、衣壳曲面的生成是建模的过程,也是三维服装真实感效果和纹理映射的基础,建模过程为:获得原始数据点并进行预处理→对数据插入,提高精度→构造三维模型点云→用Bezier曲面法填充模型[6].

开发三维服装CAD系统最基础的工作是建立三维人体及服装模型,而人体和服装形状为复杂的曲面,要对其进行较为精确的测量且获得全面细致的数据很困难.目前对于人体模型的获取方法如:王萍等人采用非接触式三维人体测量仪获取人体数据,并用Excel和Spss软件对数据进行分析[7];刘浩翰等人获得人体的三维数据并利用NURBS进行人体几何造型[8].人体模型的获取方法通常有两种:一种是通过采用三维坐标测量仪(或同类其他设备)测得人体三维数据为依据,并利用Bezier曲面或B样条曲面进行人体的拟合;另一种是以大量测得的人体三维数据为依据,利用三角面片对人体曲面进行重构[9-10].

本文在分析众多前人研究的基础上,找到了一种获取别人测量数据的简易方法.鉴于3D MAX优秀的三维制图功能且有众多三维人体模型资源,故可将此类标准人体模型文件内的有用人体曲面坐标信息提取出来,并利用三角面片对人体曲面进行重构.

1 应用技术分析

1.1 OpenGL技术和3DS技术相结合

OpenGL (开放性图形库,Open Graphic Library),是美国高级图形和高性能计算机系统公司SGI所开发的三维图形标准库,具有绘制三维图形的各项功能.以其为基础开发的应用程序可以方便地在各个平台间移植,特别是在三维图形的功能上非常优秀[11-12].然而OpenGL的专长并不是建模,因为OpenGL并没有提供建立三维模型的高级命令,它是通过基本的几何图元点、线及多边形建立三维立体模型.相比而言,利用3D Studio MAX建立三维立体模型则非常容易,但建立的模型缺乏编程性和可控制性,而这正是OpenGL的优势所在.基于此种情况,用3D Studio MAX建立三维立体模型导出为3DS文件,然后将3DS文件导入用Delphi搭建的CAD软件平台,可得到任何三维立体模型.

1.2 3DS的文件结构

根据3DS文件格式,利用计算机编程,从3DS文件中提取有用的人体曲面的顶点信息,用于接下来的三维人体曲面建模.

3DS文件结构由“块”组成,块中又有子块[13].每个块是一个层次结构,3DS文件有一个主块,ID是0x4D4D,这个块是3DS文件的开始(可以用它来鉴定该文件是否为一个3DS文件),在开始块后面是主要块,主体内容为块数据信息.每个3DS文件都包括一个块ID是“0x4D4D”的基本块.基本块是在3DS文件中必须存在的,也可用于检测一个文件是不是3DS文件,它由ID为“0x3D3D”的编辑块和ID为“0XB000”的关键帧块组成.3DS主要的几个块的ID及信息,如表1所示.

表1 3DS模型文件中几个主要的块ID及信息

1.3 3DS文件的读取

本文首先把所需块的ID定义为常量以便后续使用.

const

M3DMAGIC=$4D4D; //文件的开始

MDATA=$3D3D; //所有目标信息

KFDATA=$B000; //绘制框架,为MDATA定义

MAT-ENTRY=$AFFF; //材质信息开始

NAMED-OBJECT=$4000; //目标的相关数据(点、面…)

//对于MAT-ENTRY的定义

MAT-NAME=$A000; //材质名称

MAT-AMBIENT=$A010; //环境反射

MAT-DIFFUSE=$A020; //漫反射

MAT-SPECULAR=$A030; //镜面反射

MAT-SHININESS=$A040; //光源设定

MAT-TEXMAP=$A200; //纹理信息

MAT-MAPNAME=$A300; //材质纹理文件名

N-TRI-OBJECT=$4100; //对于每个目标的定义

POINT-ARRAY=$4110; //对象中定点信息

FACE-ARRAY=$4120; //对象中三角面信息

MSH-MAT-GROUP=$4130; //与三角面相关的材质信息

TEX-VERTS=$4140; //纹理坐标

基于以上所分析的3DS文件的结构,本文根据面向对象的编程思想,设计了T3DObject类、Tchunk类、TMaterial类、T3DModel类等4类来实现3DS模型的读取与重建.

在完成了3DS文件的读取工作之后,根据读入的各个顶点及其法向量,利用大量的三角面片来构造出人体和服装模型.关键算法为:

glBegin(GL_TRIANGLES);//通过参数GL-TRIANGLES绘制三角形

for F:=0 to FaceCount-1 do//将FaceCount所存各三角形顶点绘制,F为三角形个数

//顶点的遍历

for iVertex:=0 to 2 do//iVertex为每个三角形顶点;访问三角形三个点

begin

PointIndex:=Faces[F].VertIndex[iVertex];//找到每个点的索引号

glNormal3f(Normals[PointIndex].X,Normals[PointIndex].Y, Normals[PointIndex].Z);

//设置三角面的法向量,为画三角形准备

glVertex3f(Verts[PointIndex].X, Verts[PointIndex].Y, Verts[PointIndex].Z);

//设置三角形其中一个顶点的坐标

end;

glEnd;

2 对三维模型进行交互控制

3DS的特长是三维建模,OpenGL的优势则在于对三维模型进行交互控制和变化.根据三维图形的几何变换理论,OpenGL提供对三维对象在三维空间进行变化的库函数[14].

当矩阵初始化glLoadIdentity()后,调用OpenGL提供的glTranslatef()函数作视点变换.Void glTranslate{f,d}(TYPE x,TYPE y,TYPE z),函数参数(x,y,z)表示视点在视点坐标系中移动的位置.根据三维图形的几何变换理论,OpenGL提供对三维对象进行空间变化的库函数.由参数x,y,z定义了一个矩阵,该矩阵与当前矩阵相乘,这样的结果使物体在3个坐标轴上发生平移,平移的距离大小为x,y,z(或以相同的量移动局部坐标系).

当前矩阵乘以某一个矩阵,该矩阵使得一个物体(或局部坐标系)绕一条从原点到点(x,y,z)的线,沿逆时针方向旋转.参数angle给出旋转的角度值,旋转函数为:Void glRotate{f,d}(TYPE angle,TYPE x,TYPE y,TYPE z);

函数Void glScale{f,d}(TYPE x,TYPE y,TYPE z)定义了一个矩阵,与当前矩阵相乘,使得物体沿坐标轴拉伸、缩短以及相对于坐标轴做镜面反射.

这些函数可以使得到的三维人体模型在三维空间中作任意的变化,方便于服装设计者从多个角度来观察人体,如图1所示.

图1 不同角度观察服装人体模型

3 利用纹理映射技术模拟不同面料

纹理分为颜色纹理和几何纹理两种类型.生成颜色纹理的一般方法是在平面区域(即纹理空间)上预定义纹理图案,然后建立物体表面的点与纹理空间的点的对应关系(即映射).当物体表面的可见点确定以后,以纹理空间的对应点的值乘以亮度值,就可以把纹理图案附着在物体表面.也可以用类似的方法让物体表面产生凹凸不平的凸包纹理.不过这时的纹理作用在法向量上,而不是作用于颜色亮度.在织物所形成的服装表面,应该说两种纹理都存在,但是颜色纹理占主要地位.

在纺织品中,大多织物具有印花图案或织物纹理.只有把这种印花图案和织物纹理模拟出来,才能更好地体现织物的性质和穿着效果.可以通过纹理映射技术将织物图案映射到服装模型的表面,由此可以实现任意更换面料的目的,达到织物三维着装的仿真效果.

理论上,纹理映射的计算过程如下:(1)纹理图像的选取与预处理;(2)纹理映射三维曲面的建模;(3)确定纹理映射的方法和对应关系,包括反走样处理;(4)二维图像向三维曲面映射;(5)透视变换显示.

在服装曲面上实现图案纹理效果,实质上就是织物图案在物体表面上的映射.首先根据纹理图案和物体的边界定义,确定一个映射函数,然后使用逆向映射将图案映射到服装曲面空间.先将纹理图案空间点通过投影逆变换成服装曲面上的点,参数化成实际坐标(x,y,z),再利用映射函数求出相应的纹理元素的光亮度值作为该图像元素的明暗值,这实际上是一个坐标转化的过程.

要实现不同面料在服装上的模拟,只需将各种面料作为纹理图案映射到服装曲面上.在程序中进行服装曲面的三角面片模拟之前用OpenGL所提供的纹理映射函数绑定所选定的面料图片作为纹理图案,即可实现同一服装的不同面料的模拟效果,具体效果如图2所示.

图2 不同面料展示模拟

4 结束语

本文将3D Studio MAX技术、OpenGL软件与Delphi语言结合起来,兼用三者之长,将从3DS中提取的人体数据模型导入Delphi中,进一步将人体与服装结合达到量体裁衣的目的,对于特殊群体通过建立人体模型也可得出适合其体型的服装,最终在OpenGL中展示着装效果.整个建模过程无需繁琐的手工绘制及大量计算,更加智能化地从多角度观察不同材质的着装效果.该方法不仅可以应用在服装CAD方面,还可以应用到系统仿真、产品设计、工程分析、虚拟现实、大型游戏开发过程中的场景设计以及科学计算的可视化等各个方面.

参考文献:

[1] 袁铭,王建辉,周醉,等.一种古建筑三维建模方法——以苏州虎丘塔为例[J].苏州科技学院学报:工程技术版,2009,22(1):43-47.

[2] 张静,许洁.古文物艺术造型的数字化与虚拟展示[J].西安工程大学学报,2011,25(6):835-837.

[3] 王名亮.定制化人像产品三维建模知识库技术研究及应用[D].重庆:重庆大学,2013.

[4] 单超杰.皮影人物造型与三维建模技术结合的创新研究[D].上海:东华大学,2013.

[5] 张瑞云.用纹理映射技术实现三维着装效果展示[J].中国纺织大学学报,2000(4):53-56.

[6] 吴梦熊,胡建鹏,耿兆丰,等.纹理映射技术在三维虚拟服装模拟中的应用与实现[J].东华大学学报:自然科学版,2008,34(4):445-448.

[7] 王萍,张秀.基于三维人体测量的苏南地区青年女性体型特征[J].西安工程大学学报,2012,26(3):313-316.

[8] 刘浩翰,唐好选.人体的几何造型[J]. 中国民航学院学报,2003,21(增刊2):173-175.

[9] 李勇,胡敏,付小莉.三维人体建模方法的研究[J].纺织学报,2002,23(5):80-82.

[10] 冯毅力,李汝勤.人体模型的三维数据拾取和服装曲面的生成[J].纺织学报,2004,25(6):47-48.

[11] 杨东梅,朱胜缘,路伟成,等.OpenGL与3D Studio MAX结合实现三维仿真[J].应用科技,2004,31(2):33-35.

[12] WOO Mason,NEIDERF J,DAVIS Tom,et al.OpenGL编程权威指南[M].吴文武,段海波,薛风武,译.2版.北京:中国电力出版社,2001:1-2.

[13] 和平鸽工作室.OpenGL高级编程与可视化系统开发[M].北京:中国水利水电出版社,2003:74-81.

[14] FRANCIS S Hill J R,STEPHEN M Kelley.计算机图形学(OpenGL版)(影印版)[M].胡事民,刘利利,刘永进,等译.北京出版社,2010:258-277.

猜你喜欢
人体模型曲面纹理
简单拓扑图及几乎交错链环补中的闭曲面
基于BM3D的复杂纹理区域图像去噪
相交移动超曲面的亚纯映射的唯一性
使用纹理叠加添加艺术画特效
关于第二类曲面积分的几个阐述
TEXTURE ON TEXTURE质地上的纹理
基于曲面展开的自由曲面网格划分
消除凹凸纹理有妙招!
基于乘员体型的车辆安全性研究
Family makes 45—foot icicle in front yard