亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        三維動態(tài)反演人物模型構(gòu)建與數(shù)據(jù)載入研究

        2014-08-25 02:55:56卜祥報卜凡亮
        關(guān)鍵詞:動畫結(jié)構(gòu)模型

        吳 琦,卜祥報,卜凡亮

        (中國人民公安大學警務信息工程學院,北京 102623)

        0 引言

        偵查人員在進行犯罪案件過程分析時, 都是利用現(xiàn)場勘驗采集的二維圖像信息與案件現(xiàn)場的描述文字,這種傳統(tǒng)的方法缺乏直觀性和形象性,不利于案件偵破。案件過程的動態(tài)反演系統(tǒng)可以對案件過程進行三維仿真,有助于偵查人員對案情的了解。動態(tài)反演技術(shù)是20世紀末發(fā)展起來的新技術(shù),能夠?qū)崿F(xiàn)對某場景或某事件發(fā)生發(fā)展過程的動態(tài)重現(xiàn),且能夠?qū)χ噩F(xiàn)的場景狀態(tài)進行全視角觀察。在國外警務工作中,動態(tài)反演技術(shù)已被應用到現(xiàn)場勘驗、案件偵破、災害事故等的過程重現(xiàn)方面。國內(nèi)公安機關(guān)對動態(tài)反演技術(shù)的開發(fā)與使用重視程度還不高。目前常用動畫制作軟件主要有flash、maya、3ds max等,利用這些軟件雖然可以制作出形象逼真的人物動畫,但這些軟件側(cè)重于模型的建立,對模型的運動控制相對薄弱[1],不能滿足公安工作的需求。因此,針對公安工作特點而開發(fā)的動態(tài)反演系統(tǒng),需要綜合考慮模型建模與模型控制兩方面因素。人物模型是案件過程動態(tài)反演系統(tǒng)中使用最多的三維模型,因其結(jié)構(gòu)的復雜性又使它成為最難構(gòu)建的一類模型。

        本文重點研究案件過程動態(tài)反演中人物骨骼模型的構(gòu)建與數(shù)據(jù)載入。結(jié)合公安工作現(xiàn)實需求,利用專業(yè)建模軟件3ds max構(gòu)建人物骨骼模型,并將其載入到基于OpenGL繪制的三維案件場景中,實現(xiàn)案件過程的動態(tài)反演。

        1 人物骨骼模型的分析與構(gòu)建

        人體骨骼是一個十分復雜的結(jié)構(gòu),由200多塊骨骼組成。骨骼與肌肉、皮膚等組織共同完成人的行為動作[2]。人物骨骼模型的組織結(jié)構(gòu)根據(jù)使用領域的不同而各有特點,但都是參照人體骨骼運動原理,構(gòu)造一副骨骼層次架構(gòu)。驅(qū)動骨骼,實現(xiàn)三維人物模型運動。

        1.1 骨骼模型特點

        在能夠說明案件人物基本行為動作,重現(xiàn)案件發(fā)生發(fā)展過程的情況下,動態(tài)反演系統(tǒng)中使用的人物骨骼模型層次架構(gòu)應盡可能簡單。圖1所示為本文所使用的人物骨骼模型結(jié)構(gòu)。人物的動作大多集中在四肢,身體主軀干的運動在案件分析時可以忽略。為了簡化模型構(gòu)建與縮小數(shù)據(jù)量,將模型頭部、胸部、腹部合為一體,形成所示的“士”字結(jié)構(gòu),此結(jié)構(gòu)為人物模型的根骨骼節(jié)點,決定了模型的位置與朝向。其上連接四個子骨骼鏈,分別為左、右上肢和左、右下肢。模型上、下肢骨骼鏈為方向相反的同一結(jié)構(gòu),由圖2可以看出,每個子骨骼鏈由三個互為子父的骨骼組成,手與腳的結(jié)構(gòu)則簡化為一個節(jié)點。

        圖1 簡化骨骼模型

        圖2 骨骼模型層次結(jié)構(gòu)

        1.2 骨骼模型構(gòu)建

        根據(jù)簡化的骨骼模型結(jié)構(gòu),利用3ds max中骨骼建模工具對簡化的骨骼模型進行構(gòu)建,步驟如下:

        首先,建立人物模型主軀干結(jié)構(gòu),并將其組合為一體,如圖3(a)所示。其次,創(chuàng)建四肢骨骼鏈結(jié)構(gòu),為其添加反向運動學的“HI IK解算器”,如圖3(b)所示。最后,將四肢骨骼鏈與模型主軀干相鏈接,完成人物骨骼模型的構(gòu)建,如圖1所示。

        圖3 人物骨骼模型構(gòu)建

        1.3 骨骼模型動畫設置

        在案件過程的動態(tài)反演系統(tǒng)中,所需人物骨骼模型動作簡單,不追求其觀賞性與藝術(shù)性,能夠正確演示人物普通動作即可,如:行走、跳躍、射擊、跌倒等。在3ds max中,選擇使用“設置關(guān)鍵點”模式對人物骨骼模型進行動畫設置,手動調(diào)整每個關(guān)鍵點,根據(jù)案件動態(tài)反演需求控制當前幀模型的動畫形態(tài)[3]。如圖4所示,為同一模型設置不同的運動數(shù)據(jù)。

        圖4 人物骨骼模型的動畫設置

        2 動態(tài)反演模型數(shù)據(jù)載入

        數(shù)據(jù)載入的基本思路是將3ds max、maya之類的工具以直觀的方式建立的物體模型保存成特定的文件格式,再用專門的解碼工具將模型轉(zhuǎn)換成一系列的節(jié)點(node),使OpenGL能夠正確顯示。解碼工具有三類:插件、工具軟件、程序庫[4]。為了使動態(tài)反演系統(tǒng)各功能模塊更易于開發(fā)利用,本文使用程序庫的方法,創(chuàng)建模型數(shù)據(jù)載入模塊,人物骨骼模型為.3ds格式文件,該格式能夠存儲模型的動畫數(shù)據(jù),且易于讀取。

        2.1 3ds格式文件

        3ds文件格式是由塊組成的樹形層次結(jié)構(gòu),每個塊結(jié)構(gòu)由兩部分組成,塊信息(占用6個字節(jié))與塊內(nèi)容(大小由所載內(nèi)容而定)。塊信息又分為兩部分,塊ID(占用2個字節(jié))和塊長度(占用4個字節(jié))。根據(jù)塊ID確定了一個層次結(jié)構(gòu),又根據(jù)塊的長度可以確定下一個塊的起始位置(塊的長度減去6就是塊內(nèi)容的長度)。正因為塊的這種結(jié)構(gòu)特點,在讀取模型數(shù)據(jù)過程中可以跳過那些不需要的塊,直接獲取所需的模型信息,提高工作效率[5]。由表1可以看出各個塊結(jié)構(gòu)所含的模型信息。

        2.2 數(shù)據(jù)載入方法

        (1)自定義模型文件數(shù)據(jù)格式。

        struct Lib3dsFile {

        表1 各塊ID代表信息

        Lib3dsDword mesh_version; ∥網(wǎng)格版本

        Lib3dsWord keyf_revision; ∥關(guān)鍵幀版本

        char name[12+1]; ∥文件名

        Lib3dsFloat master_scale; ∥比例值

        Lib3dsVector construction_plane; ∥頂點

        Lib3dsRgb ambient; ∥顏色信息

        Lib3dsShadow shadow; ∥陰影信息

        Lib3dsIntd frames; ∥動畫幀信息

        Lib3dsIntd segment_from; ∥由上層結(jié)構(gòu)獲取的數(shù)據(jù)

        Lib3dsIntd segment_to; ∥向下層結(jié)構(gòu)傳遞的數(shù)據(jù)

        Lib3dsIntd current_frame; ∥當前動畫幀信息

        Lib3dsMaterial *materials; ∥材質(zhì)信息

        Lib3dsMesh *meshes; ∥網(wǎng)格信息

        Lib3dsNode *nodes; ∥節(jié)點信息

        };

        (2)對人物模型數(shù)據(jù)進行讀取操作,使其存儲在(1)中定義的格式。

        ∥載入3ds數(shù)據(jù)文件,filename為文件存儲路徑。

        Lib3dsFile* lib3ds_file_load(const char *filename){

        FILE *f;

        Lib3dsFile *file;

        Lib3dsIo *io;

        ∥以讀寫的方式打開模型文件。

        f=fopen(filename,"rb");

        ∥如果未能正常打開模型文件,則返回數(shù)值0。

        if (!f) {

        return(0);

        }

        ∥創(chuàng)建并返回一個自定義結(jié)構(gòu)的文件格式,如果未能創(chuàng)建返回NULL。

        file = lib3ds_file_new();

        ∥如果未能正確創(chuàng)建,則關(guān)閉文件。

        if (!file) {

        fclose(f);

        return(0);

        }

        ∥創(chuàng)建一系列用于輸入輸出的函數(shù),io為指向這些函數(shù)的指針。

        io = lib3ds_io_new(

        f,

        fileio_error_func,

        fileio_seek_func,

        fileio_tell_func,

        fileio_read_func,

        fileio_write_func

        );

        ∥如果未能正確創(chuàng)建,則釋放模型文件對象及其所有資源,關(guān)閉文件。

        if (!io) {

        lib3ds_file_free(file);

        fclose(f);

        return(0);

        }

        ∥讀取模型文件數(shù)據(jù)進入自定義格式對象中,如果成功返回真,失敗則執(zhí)行if語句。

        if (!lib3ds_file_read(file, io)){

        free(file);

        lib3ds_io_free(io);

        fclose(f);

        return(0);

        }

        ∥釋放io指向的輸入輸出函數(shù)。

        lib3ds_io_free(io);

        ∥關(guān)閉文件。

        fclose(f);

        ∥返回讀取的文件。

        return(file);

        }

        (3)應用顯示列表在OpenGL的場景中繪制模型。

        ∥因為3ds數(shù)據(jù)結(jié)構(gòu)為樹形結(jié)構(gòu),所以遞歸調(diào)用render_node函數(shù),循環(huán)繪制每個節(jié)點。

        render_node(Lib3dsNode *node){

        ASSERT(file);{

        Lib3dsNode *p;

        for (p=node->childs; p!=0; p=p->next) {

        render_node(p);

        }

        }

        ……

        ∥調(diào)用顯示列表

        if (mesh->user.d) {

        Lib3dsObjectData *d;

        glPushMatrix();

        d=&node->data.object;

        glMultMatrixf(&node->matrix[0][0]);

        glTranslatef(-d->pivot[0], -d->pivot[1], -d->pivot[2]);

        glCallList(mesh->user.d);

        glPopMatrix();

        if( flush )

        glFlush();

        }

        (4)關(guān)鍵幀數(shù)據(jù)的調(diào)用

        timer_cb(int value){

        ∥標記當前窗口需要重新繪制

        glutPostRedisplay();

        ∥控制模型動畫幀循環(huán),超出后返回第0幀

        if (!halt) {

        current_frame+=1.0;

        if (current_frame>file->frames) {

        current_frame=0;

        }

        ∥計算當前幀下模型節(jié)點的數(shù)量

        lib3ds_file_eval(file, current_frame);

        ∥定時器的回調(diào)函數(shù)

        glutTimerFunc(10, timer_cb, 0);

        }

        }

        3 實驗與分析

        在3ds max中設計制作完成骨骼動畫后,將其載入動態(tài)反演系統(tǒng)框架中進行演示。為了提高模型的重復利用率,不在模型制作階段進行骨骼蒙皮,而是在最終制作案件過程動態(tài)反演時根據(jù)需求為模型綁定蒙皮。因此,本文只進行骨架層次結(jié)構(gòu)與動畫數(shù)據(jù)的載入。

        在Visual Studio 2010中建立Win32控制臺應用程序,用OpenGL圖形接口創(chuàng)建案件三維場景。根據(jù)案件重建需求,在場景中選擇添加地面以及全景圖。載入模型數(shù)據(jù),通過鼠標與鍵盤的操作,可以控制不同視口觀察模型的運動過程。系統(tǒng)運行仿真結(jié)果如圖5所示。

        仿真結(jié)果表明,創(chuàng)建的人物骨骼層級模型結(jié)構(gòu)簡單,易于讀取和顯示。模型動畫流暢真實,在程序中加入計算幀率的代碼,顯示動畫每秒達到60幀,且沒有出現(xiàn)一般模型動畫中人物在地面滑行的情況。模型與案件場景融合較好,能夠正確、直觀地分辨出模型動作,完全可以滿足案件偵查人員對案件分析、匯報等工作的需求。本實驗仿真中對模型的控制操作較少,僅能實現(xiàn)對攝像機視角的控制,不能隨意切換模型動作,設定模型初始載入點與朝向。實驗程序只能載入一個模型,還不能滿足對于多人作案、有受害人等情形的案件過程重現(xiàn)。本文的數(shù)據(jù)載入是將所有模型數(shù)據(jù)作為一個整體載入到場景中,且是在Win32控制臺應用程序中實現(xiàn)的。創(chuàng)建案件過程動態(tài)反演系統(tǒng)中的模型數(shù)據(jù)載入模塊,還需要進一步將其與MFC應用程序框架相結(jié)合,優(yōu)化操作界面,增加系統(tǒng)交互性,并將數(shù)據(jù)載入細分為靜態(tài)模型與模型動畫兩部分,添加更多的案件資料,充實動態(tài)反演系統(tǒng)。

        圖5 動態(tài)反演人物骨骼模型顯示

        4 結(jié)論

        本文主要討論了公安領域所需動態(tài)反演人物骨骼模型的結(jié)構(gòu)特點、制作方案,以及模型數(shù)據(jù)的載入方法。創(chuàng)建了特點鮮明的人物骨骼模型,并為其設定了基本人物特征動作,實現(xiàn)了在動態(tài)反演系統(tǒng)窗口的顯示。本文提出的方法與思路,能夠初步滿足案件過程的動態(tài)反演系統(tǒng)需求,為科學辦案提供技術(shù)支撐。但該方法還存在一些不足,以后的研究主要集中在正確讀取與顯示綁定蒙皮的人物骨骼動畫模型,多個動態(tài)模型多次添加,以及對載入的人物模型進行運動控制等方面。

        [1]和平鴿工作室.OpenGL高級編程與可視化系統(tǒng)開發(fā) 系統(tǒng)開發(fā)篇[M].北京:中國水利水電出版社,2005:1.

        [2]王曉.角色動畫在游戲中的設計及實現(xiàn)[D].上海:上海交通大學,2012.

        [3]王珂.全視頻3ds Max動畫設計與制作深度剖析[M].北京:清華大學出版社,2013: 2-5.

        [4]游資網(wǎng). OpenGL 入門教程(七)[EB/OL].(2006-04-13).[2014-03-31].http:∥dev.gameres.com/Program/Visual/3D/OpenGLTutorial/OpenGL_7.htm.

        [5]The Labs. Com. 3D Studio File Format (3ds) [EB/OL].(2013-10-11).[ 2014-03-31]. http:∥www.the-labs.com/Blender/3dsspec.html.

        猜你喜歡
        動畫結(jié)構(gòu)模型
        一半模型
        《形而上學》△卷的結(jié)構(gòu)和位置
        哲學評論(2021年2期)2021-08-22 01:53:34
        做個動畫給你看
        重要模型『一線三等角』
        動畫發(fā)展史
        重尾非線性自回歸模型自加權(quán)M-估計的漸近分布
        我的動畫夢
        文苑(2019年22期)2019-12-07 05:28:56
        論結(jié)構(gòu)
        中華詩詞(2019年7期)2019-11-25 01:43:04
        論《日出》的結(jié)構(gòu)
        3D打印中的模型分割與打包
        国产精品久久久久久久妇| 丰满人妻一区二区三区52| 一区二区在线观看日本视频| 色婷婷五月综合激情中文字幕| 亚洲国产韩国欧美在线| 日韩亚洲中文图片小说| 亚洲国产一区中文字幕| 国产无套内射又大又猛又粗又爽| 国产丝袜在线精品丝袜| 97中文字幕在线观看| 东京热日本道免费高清| 亚洲av无码成人精品国产| 性生交大片免费看淑女出招 | 日本高清视频www| 国产成人精品三级91在线影院 | 久久精品国产99精品国偷| av免费在线手机观看| 国产毛片黄片一区二区三区| 好看的欧美熟妇www在线| 亚洲午夜无码AV不卡| 日韩av一区二区无卡| 免费观看a级毛片| 欧美与黑人午夜性猛交久久久| 中文字幕久久精品波多野结百度| 女主播国产专区在线观看| 又湿又紧又大又爽a视频国产| 精品久久久久久久中文字幕| 久久综合一本中文字幕| 在线观看亚洲av每日更新影片 | 亚洲一区二区三区偷拍女| 国产av无码专区亚洲av中文| 亚洲综合色秘密影院秘密影院| 男女啪啪免费视频网址| 男人吃奶摸下挵进去啪啪软件| 性久久久久久久| 区无码字幕中文色| 亚洲黄色一级在线观看| 中国丰满熟妇xxxx性| 纯肉无遮挡H肉动漫在线观看国产| 夜色视频在线观看麻豆| 国产激情视频在线观看的|