HOME 首頁
SERVICE 服務(wù)產(chǎn)品
XINMEITI 新媒體代運營
CASE 服務(wù)案例
NEWS 熱點資訊
ABOUT 關(guān)于我們
CONTACT 聯(lián)系我們
創(chuàng)意嶺
讓品牌有溫度、有情感
專注品牌策劃15年

    全身人像模型制作過程

    發(fā)布時間:2023-04-28 20:22:23     稿源: 創(chuàng)意嶺    閱讀: 1043        

    大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關(guān)于全身人像模型制作過程的問題,以下是小編對此問題的歸納整理,讓我們一起來看看吧。Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    創(chuàng)意嶺作為行業(yè)內(nèi)優(yōu)秀企業(yè),服務(wù)客戶遍布全國,設(shè)計相關(guān)業(yè)務(wù)請撥打175-8598-2043,或微信:1454722008Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    本文目錄:Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    全身人像模型制作過程

    一、如何制作一個3D的人物模型Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    首先你要學(xué)會用3DMAX 根據(jù)個人機器的系統(tǒng)還要選擇不同版本3DMAX08-3DMAX13 都有不同的功能和兼容性 你可以去模型云那里下載 里面除了這些版本軟件 還有一些3DMAX的基礎(chǔ)教程 希望可以幫到你 Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    二、怎樣用3D max制作人物模型的方法,要詳細(xì)。Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    DOgame游戲兵工廠上邊有具體的教程,非常詳細(xì),你去看下吧! Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    三、PS人像后期處理的大致流程是怎樣的Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    使用PS進(jìn)行人像后期處理步驟如下:Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    1、先打開PS軟件,插入要修圖的人物照片并按快捷鍵Ctrl+J復(fù)制一層新的圖層,防止破壞原來的照片;Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    2、接下來,看ps上一排欄里,通過選擇濾鏡-雜色-減少雜色,然后跳出頁面,點擊高級與每通道,選擇設(shè)置參數(shù)紅、強度10、保留細(xì)節(jié)100%。Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    3、上步驟結(jié)束以后,再次選擇濾鏡-銳化-USM銳化,在跳出的界面選填數(shù)據(jù),命令參數(shù)設(shè)置數(shù)量為80,半徑為1.5,閾值為4 ;Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    4、接下來以后對照片進(jìn)行變白處理,記住快捷鍵Ctrl+Shift+Alt+N,重新建立一個透明層;Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    5、然后建完以后,在點擊上排的通道,按住快捷鍵Ctrl鍵點擊RGB通道一直不放手,出現(xiàn)選區(qū);Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    6、再次回到剛才的透明層,在選區(qū)里將它填充為白色;Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    7、結(jié)束以后,在這個圖層點擊左鍵填加蒙版,再用黑畫筆涂掉不需變白的部分;Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    8、如果還沒有達(dá)到效果的話,可適當(dāng)降低亮度,根據(jù)自己的需求進(jìn)行調(diào)整,這樣就可以了。Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    9、最后是不是人物看起來好很多呢?Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    四、如何做人體骨架模型?Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    本文提供一種將骨架動作矢量映射到人體骨架模型的一種方法,通過輸入各個骨骼的當(dāng)前方向,反饋給骨架模型,這樣就實現(xiàn)了動畫的效果。實驗開發(fā)工具是VC6.0在OpenGL平臺上開發(fā)完成。Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    閱讀對象:Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    假定讀者已經(jīng)熟悉OpenGL編程,就算不熟悉,只要了解基本的旋轉(zhuǎn),平移,堆棧操作就好。Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    假定讀者已經(jīng)了解基本的c++編程,其中需要了解遞歸的算法,遞歸的方法請參考一下數(shù)據(jù)結(jié)構(gòu)吧。Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    制作過程:Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    第一步,3D模型準(zhǔn)備Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    這一步驟的目的是提供分解的骨骼模型,它需要導(dǎo)出多個組成身體結(jié)構(gòu)的文件,模型可以不用自己制作,只要到網(wǎng)上找找吧,應(yīng)該很多,最好是是人體模型,如果用動物的模型也可以,不過需要自己定義映射骨架了,比如圖中的骷髏模型是我從人體動畫軟件poser 5.0找到的。然后使用3d max 將身體的各個部位導(dǎo)出為3ds文件,這個步驟很簡單,也不需要有什么3d max的基礎(chǔ)。這里有一個小的技巧就是可以選中多個部分作為一個3ds模型導(dǎo)出,比如我需要將左右肩胛骨與脊椎骨肋骨作為同一個部分導(dǎo)出,這樣可以將它命名為身體軀干(body)。這樣我們就準(zhǔn)備了各個3ds文件了,分別是:Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    身體軀干 BODY.3DSUve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    頭部 HEAD.3DSUve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    左臂 LSHOULDER.3DSUve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    右臂 RSHOULDER.3DSUve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    左小臂 LELBOW.3DSUve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    右小臂 RELBOW.3DSUve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    左大腿 LTHIGH.3DSUve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    右大腿 RTHIGH.3DSUve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    左小腿 LFEET.3DSUve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    右小腿 RFEET.3DSUve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    這樣這些組成部分就可以靈活的拼接出一個人體來了。Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    第二步,定義相關(guān)的核心數(shù)據(jù)結(jié)構(gòu)Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    為了得到運動的各個身體部分?jǐn)?shù)據(jù)信息,我們需要存儲一些運動信息,主要有:Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    骨骼IDUve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    骨骼關(guān)節(jié)的當(dāng)前位置;r_x,r_y,r_zUve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    骨骼之間的關(guān)系,例如手臂是軀干的延伸,而左小臂是左臂的延伸;PID,CIDUve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    我們可以通過下圖來了解骨骼之間的結(jié)構(gòu)關(guān)系Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    存放3ds文件位置;file_name_3dsUve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    3ds模型的初始化方向;這個是比較抽象一點的概念,它是指從父節(jié)點指向子節(jié)點的方向,例如左小臂的初始位置是平放向下,那么對應(yīng)的矢量就是 (-0.2,-1,0)Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    以下是數(shù)據(jù)結(jié)構(gòu)部分:Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    class boneUve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    {Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    public:Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    int y;Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    int x;Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    int r_z; //現(xiàn)實世界z坐標(biāo)Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    int r_y;Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    int r_x;Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    int rotated_X; //旋轉(zhuǎn)后的坐標(biāo)Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    int rotated_Y;Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    int is_marked; //是否已經(jīng)標(biāo)記Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    int PID; //父節(jié)點Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    int CID; //子節(jié)點,目前針對軸關(guān)節(jié)和膝蓋有效Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    float start_arc_x,end_arc_x; //相對父節(jié)點的x 左右方向轉(zhuǎn)動角度限制Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    float start_arc_y,end_arc_y; //相對父節(jié)點的y 上下方向轉(zhuǎn)動角度限制Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    float start_arc_z,end_arc_z; //相對父節(jié)點的z 前后方向轉(zhuǎn)動角度限制Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    double LengthRatio;Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    char name[80]; //名稱Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    char file_name_3ds[180]; //3ds文件名稱Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    int ID;Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    bone(int ID,char *name,int PID);Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    virtual ~bone();Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    float bone_init_x,bone_init_y,bone_init_z; //初始化骨骼的矢量方向,3d max 模型Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    };Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    第三步,初始化骨架結(jié)構(gòu)Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    在定義了bone的結(jié)構(gòu)以后,我們定義一個skeleton類來在第一次初始化時加載這些結(jié)構(gòu),Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    obone = bone (2,"head",1); //定義一個boneUve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    strcpy(obone.file_name_3ds,"head.3DS"); //設(shè)置它的3ds文件名Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    obone.bone_init_x = 0; //初始化骨骼的矢量方向Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    obone.bone_init_y = 1;Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    obone.bone_init_z = 0;Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    bonevec.push_back (obone); //放入vector結(jié)構(gòu),這里用到了STL編程技術(shù)中的vectorUve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    以下是實現(xiàn)的部分代碼:Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    skelecton::skelecton()Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    {Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    float fy = 0.56f ;Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    float ftx = 0.19f;Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    float ffx = 0.08f;Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    bone obone = bone (1,"neck",0);Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    bonevec.push_back (obone);Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    obone = bone (2,"head",1);Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    strcpy(obone.file_name_3ds,"head.3DS");Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    obone.bone_init_x = 0;Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    obone.bone_init_y = 1;Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    obone.bone_init_z = 0;Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    bonevec.push_back (obone);Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    obone = bone (3,"rShoulder",1);Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    bonevec.push_back (obone);Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    obone = bone (4,"lShoulder",1);Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    bonevec.push_back (obone);Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    obone = bone (5,"rElbow",3);Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    strcpy(obone.file_name_3ds,"rShoulder.3DS");Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    obone.bone_init_x = fy;Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    obone.bone_init_y = -1;Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    obone.bone_init_z = 0;Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    obone.CID = 7;Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    bonevec.push_back (obone);Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    obone = bone (6,"lElbow",4);Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    strcpy(obone.file_name_3ds,"lShoulder.3DS");Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    obone.bone_init_x = -fy;Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    obone.bone_init_y = -1;Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    obone.bone_init_z = 0;Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    obone.CID = 8;Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    bonevec.push_back (obone);Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    //.............太長只給出部分的代碼..........................Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    }Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    第四步,學(xué)習(xí)3ds公共的類CLoad3DS,可以用來載入顯示模型Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    這個類是公用一個類,詳細(xì)的類CLoad3DS的接口信息可以到一個open source項目里參考。http://scourge.sourceforge.netUve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    http://scourge.sourceforge.net/api/3ds_8h-source.htmlUve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    實際上在使用這個類時候,我做了一些修改,加了得到最大頂點的方法。這個在第五步會說明。Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    我們定義一個OpenGL的類來做模型控制類,負(fù)責(zé)載入模型,Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    CLoad3DS* m_3ds;Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    int OpenGL::Load3DS(int ID, char *filename)Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    {Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    if(m_3ds!=NULL) m_3ds->Init(filename,ID);Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    return 0;Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    }Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    然后在顯示時候調(diào)用Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    int OpenGL::show3ds(int ID)Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    {Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    m_3ds->show3ds(ID,0,0,0,2);Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    return 0;Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    }Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    第五步,使用遞歸方法分層次載入模型Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    這里是重點的內(nèi)容了,讓我們思考一些問題,實現(xiàn)骨骼會隨著輸入的方向而改變方向,需要做那些事情呢?Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    首先針對一塊骨骼來考慮:Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    第一,我們需要讓骨骼繞著它的節(jié)點旋轉(zhuǎn)到輸入的方向上Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    第二,我們需要知道骨骼目前節(jié)點的位置,才能旋轉(zhuǎn)??墒俏覀冎拦趋罆母腹趋擂D(zhuǎn)動的,例如左小臂會跟著左臂轉(zhuǎn)動,當(dāng)身體轉(zhuǎn)動時左臂也會跟著身體轉(zhuǎn)動的,這里看起來像是有一個父子連動的關(guān)系,所以當(dāng)前節(jié)點的位置會與它的父骨骼有關(guān),父骨骼轉(zhuǎn)動的角度,子骨骼也必須轉(zhuǎn)動,所以這里自然想到了遞歸模型了,至于如何存儲這些轉(zhuǎn)動過程呢,還好openGL提供了glPushMatrix();glPopMatrix();那么所有的子骨骼必須包含在父骨骼的glPushMatrix();glPopMatrix();好了,這個變成Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    //遞歸實現(xiàn)3d現(xiàn)實Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    int skelecton::Render_skeleton_3D(int ID)Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    {Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    glPushMatrix(); //開始記錄堆棧Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    joint_point = pgl->get_joint_point(ID); //找到節(jié)點位置Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    glTranslatef(joint_point.x,joint_point.y,joint_point.z); //坐標(biāo)移到節(jié)點位置Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    pgl->rotate_bone (vt1,vt2,vto); //旋轉(zhuǎn)骨骼到指定的方向Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    glTranslatef(-joint_point.x,-joint_point.y,-joint_point.z);//坐標(biāo)移回來Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    pgl->show3ds(ID); //顯示模型Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    //遍歷子節(jié)點Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    for (theIterator = bonevec.begin(); theIterator != bonevec.end(); theIterator++)Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    {Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    pbone = theIterator;Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    if((pbone->PID == ID) )Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    {Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    Render_skeleton_3D(pbone->ID); //遞歸調(diào)用Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    }Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    }Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    glPopMatrix(); //退出記錄堆棧Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    }Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    剩下需要解決的問題就是如何找到節(jié)點位置。Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    尋找節(jié)點位置,我們看到上面代碼 get_joint_point(ID)就是找到節(jié)點了,其實如果不追求高的準(zhǔn)確度,我們可以假設(shè)每個模型的最高的點即為骨骼的節(jié)點,當(dāng)然這個假設(shè)前提是人體模型是正面站立的,手臂自然垂下,這樣可以近似認(rèn)為每個模型的最高的點即為骨骼的節(jié)點,這樣函數(shù)就很簡單了,這個方法是修改了Cload3ds類的方法,如下:Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    Vector3f CLoad3DS::get_joint_point(int j0)Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    {Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    CVector3 LastPoint;Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    Vector3f vect;Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    LastPoint.y = -1000 ;Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    if(j0==2) LastPoint.y = 1000 ;//頭部節(jié)點朝下Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    // 遍歷模型中所有的對象Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    for(int l = 0; l < g_3DModel[j0].numOfObjects; l++)Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    {Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    if(g_3DModel[j0].pObject.size() <= 0) break;// 如果對象的大小小于0,則退出Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    t3DObject *pObject = &g_3DModel[j0].pObject[l];// 獲得當(dāng)前顯示的對象Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    for(int j = 0; j < pObject->numOfFaces; j++) // 遍歷所有的面Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    {Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    for(int tex = 0; tex < 3; tex++) // 遍歷三角形的所有點Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    {Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    int index = pObject->pFaces[j].vertIndex[tex]; // 獲得面對每個點的索引Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    if(j0==2)Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    {Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    if(pObject->pVerts[index].y < LastPoint.y )Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    LastPoint = pObject->pVerts[index];Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    }Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    elseUve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    {Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    if(pObject->pVerts[index].y > LastPoint.y )Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    LastPoint = pObject->pVerts[index];Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    }Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    }Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    }Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    }Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    vect.x = LastPoint.x ;Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    vect.y = LastPoint.y ;Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    vect.z = LastPoint.z ;Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    return vect;Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    }Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    比較特殊的是頭部節(jié)點是通過脖子連接的,所以它是取最低的點。Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    現(xiàn)在解決最后的問題了,如何旋轉(zhuǎn)了,具體來講就是骨骼從原來自然的狀態(tài)旋轉(zhuǎn)到目前的方向,例如手臂從自然垂下變成抬起,垂下和抬起兩個狀態(tài)的矢量是不同的方向的,如何旋轉(zhuǎn)呢? 這里就要用到了空間幾何里的點積和叉積的概念了,簡單來講就是利用點積來求矢量夾角余弦,利用叉積來求兩個矢量的法向量,如果你忘記了這些概念,可以回去參考一下高等數(shù)學(xué)書,這個連接也提供了一些資料,可以幫助理解http://www.gameres.com/Articles/Program/Visual/Other/shiliang.htmUve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    然后呢,我們知道了兩個矢量的夾角與它們的法向量,下面的事情就變得簡單了,我們讓骨骼原來的矢量以法向量為旋轉(zhuǎn)軸,旋轉(zhuǎn)一定角度,這個角度就是兩個矢量的夾角,這樣問題就解決了,所以這里的代碼如下:Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    int OpenGL::rotate_bone(Vector3f vVector1, Vector3f vVector2, Vector3f vVectorOrgin)Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    {Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    Vector3f vt1 = Vector3f(vVector1.x,vVector1.y,vVector1.z);Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    Vector3f vt2 = Vector3f(vVector2.x,vVector2.y,vVector2.z);Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    Vector3f vt4 = vt2-vt1;Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    double arc12 = AngleBetweenVectors(vVectorOrgin,vt4);Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    double rarc12 = 180*arc12/pi;Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    float len= Distance(vt1,vt2);Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    Vector3f vt3 = Cross(vVectorOrgin,vt4);Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    glRotatef ((float)rarc12,vt3.x,vt3.y,vt3.z);Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    return 0;Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    } Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司

    以上就是關(guān)于全身人像模型制作過程相關(guān)問題的回答。希望能幫到你,如有更多相關(guān)問題,您也可以聯(lián)系我們的客服進(jìn)行咨詢,客服也會為您講解更多精彩的知識和內(nèi)容。Uve創(chuàng)意嶺 - 安心托付、值得信賴的品牌設(shè)計、營銷策劃公司


    推薦閱讀:

    抖音瘦全身怎么設(shè)置(抖音怎么設(shè)置全身都瘦尼)

    只換臉的正裝照app(全身正裝照片p圖軟件)

    單人全身模板(單人全身模板女)

    名表排行榜(名表排行榜前十名)

    ps中腿太長了怎么辦(ps腿變長)