一種移動(dòng)終端3d模型實(shí)現(xiàn)方法和裝置制造方法
【專利摘要】本發(fā)明公開了一種移動(dòng)終端3D模型實(shí)現(xiàn)方法和裝置,方法包括:終端解析器獲取并解析3D描述文件,所述3D描述文件中包括:3D模型的材質(zhì)信息x軸、y軸、z軸的最大和最小值、頂點(diǎn)坐標(biāo)總數(shù)、頂點(diǎn)坐標(biāo)、紋理坐標(biāo)以及紋理圖片信息;讀取x軸、y軸和z軸的最大和最小值;讀取頂點(diǎn)坐標(biāo)總數(shù),根據(jù)頂點(diǎn)總數(shù)分配緩存空間,并將具體的頂點(diǎn)坐標(biāo)與紋理坐標(biāo)信息放入到所述緩存空間之中;基于所述x軸、y軸、z軸的最大和最小值初始化渲染器;查詢3D描述文件并判斷其中是否包含三角形繪制模式,當(dāng)獲取到三角形繪制模式時(shí),基于所述三角形的繪制模式和頂點(diǎn)坐標(biāo)的總數(shù)、頂點(diǎn)坐標(biāo)、紋理坐標(biāo)信息以及紋理圖片繪制相對(duì)應(yīng)的3D模型。
【專利說(shuō)明】一種移動(dòng)終端3D模型實(shí)現(xiàn)方法和裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于移動(dòng)終端領(lǐng)域,涉及一種應(yīng)用于移動(dòng)終端領(lǐng)域中的3D模型實(shí)現(xiàn)方法和裝置。
【背景技術(shù)】
[0002]隨著2007年iPhone的火爆,現(xiàn)在全球興起了智能手機(jī)熱。人們?cè)谌粘I钪?,?huì)通過(guò)智能手機(jī)上上網(wǎng),玩各種應(yīng)用。根據(jù)某些調(diào)研機(jī)構(gòu)觀察,人們?cè)谥悄苁謾C(jī)上用的最多的應(yīng)用類型是游戲類應(yīng)用。而隨著智能手機(jī)處理器的性能日益提升,很多游戲都開始3D化了,并且一些知名的移動(dòng)廣告平臺(tái)也準(zhǔn)備推出基于3D模型展示的廣告類型來(lái)與用戶進(jìn)行互動(dòng)。因此,在手持移動(dòng)設(shè)備上展示3D模型已經(jīng)是一個(gè)必然的趨勢(shì)了。
[0003]然而,盡管移動(dòng)設(shè)備處理器的性能在逐步加強(qiáng),但考慮到移動(dòng)設(shè)備首要考慮的續(xù)航時(shí)間、功耗、發(fā)熱等因素,它們必然無(wú)法像桌面電腦處理器性能那么強(qiáng)勁。而目前市面上通用的用于描述3D物體模型的3D-0BJ文件原本是為桌面電腦處理器而開發(fā)定制的,并且適應(yīng)于老舊、臃腫的OpenGL標(biāo)準(zhǔn)。而手持設(shè)備上的圖形處理器僅支持輕量級(jí)的OpenGL標(biāo)準(zhǔn),即OpenGL ES。因此,這里提供一種適用于移動(dòng)設(shè)備端的3D模型描述格式。
[0004]現(xiàn)有的3D-0BJ文件有以下三個(gè)重大缺陷:
[0005]1、在設(shè)備端解析此格式時(shí),內(nèi)存資源消耗嚴(yán)重。由于文件格式中沒有列出模型頂點(diǎn)個(gè)數(shù)、法線個(gè)數(shù)、紋理坐標(biāo)個(gè)數(shù)以及頂點(diǎn)索引個(gè)數(shù),因此設(shè)備端要解析時(shí),要么先申請(qǐng)一個(gè)很大的內(nèi)存,那么多次分配小的內(nèi)存塊。對(duì)于前者方式,這本身就是對(duì)內(nèi)存資源的浪費(fèi)??紤]到目
[0006]前大部分移動(dòng)設(shè)備的內(nèi)存都在512MB以下,而分配給每個(gè)應(yīng)用的內(nèi)存空間往往連50MB都不到,因此當(dāng)后臺(tái)應(yīng)用一多并且當(dāng)前3D-0BJ文件中所描述的頂點(diǎn)元素一多時(shí),很容易出現(xiàn)因內(nèi)存不足而使得當(dāng)前應(yīng)用崩潰的現(xiàn)象。而若采用后者的方式,會(huì)因?yàn)檫^(guò)多對(duì)內(nèi)存做動(dòng)態(tài)分配,使得系統(tǒng)的內(nèi)存池會(huì)出現(xiàn)許多垃圾碎片,這個(gè)問(wèn)題對(duì)于Android系統(tǒng)而言尤為突出。本格式規(guī)范通過(guò)在文件開頭明確列出頂點(diǎn)坐標(biāo)個(gè)數(shù)、紋理坐標(biāo)個(gè)數(shù),使得設(shè)備端能恰好分配當(dāng)前描述文件中所需要的存放頂點(diǎn)坐標(biāo)數(shù)據(jù)以及紋理坐標(biāo)數(shù)據(jù)的內(nèi)存資源,不會(huì)造成內(nèi)存資源的浪費(fèi)。
[0007]2、格式本身太過(guò)冗余。由于當(dāng)前3D-0BJ描述文件每一行都對(duì)應(yīng)相應(yīng)的標(biāo)識(shí)以區(qū)分是頂點(diǎn)坐標(biāo)還是法線坐標(biāo)或是紋理坐標(biāo)等。這個(gè)不僅會(huì)加大描述文件的尺寸,而且也會(huì)給設(shè)備端的解析帶來(lái)額外的負(fù)擔(dān)。本格式規(guī)范通過(guò)在某一類信息之前加一次標(biāo)識(shí)來(lái)去除不必要的分類前綴,使得文件大小大大減少。這樣既能更快地通過(guò)2G或3G網(wǎng)絡(luò)下載文件,而設(shè)備端也能更快地去解析文件。
[0008]3、并不適合移動(dòng)設(shè)備端的OpenGL ES標(biāo)準(zhǔn)。由于當(dāng)前的3D-0BJ描述文件是基于臃腫老舊的OpenGL標(biāo)準(zhǔn)來(lái)描述的,因此存在很多OpenGL ES標(biāo)準(zhǔn)不需要的屬性。
【發(fā)明內(nèi)容】
[0009]本發(fā)明所要解決的技術(shù)問(wèn)題是克服老舊的OpenGL標(biāo)準(zhǔn)并不適合于移動(dòng)終端,為此,提供一種新的3D描述文件,并據(jù)此提供了基于所述3D描述文件的移動(dòng)終端3D模型實(shí)現(xiàn)方法和裝置。
[0010]本發(fā)明解決上述技術(shù)問(wèn)題所采取的技術(shù)方案如下:
[0011 ] 一種移動(dòng)終端3D模型實(shí)現(xiàn)方法,包括:
[0012]終端解析器獲取并解析3D描述文件,所述3D描述文件中包括:
[0013]3D模型的材質(zhì)信息、X軸、y軸、z軸的最大和最小值、頂點(diǎn)坐標(biāo)總數(shù)、頂點(diǎn)坐標(biāo)、紋理坐標(biāo)以及紋理圖片信息;
[0014]讀取X軸、y軸和z軸的最大和最小值;
[0015]讀取頂點(diǎn)坐標(biāo)總數(shù),根據(jù)頂點(diǎn)總數(shù)分配緩存空間,并將具體的頂點(diǎn)坐標(biāo)與紋理坐標(biāo)信息放入到所述緩存空間之中;
[0016]基于所述X軸、y軸、z軸的最大和最小值初始化渲染器;
[0017]查詢3D描述文件并判斷其中是否包含三角形繪制模式,當(dāng)獲取到三角形繪制模式時(shí),基于所述三角形的繪制模式和頂點(diǎn)坐標(biāo)的總數(shù)、頂點(diǎn)坐標(biāo)、紋理坐標(biāo)信息以及紋理圖片繪制相對(duì)應(yīng)的3D模型。
[0018]其中,所述初始化渲染器,包括:
[0019]根據(jù)手機(jī)屏幕大小創(chuàng)建并分配視口大??;根據(jù)X軸、y軸和z軸的最大和最小值設(shè)置正交投影變換。
[0020]其中,根據(jù)X軸、y軸和z軸的最大和最小值設(shè)置正交投影變換,包括:
[0021 ] 獲取物體在X軸、y軸和z軸的總長(zhǎng)度,并分別基于各自的總長(zhǎng)度創(chuàng)建對(duì)應(yīng)的X軸、y軸、z軸的兩端坐標(biāo)。
[0022]其中,所述3D描述文件中,分別基于一個(gè)標(biāo)識(shí)符來(lái)定義后續(xù)的數(shù)字為頂點(diǎn)信息、頂點(diǎn)坐標(biāo)信息和紋理坐標(biāo)信息。
[0023]其中,所述紋理坐標(biāo)和頂點(diǎn)坐標(biāo)的個(gè)數(shù)與順序相對(duì)應(yīng),且所述緩存空間中,基于線性存儲(chǔ)的方式存儲(chǔ)所述紋理坐標(biāo)和頂點(diǎn)坐標(biāo)信息。
[0024]其中,所述3D描述模型通過(guò)過(guò)濾器對(duì)Blender3D的3D-0BJ文件轉(zhuǎn)換和過(guò)濾生成,包括:
[0025]讀取3D-0BJ文件中的頂點(diǎn)坐標(biāo)數(shù)據(jù),并統(tǒng)計(jì)其總數(shù)和X軸、y軸和z軸的最大和最小值;
[0026]讀取3D-0BJ文件中的紋理坐標(biāo)數(shù)據(jù)和索引數(shù)據(jù),并根據(jù)索引數(shù)據(jù)和頂點(diǎn)坐標(biāo)數(shù)據(jù)的順序生成與所述頂點(diǎn)坐標(biāo)順序相對(duì)應(yīng)的紋理坐標(biāo)數(shù)據(jù);
[0027]輸出包含頂點(diǎn)坐標(biāo)總數(shù)、X軸、y軸和Z軸的最大和最小值、坐標(biāo)數(shù)據(jù)、頂點(diǎn)坐標(biāo)數(shù)據(jù)的3D描述文件。
[0028]當(dāng)從所述3D描述文件中獲取不到三角形繪圖模式時(shí),則啟用默認(rèn)的三角形繪圖模式進(jìn)行繪制。
[0029]一種移動(dòng)終端3D模型實(shí)現(xiàn)裝置,包括:終端解析器,用于終端解析器獲取并解析3D描述文件,所述3D描述文件中包括:
[0030]3D模型的材質(zhì)信息、三角形繪制模式、X軸、y軸、z軸的最大和最小值、頂點(diǎn)坐標(biāo)總數(shù)、頂點(diǎn)坐標(biāo)、紋理坐標(biāo)以及紋理圖片信息;[0031]讀取所述X軸、y軸和z軸的最大和最小值;
[0032]讀取頂點(diǎn)坐標(biāo)總數(shù),根據(jù)頂點(diǎn)總數(shù)分配緩存空間,并將具體的頂點(diǎn)坐標(biāo)與紋理坐標(biāo)信息放入到所述緩存空間之中;
[0033]渲染器,用于基于所述X軸、y軸、z軸的最大和最小值初始化;
[0034]繪制模塊,用于查詢3D描述文件并判斷其中是否包含三角形繪制模式,當(dāng)獲取到三角形繪制模式時(shí),基于所述三角形的繪制模式和頂點(diǎn)坐標(biāo)的總數(shù)、頂點(diǎn)坐標(biāo)、紋理坐標(biāo)信息以及紋理圖片繪制相對(duì)應(yīng)的3D模型。
[0035]其中,所述渲染器進(jìn)一步用于根據(jù)手機(jī)屏幕大小創(chuàng)建并分配視口大?。桓鶕?jù)X軸、y軸和z軸的最大和最小值設(shè)置正交投影變換。
[0036]其中,所述渲染器,根據(jù)X軸、y軸和z軸的最大和最小值設(shè)置正交投影變換,包括:
[0037]獲取物體在X軸、y軸和Z軸的總長(zhǎng)度,并分別基于各自的總長(zhǎng)度創(chuàng)建對(duì)應(yīng)的X軸、y軸、z軸的兩端坐標(biāo)。
[0038]本發(fā)明采取了上述技術(shù)方案具有下列的技術(shù)效果:
[0039]本發(fā)明克服了原本的3D描述文件中沒有頂點(diǎn)個(gè)數(shù)總數(shù),因此客戶端只能通過(guò)逐行解析每個(gè)頂點(diǎn)來(lái)統(tǒng)計(jì)頂點(diǎn)總數(shù)的缺點(diǎn),由此,其能夠基于頂點(diǎn)坐標(biāo)與紋理坐標(biāo)的一致性線性存儲(chǔ),最大地利用了內(nèi)存空間。
[0040]此外,由于新的3D描述文件中,提供了 X軸、y軸以及z軸的最大值與最小值。因此不需要在客戶端解析頂點(diǎn)坐標(biāo)時(shí)進(jìn)行統(tǒng)計(jì),而可以一下子確定相應(yīng)3D模型的所需要的視口長(zhǎng)寬比例以及正交變換所需要的各項(xiàng)參數(shù)。
[0041]另外,一開始定好頂點(diǎn)坐標(biāo)個(gè)數(shù)也使得客戶端的解析引擎不需要統(tǒng)計(jì)頂點(diǎn)坐標(biāo)個(gè)數(shù),并且通過(guò)線性存儲(chǔ)空間進(jìn)行寫數(shù)據(jù),提升存儲(chǔ)器訪問(wèn)效率,從而也提升了處理器的處理效率。
[0042]本發(fā)明的其它特征和優(yōu)點(diǎn)將在隨后的說(shuō)明書中闡述,并且,部分地從說(shuō)明書中變得顯而易見,或者通過(guò)實(shí)施本發(fā)明而了解。本發(fā)明的目的和其他優(yōu)點(diǎn)可通過(guò)在所寫的說(shuō)明書、權(quán)利要求書、以及附圖中所特別指出的結(jié)構(gòu)來(lái)實(shí)現(xiàn)和獲得。
【專利附圖】
【附圖說(shuō)明】
[0043]下面結(jié)合附圖對(duì)本發(fā)明進(jìn)行詳細(xì)的描述,以使得本發(fā)明的上述優(yōu)點(diǎn)更加明確。其中,
[0044]圖1是本發(fā)明移動(dòng)終端3D模型實(shí)現(xiàn)方法的流程示意圖;
[0045]圖2是本發(fā)明移動(dòng)終端3D模型實(shí)現(xiàn)方法中的3D描述文件中的第一繪圖模式的示意圖;
[0046]圖3是本發(fā)明移動(dòng)終端3D模型實(shí)現(xiàn)方法中的3D描述文件中的第一繪圖模式的示意圖;
[0047]圖4是本發(fā)明移動(dòng)終端3D模型實(shí)現(xiàn)方法中的3D描述文件中的第一繪圖模式的示意圖;
[0048]圖5是本發(fā)明移動(dòng)終端3D模型實(shí)現(xiàn)方法的解析方法的示意圖;
[0049]圖6是本發(fā)明移動(dòng)終端3D模型實(shí)現(xiàn)方法的示例模型圖;[0050]圖7是本發(fā)明移動(dòng)終端3D模型實(shí)現(xiàn)裝置的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0051]以下將結(jié)合附圖及實(shí)施例來(lái)詳細(xì)說(shuō)明本發(fā)明的實(shí)施方式,借此對(duì)本發(fā)明如何應(yīng)用技術(shù)手段來(lái)解決技術(shù)問(wèn)題,并達(dá)成技術(shù)效果的實(shí)現(xiàn)過(guò)程能充分理解并據(jù)以實(shí)施。需要說(shuō)明的是,只要不構(gòu)成沖突,本發(fā)明中的各個(gè)實(shí)施例以及各實(shí)施例中的各個(gè)特征可以相互結(jié)合,所形成的技術(shù)方案均在本發(fā)明的保護(hù)范圍之內(nèi)。
[0052]另外,在附圖的流程圖示出的步驟可以在諸如一組計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)系統(tǒng)中執(zhí)行,并且,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟。
[0053]其中,OpenGL:開放式圖形庫(kù);
[0054]OpenGL ES:用于手持移動(dòng)設(shè)備圖形處理器的輕量級(jí)OpenGL標(biāo)準(zhǔn);
[0055]3D-0BJ文件:一種描述能通過(guò)計(jì)算機(jī)處理而展示出來(lái)的三維物體模型的文件格式;
[0056]ASCI1:美國(guó)國(guó)家標(biāo)準(zhǔn)交換碼;
[0057]UTF-8是一種針對(duì)國(guó)際統(tǒng)一編碼的變長(zhǎng)編碼。用于將多個(gè)字節(jié)的二進(jìn)制編碼映射到我們常用的語(yǔ)言符號(hào)中。
[0058]OpenGL (ES)標(biāo)準(zhǔn)中定義的三角形繪制模式有GL_TRIANGLES與GL_TRIANGLE_STRIP兩種。GL_TRIANGLES對(duì)每三個(gè)頂點(diǎn)繪制為一個(gè)三角形。GL_TRIANGLE_STRIP:前三個(gè)頂點(diǎn)繪制了一個(gè)三角形后,第四個(gè)頂點(diǎn)沿著前兩個(gè)頂點(diǎn)組成的鄰邊再構(gòu)成一個(gè)新的三角形。
[0059]其中,本發(fā)明針對(duì)現(xiàn)有的3D-0BJ文件的缺點(diǎn),提供了一種新的格式規(guī)范,其完全適用于手持移動(dòng)設(shè)備端所采用的圖形處理器所支持的OpenGL ES標(biāo)準(zhǔn),將法線坐標(biāo)以及頂點(diǎn)索引部分完全剔除。這樣使得描述文件尺寸又進(jìn)一步減少,并且使得設(shè)備端的解析速度更快,更省電。
[0060]下面就來(lái)介紹適應(yīng)于移動(dòng)設(shè)備端的3D-0BJ文件格式定義。
[0061]首先,本3D-0BJ文件是一個(gè)文本文件。它可以在任何操作系統(tǒng)上使用普通的文本編輯器打開查看其里面的內(nèi)容,字符編碼一般采用ASCII或UTF-8編碼。以下將本3D-0BJ文件簡(jiǎn)單地稱為描述文件。
[0062]然后,本描述文件不需要定義法線坐標(biāo)。因此,所給出的頂點(diǎn)坐標(biāo)的順序應(yīng)該滿足渲染器要以右手逆時(shí)針螺旋順序作為繪制三角形順序的要求。由于OpenGL ES標(biāo)準(zhǔn)不支持對(duì)四邊形的繪制,因此頂點(diǎn)坐標(biāo)的繪制模式必須是三角形繪制模式(即GL_TRIANGLES或GL_TRIANGLE_STRIP)。
[0063]其中,描述文件有以下幾個(gè)元素組成:
[0064]1、注釋:注釋用井號(hào)符#來(lái)表示。#往往緊跟在一個(gè)換行符之后。注釋僅僅給看的人留些提示,對(duì)于要解析的內(nèi)容而言不含任何有意義的信息。比如:
[0065]#本3D模型的版權(quán)僅為XXX公司所有
[0066]當(dāng)解析到#字符之后,忽略掉其后面的所有字符,直到遇上一個(gè)換行符。本描述文件規(guī)范規(guī)定,注釋符#之前要么是換行符(\n),要么是空格符或制表符(tab,\t),若是其它字符,則#與這些字符連接在一起構(gòu)成其它文字信息。解析器遇到這種情況也可以中止對(duì)此描述文件的解析。
[0067]2、標(biāo)識(shí)符:標(biāo)識(shí)符也往往緊跟在一個(gè)換行符后面。本描述規(guī)范定義了若干固定的標(biāo)識(shí)符,它們表示其后面所跟的文字或數(shù)字被賦予的含義。比如:minx表示此描述文件所描述的3D模型的所有X軸坐標(biāo)中的最小值;cv表示3D模型中所有頂點(diǎn)個(gè)數(shù)的總數(shù)。標(biāo)識(shí)符的拼寫必須嚴(yán)格按照規(guī)范所定義的樣子。標(biāo)識(shí)符與注釋符一樣,必須僅跟在回車符、空格符或制表符的后面。標(biāo)識(shí)符之前倘若有其它字符,則將該字符與標(biāo)識(shí)符連接,作為其它文字信息。當(dāng)解析器碰到這種情況時(shí)可以終止對(duì)此描述文件的解析。如果標(biāo)識(shí)符后面跟有文字或數(shù)字信息,那么標(biāo)識(shí)符與這些信息之間必須用空格符分隔,當(dāng)然也允許使用多個(gè)空格符(比如:
[0068]minxl0.1 或 minx 10.1 都是合法的)。[0069]3、數(shù)字:數(shù)字通常由一、+、.以及O~9阿拉伯?dāng)?shù)字構(gòu)成。一個(gè)完整的數(shù)(包括小數(shù))通常跟在換行符、空格符、制表符之后。如果數(shù)字前有其它字符,那么該數(shù)字應(yīng)該與前面的字符連接在一起作為其它文字信息。而-與+號(hào)必須作為數(shù)字前綴。如果解析器解析到一個(gè)非法數(shù)字(比如:1.23+456),那么可以將當(dāng)中的非法字符忽略掉(比如將剛才的那個(gè)數(shù)解析為1.23456),或者也可以直接中止解析。
[0070]下面詳細(xì)介紹描述文件的標(biāo)識(shí)符。
[0071]1、mtllib—這個(gè)標(biāo)識(shí)符表示后面所跟著的信息是一個(gè)材質(zhì)模板庫(kù)文件名。材質(zhì)模板庫(kù)文件所在的目錄路徑應(yīng)該與當(dāng)前的描述文件所在的目錄路徑相同。因此,通過(guò)mtllib后面的文字信息就能找到相應(yīng)的材質(zhì)模板庫(kù)文件。材質(zhì)模板庫(kù)文件遵從原來(lái)3D-0BJ 規(guī)范中所描述的標(biāo)準(zhǔn)。具體可參考:http://en.wikipedia.0rg/wiki/ffavefront_.0bj_file#Material_template_library?此標(biāo)識(shí)符與后面文字信息之間應(yīng)該用一個(gè)或多個(gè)空格符分開。比如:mtllib face, mtl
[0072]2、trgs——表示客戶端的渲染器使用GL_TRIANGLES模式對(duì)3D模型的頂點(diǎn)進(jìn)行繪制。這個(gè)標(biāo)識(shí)符后面不需要跟其它信息,可以直接跟換行符。
[0073]3、trsp——表示客戶端的渲染器使用GL_TRIANGLE_STRIP模式對(duì)3D模型的頂點(diǎn)進(jìn)行繪制。且這個(gè)標(biāo)識(shí)符后面不需要跟其它信息,可以直接跟換行符。如果標(biāo)識(shí)符trgs或trsp在整個(gè)描述文件中沒被找到,那么采用默認(rèn)的渲染模式為GL_TRIANGLES模式。
[0074]其中,這兩個(gè)模式的區(qū)別見圖2和圖3所示:
[0075]這里,圖2用的是GL_TRIANGLES繪制模式所繪制的由三個(gè)三角形組成的一個(gè)梯形,一共用了 9個(gè)頂點(diǎn)。頂點(diǎn)BAC構(gòu)成了第一個(gè)藍(lán)色三角形;頂點(diǎn)DEF構(gòu)成了第二個(gè)粉色三角形;頂點(diǎn)HGI構(gòu)成了第三個(gè)黃色三角形。而圖3用的是GL_TRIANGLE_STRIP繪制模式,同樣也是由三個(gè)三角形構(gòu)成了一個(gè)梯形。但是,這里一共就用了 5個(gè)頂點(diǎn),比圖2的少用了將近一半。頂點(diǎn)BAC構(gòu)成了第一個(gè)藍(lán)色三角形;而之后的第4個(gè)頂點(diǎn)D與前面藍(lán)色三角形的鄰邊BC構(gòu)成了第二個(gè)粉色三角形;而第5個(gè)頂點(diǎn)E與前一個(gè)粉色三角形的鄰邊DC構(gòu)成了第三個(gè)黃色三角形??梢?,對(duì)于繪制同樣一個(gè)物體,采用GL_TRIANGLE_STRIP模式會(huì)節(jié)省很多頂點(diǎn)。而如果要繪制兩個(gè)單獨(dú)的圖形,那么OpenGL ES中有新的模式可以采用,如圖4所
/Jn ο
[0076]上圖中繪制了兩個(gè)分離的梯形。這里,只需要將前一個(gè)梯形的最后一個(gè)頂點(diǎn)復(fù)制一個(gè),然后將后一個(gè)梯形的第一個(gè)頂點(diǎn)復(fù)制一個(gè),這樣就能很方便地繪制出兩個(gè)分離的梯形了。這樣做相對(duì)于采用GL_TRIANGLES繪制模式來(lái)說(shuō)同樣能節(jié)省很多頂點(diǎn)。
[0077]4、minx——minx后面跟著的數(shù)表示3D模型的所有頂點(diǎn)坐標(biāo)中x軸上的最小值。
[0078]5、maxx-maxx后面跟著的數(shù)表示3D模型的所有頂點(diǎn)坐標(biāo)中x軸上的最大值。
[0079]6、miny-miny后面跟著的數(shù)表示3D模型的所有頂點(diǎn)坐標(biāo)中y軸上的最小值。
[0080]7、maxy-maxy后面跟著的數(shù)表示3D模型的所有頂點(diǎn)坐標(biāo)中y軸上的最大值。
[0081]8、minz-minz后面跟著的數(shù)表示3D模型的所有頂點(diǎn)坐標(biāo)中z軸上的最小值。
[0082]9、maxz-maxz后面跟著的數(shù)表示3D模型的所有頂點(diǎn)坐標(biāo)中z軸上的最大值。
[0083]10、cv——3D模型的頂點(diǎn)總數(shù)。
[0084]11、V-頂點(diǎn)坐標(biāo)。本描述規(guī)范規(guī)定了一個(gè)頂點(diǎn)坐標(biāo)由三個(gè)分量組成,從左到右
以此表示頂點(diǎn)X軸上的值、y軸上的值以及Z軸上的值。每個(gè)分量之間用空格符分隔(可以有多個(gè))。相鄰兩個(gè)頂點(diǎn)之間由換行符(\n)來(lái)分隔。比如:
[0085]V
[0086]10.01 27.15-20.69
[0087]18.97 20.35-20.24
[0088]15.31 24.00—18.45
[0089]上述例子描述了一個(gè)由三個(gè)頂點(diǎn)構(gòu)成的一個(gè)三角形。其中第一個(gè)頂點(diǎn)的坐標(biāo)為(10.01,27.15,-20.69);最后一個(gè)頂點(diǎn)的坐標(biāo)為(15.31,24.00,-18.45)。
[0090]12、t—紋理坐標(biāo)。本描述規(guī)范規(guī)定了一個(gè)紋理坐標(biāo)由兩個(gè)分量組成,從左到右以此表示紋理X軸上的值以及y軸上的值。每個(gè)分量之間用空格符分隔(可以有多個(gè))。每個(gè)紋理坐標(biāo)之間用換行符(\n)分隔。紋理坐標(biāo)值根據(jù)傳統(tǒng)標(biāo)準(zhǔn),應(yīng)該被規(guī)格化在[0,1]范圍內(nèi)。比如:
[0091]t
[0092]0.38 0.19
[0093]0.43 0.16
[0094]0.39 0.19
[0095]以上例子描述了對(duì)應(yīng)于一個(gè)三角形的3個(gè)紋理坐標(biāo)。第一個(gè)紋理坐標(biāo)對(duì)應(yīng)著第一個(gè)頂點(diǎn);最后一個(gè)紋理坐標(biāo)對(duì)應(yīng)了最后一個(gè)頂點(diǎn)。因此有多少個(gè)頂點(diǎn)坐標(biāo)就有多少個(gè)紋理坐標(biāo)。
[0096]下面用一個(gè)較為完整的例子來(lái)描述一下本3D描述文件:
[0097]#Blender3D v2490BJ File:
[0098]#www.blender3d.0rg
[0099]mtllib face, mtl
[0100]trgs
[0101]minx 141.467346
[0102]maxx 148.977325
[0103]miny 23.974377
[0104]maxy 29.108953
[0105]minz -32.562725[0106]maxz -29.678705
[0107]cv 6
[0108]V
[0109]144.001602 27.246269-32.562725
[0110]148.977325 23.974377-32.245533
[0111]145.471344 26.611320-29.678705
[0112]144.001602 27.246269-32.562725
[0113]145.471344 26.611320-29.678705
[0114]141.467346 29.108953-30.494118
[0115]t
[0116]0.385269 0.197682
[0117]0.434844 0.168615
[0118]0.399913 0.192041
[0119]0.385269 0.197682
[0120]0.399913 0.192041
[0121]0.360020 0.214230
[0122]以上就是對(duì)本3D描述文件格式的介紹。
[0123]下面介紹一下設(shè)備端如何對(duì)此描述文件進(jìn)行解析,由于上述信息的描述符的次序是可更換的,因此解析器應(yīng)該使用狀態(tài)機(jī)機(jī)制來(lái)進(jìn)行文件解析。狀態(tài)機(jī)圖如圖6所示:
[0124]其中,上圖描述了對(duì)注釋符(#)以及對(duì)材質(zhì)文件名標(biāo)識(shí)符的解析狀態(tài)流程。其它標(biāo)識(shí)符可依此類推。本狀態(tài)圖省略了對(duì)空格分隔符的解析以及其它異常處理。開發(fā)者可根據(jù)先前本規(guī)范所描述的規(guī)則以及應(yīng)用可適應(yīng)的情況做相應(yīng)處理。
[0125]當(dāng)解析器成功解析完描述文件之后,就能獲得3D模型的材質(zhì)信息、三角形繪制模式、X軸的最大最小值、y軸的最大最小值、Z軸的最大最小值、頂點(diǎn)總數(shù)、頂點(diǎn)坐標(biāo)以及紋理坐標(biāo)這些信息。渲染器通過(guò)X、y軸的最大最小值可以確定視口(view port)大小;而通過(guò)x、y以及z軸的最大最小值可以確定正交視圖變換所需要的參數(shù)。解析器在獲取頂點(diǎn)坐標(biāo)以及紋理坐標(biāo)之前,通過(guò)cv標(biāo)識(shí)符獲得頂點(diǎn)個(gè)數(shù)后可以按需分配存放頂點(diǎn)坐標(biāo)以及紋理坐標(biāo)所需要的緩存大小。因此,本3D模型描述文件大大方便了解析器以及渲染器的處理,減少了許多額外的判定以及冗余信息的解析。
[0126]具體來(lái)說(shuō),如圖1所示,所述移動(dòng)終端3D模型實(shí)現(xiàn)方法,具體包括:
[0127]步驟1:終端解析器獲取并解析3D描述文件,所述3D描述文件中包括:
[0128]3D模型的材質(zhì)信息、X軸、y軸、z軸的最大和最小值、頂點(diǎn)坐標(biāo)總數(shù)、頂點(diǎn)坐標(biāo)、紋理坐標(biāo)以及紋理圖片信息;
[0129]步驟2:讀取X軸、y軸和z軸的最大和最小值;
[0130]步驟3:讀取頂點(diǎn)坐標(biāo)總數(shù),根據(jù)頂點(diǎn)總數(shù)分配緩存空間,并將具體的頂點(diǎn)坐標(biāo)與紋理坐標(biāo)信息放入到所述緩存空間之中;
[0131]步驟4:基于所述X軸、y軸、z軸的最大和最小值初始化渲染器,其中,包括:
[0132]根據(jù)手機(jī)屏幕大小創(chuàng)建并分配視口大??;根據(jù)X軸、y軸和y軸的最大和最小值設(shè)置正交投影變換,例如,獲取物體在X軸、y軸和Z軸的總長(zhǎng)度,并分別基于各自的總長(zhǎng)度創(chuàng)建對(duì)應(yīng)的X軸、y軸、Z軸的兩端坐標(biāo)。
[0133]步驟5:查詢3D描述文件并判斷其中是否包含三角形繪制模式,當(dāng)獲取到三角形繪制模式時(shí),基于所述三角形的繪制模式和頂點(diǎn)坐標(biāo)的總數(shù)、頂點(diǎn)坐標(biāo)、紋理坐標(biāo)信息以及紋理圖片繪制相對(duì)應(yīng)的3D模型。
[0134]在實(shí)施例中,頂點(diǎn)坐標(biāo)的順序應(yīng)該滿足渲染器要以右手逆時(shí)針螺旋順序作為繪制三角形順序的要求。
[0135]其中,根據(jù)上述規(guī)范,在實(shí)施例中,所述3D描述文件中,分別基于一個(gè)標(biāo)識(shí)符來(lái)定義后續(xù)的數(shù)字為頂點(diǎn)信息、頂點(diǎn)坐標(biāo)信息和紋理坐標(biāo)信息,由此,省略了現(xiàn)有的頂點(diǎn)坐標(biāo)信息和紋理坐標(biāo)信息前的標(biāo)識(shí)符,節(jié)省了本描述文件的大小,方便了數(shù)據(jù)傳輸和讀取。
[0136]其中,根據(jù)上述規(guī)范的描述,所述紋理坐標(biāo)和頂點(diǎn)坐標(biāo)的個(gè)數(shù)與順序相對(duì)應(yīng),且所述緩存空間中,基于線性存儲(chǔ)方式存儲(chǔ)所述紋理坐標(biāo)和頂點(diǎn)坐標(biāo)信息,由此,其降低了碎片的產(chǎn)生。
[0137]下面通過(guò)介紹一個(gè)實(shí)例來(lái)介紹本3D描述從生成到最后3D圖形繪制出來(lái)的過(guò)程。
[0138]首先,在網(wǎng)上可以下載到傳統(tǒng)標(biāo)準(zhǔn)的3D-0BJ文件,該文件描述的是一張人臉的3D模型,以下是部分?jǐn)?shù)據(jù)內(nèi)容:
[0139]#Blender3D v2490BJ File:
[0140]#www.blender3d.0rg
[0141]mtllib face, mtl
[0142]V 148.977325 23.974377-32.245533
[0143]V 145.471344 26.611320-29.678705
[0144]V 144.001602 27.246269-32.562725
[0145]V 141.467346 29.108953-30.494118
[0146](以下省略)
[0147]vt 0.385269 0.197682
[0148]vt 0.434844 0.168615
[0149]vt 0.399913 0.192041
[0150]vt 0.360020 0.214230
[0151](以下省略)
[0152]usemtl ID5_texture0.jpg
[0153]s off
[0154]f 3/1 1/2 2/3
[0155]f 3/1 2/3 4/4
[0156]f 5/5 1/2 3/1
[0157]f 2/3 1/2 6/6
[0158](以下省略)
[0159]在實(shí)施例中,所述3D描述模型通過(guò)過(guò)濾器對(duì)Blender3D的3D-0BJ文件轉(zhuǎn)換和過(guò)濾生成,包括:
[0160]讀取3D-0BJ文件中的頂點(diǎn)坐標(biāo)數(shù)據(jù),并統(tǒng)計(jì)其總數(shù)和X軸、y軸和z軸的最大和最小值;[0161]讀取3D-0BJ文件中的紋理坐標(biāo)數(shù)據(jù)和索引數(shù)據(jù),并根據(jù)索引數(shù)據(jù)和頂點(diǎn)坐標(biāo)數(shù)據(jù)的順序生成與所述頂點(diǎn)坐標(biāo)順序相對(duì)應(yīng)的紋理坐標(biāo)數(shù)據(jù);
[0162]輸出包含頂點(diǎn)坐標(biāo)總數(shù)、X軸、y軸和z軸的最大和最小值、坐標(biāo)數(shù)據(jù)、頂點(diǎn)坐標(biāo)數(shù)據(jù)和三角形繪圖模式的3D描述文件。
[0163]例如,我們?cè)贛ac或PC上寫一個(gè)過(guò)濾器,將此傳統(tǒng)的3D描述文件轉(zhuǎn)為我們所定義的3D描述文件。
[0164]首先,解析帶有V的數(shù)據(jù)。這些表示頂點(diǎn)坐標(biāo),將其總數(shù)以及X軸、y軸、和Z軸的最大最小值統(tǒng)計(jì)出來(lái)之后先保存起來(lái)。
[0165]然后解析Vt數(shù)據(jù),這些表示紋理坐標(biāo)數(shù)據(jù),但這里要注意的是,這些紋理坐標(biāo)與頂點(diǎn)坐標(biāo)不是一一對(duì)應(yīng)的,因此還需要通過(guò)解析f數(shù)據(jù),即索引數(shù)據(jù)來(lái)確定紋理坐標(biāo)與頂點(diǎn)坐標(biāo)的對(duì)應(yīng)關(guān)系。
[0166]比如f數(shù)據(jù)第一行的f 3/1 1/2 2/3,表示第3個(gè)頂點(diǎn)坐標(biāo)與第I個(gè)紋理坐標(biāo)對(duì)應(yīng);1/2表示第I個(gè)頂點(diǎn)坐標(biāo)與第二個(gè)紋理坐標(biāo)對(duì)應(yīng);2/3表示第2個(gè)頂點(diǎn)坐標(biāo)與第3個(gè)紋理坐標(biāo)對(duì)應(yīng)。而這一組索引由于是第一行,因此正好對(duì)應(yīng)頂點(diǎn)次序?yàn)?、2、3。
[0167]我們通過(guò)以上步驟將頂點(diǎn)坐標(biāo)與紋理坐標(biāo)統(tǒng)計(jì)完之后就可以按照我們定義的3D描述文件的格式進(jìn)行輸出,以下是部分?jǐn)?shù)據(jù)內(nèi)容:
[0168]# Blender3D v249 OBJ File:
[0169]# www.blender3d.0rg
[0170]mtllib face, mtl
[0171]trgs
[0172]minx 116.051117
[0173]maxx 195.929230
[0174]miny -0.000001
[0175]maxy 113.865570
[0176]minz -50.442886
[0177]maxz 3.899105
[0178]cv 27837
[0179]V
[0180]144.001602 27.246269 -32.562725
[0181]148.977325 23.974377 -32.245533
[0182]145.471344 26.611320 -29.678705
[0183]144.001602 27.246269 -32.562725
[0184](以下省略剩余的頂點(diǎn)坐標(biāo)信息)
[0185]t
[0186]0.385269 0.197682
[0187]0.434844 0.168615
[0188]0.399913 0.192041
[0189]0.385269 0.197682
[0190](以下省略剩余的紋理坐標(biāo)信息)[0191]這樣,我們就能將此3D描述文件應(yīng)用在我們自己的移動(dòng)設(shè)備上,由此,在設(shè)備端獲得此描述文件之后,開始對(duì)其進(jìn)行解析。
[0192]我們先從3D描述文件中查詢?nèi)切卫L制模式,以及X軸、y軸和z軸的最大最小值,其中,當(dāng)未獲取的話,則啟用默認(rèn)的三角形繪圖模式。
[0193]然后,當(dāng)我們解析到頂點(diǎn)坐標(biāo)總數(shù)時(shí),解析器要分配相應(yīng)大小的存儲(chǔ)空間來(lái)存放頂點(diǎn)坐標(biāo)與紋理坐標(biāo)。這里一共有27837個(gè)頂點(diǎn),因此要為頂點(diǎn)坐標(biāo)的存儲(chǔ)空間分配27837*3*4個(gè)字節(jié)。這里的3表示一個(gè)頂點(diǎn)坐標(biāo)有3個(gè)分量,分別表示x軸、y軸與z軸的信息;這里的4表示一個(gè)分量數(shù)據(jù)由一個(gè)單精度浮點(diǎn)表示,占用4個(gè)字節(jié)。而紋理坐標(biāo)的存儲(chǔ)空間需要分配27837*2*4個(gè)字節(jié),由于紋理坐標(biāo)只需要2個(gè)分量,分別表示x軸與y軸方向的坐標(biāo)。隨后,我們就可以分別將具體的頂點(diǎn)坐標(biāo)與紋理坐標(biāo)放進(jìn)剛才所分配好的存儲(chǔ)空間中了。
[0194]最后,當(dāng)解析器解析完所需要的數(shù)據(jù)后,就可以初始化渲染器了。起先,分配視口(view port)大小,這里根據(jù)手機(jī)屏幕大小進(jìn)行創(chuàng)建。
[0195]隨后,我們根據(jù)X軸與y軸的最大最小值來(lái)設(shè)置正交投影變換。這里物體在X軸方向的總長(zhǎng)度為(195.929230 一 116.051117),因此最左邊的坐標(biāo)可設(shè)置為-(195.929230 一116.051117),最右邊的坐標(biāo)可設(shè)置為(195.929230 — 116.051117)。y軸方向的長(zhǎng)度為(113.865570—0.000001),因此最底部的坐標(biāo)可設(shè)置為-(113.865570—0.000001),最頂部的坐標(biāo)可設(shè)置為(113.865570—0.000001)。深度為(3.899105—50.442886)。因此,最近坐標(biāo)可設(shè)置為1.0,最遠(yuǎn)坐標(biāo)可設(shè)置為(3.899105—50.442886-1)。
[0196]完成這些之后,我們通過(guò)頂點(diǎn)坐標(biāo)的個(gè)數(shù)以及的頂點(diǎn)坐標(biāo)與紋理坐標(biāo)的具體信息,根據(jù)三角形的繪制模式以及所需要的紋理圖片將3D模型繪制出來(lái),由此,繪制完的模型可以根據(jù)應(yīng)用自身需求做旋轉(zhuǎn)、平移等變換。
[0197]其中,由于原本的3D描述文件含有大量冗余信息,比如沒有必要的法線向量信息,每個(gè)頂點(diǎn)坐標(biāo)以及紋理坐標(biāo)之前都要添加標(biāo)識(shí)符,還有會(huì)使得客戶端解析變得非常麻煩的面索引信息。這些信息全都去掉之后,描述符文件會(huì)小很多,尤其當(dāng)時(shí)候GL_TRIANGLE_STRIP模式時(shí)。描述文件一小,若從網(wǎng)絡(luò)下載的話所需要的流量就會(huì)減小,下載時(shí)間也會(huì)縮短。
[0198]此外,該方法還降低了客戶端所需的內(nèi)存空間大,即由于原本的3D描述文件中沒有頂點(diǎn)個(gè)數(shù)總數(shù),因此客戶端只能通過(guò)逐行解析每個(gè)頂點(diǎn)來(lái)統(tǒng)計(jì)頂點(diǎn)總數(shù)。此時(shí),一般采用鏈表數(shù)據(jù)結(jié)構(gòu)來(lái)存放頂點(diǎn)信息,若頂點(diǎn)一多,成千上萬(wàn)次的小內(nèi)存分配會(huì)導(dǎo)致許多內(nèi)存碎片,使得內(nèi)存利用率大大降低。而新的描述文件給出頂點(diǎn)總數(shù),并且規(guī)約了頂點(diǎn)坐標(biāo)與紋理坐標(biāo)的一致性。因此,只需要一開始按需分配線性內(nèi)存空間即可存放頂點(diǎn)坐標(biāo)數(shù)據(jù)以及紋理坐標(biāo)數(shù)據(jù)了。這樣最大地利用了內(nèi)存空間。
[0199]并且,該方法加快設(shè)備端的解析時(shí)間,如本描述文件先前就提供了 X軸、y軸以及z軸的最大值與最小值。因此不需要在客戶端解析頂點(diǎn)坐標(biāo)時(shí)進(jìn)行統(tǒng)計(jì),而可以一下子確定相應(yīng)3D模型的所需要的視口長(zhǎng)寬比例以及正交變換所需要的各項(xiàng)參數(shù)。另外,一開始定好頂點(diǎn)坐標(biāo)個(gè)數(shù)也使得客戶端的解析引擎不需要統(tǒng)計(jì)頂點(diǎn)坐標(biāo)個(gè)數(shù),并且通過(guò)線性存儲(chǔ)空間進(jìn)行寫數(shù)據(jù),提升存儲(chǔ)器訪問(wèn)效率,從而也提升了處理器的處理效率。
[0200]此外,需要注意的是,本方法之中,描述文件所提供的標(biāo)識(shí)符、分隔符等僅僅是一個(gè)樣本。開發(fā)者可以根據(jù)自己需求來(lái)定義標(biāo)識(shí)符以及各個(gè)元素之間的分隔符。同時(shí),標(biāo)識(shí)符除了頂點(diǎn)坐標(biāo)信息標(biāo)識(shí)符(V)與紋理坐標(biāo)信息標(biāo)識(shí)符(t)必須出現(xiàn)在頂點(diǎn)總數(shù)標(biāo)識(shí)符(CV)之后以外,其它標(biāo)識(shí)符都可以相互交換位置。
[0201]與本發(fā)明方法相對(duì)應(yīng),本發(fā)明還提供了一種移動(dòng)終端3D模型實(shí)現(xiàn)裝置,與方法相對(duì)應(yīng),如圖7所示,其包括:
[0202]終端解析器,用于終端解析器獲取并解析3D描述文件,所述3D描述文件中包括:
[0203]3D模型的材質(zhì)信息、三角形繪制模式、X軸、y軸、z軸的最大和最小值、頂點(diǎn)坐標(biāo)總數(shù)、頂點(diǎn)坐標(biāo)、紋理坐標(biāo)以及紋理圖片信息;
[0204]讀取所述X軸、y軸和z軸的最大和最小值;
[0205]讀取頂點(diǎn)坐標(biāo)總數(shù),根據(jù)頂點(diǎn)總數(shù)分配緩存空間,并將具體的頂點(diǎn)坐標(biāo)與紋理坐標(biāo)信息放入到所述緩存空間之中;
[0206]渲染器,用于基于所述X軸、y軸、z軸的最大和最小值初始化;
[0207]繪制模塊,用于查詢3D描述文件并判斷其中是否包含三角形繪制模式,當(dāng)獲取到三角形繪制模式時(shí),基于所述三角形的繪制模式和頂點(diǎn)坐標(biāo)的總數(shù)、頂點(diǎn)坐標(biāo)、紋理坐標(biāo)信息以及紋理圖片繪制相對(duì)應(yīng)的3D模型。
[0208]其中,所述渲染器進(jìn)一步用于根據(jù)手機(jī)屏幕大小創(chuàng)建并分配視口大?。桓鶕?jù)X軸、y軸和z軸的最大和最小值設(shè)置正交投影變換。
[0209]其中,所述渲染器,根據(jù)X軸、y軸和z軸的最大和最小值設(shè)置正交投影變換,包括:
[0210]獲取物體在X軸、y軸和Z軸的總長(zhǎng)度,并分別基于各自的總長(zhǎng)度創(chuàng)建對(duì)應(yīng)的X軸、y軸、z軸的兩端坐標(biāo)。
[0211]本發(fā)明裝置具有上述方法實(shí)施例相同的效果,即本發(fā)明克服了原本的3D描述文件中沒有頂點(diǎn)個(gè)數(shù)總數(shù),因此客戶端只能通過(guò)逐行解析每個(gè)頂點(diǎn)來(lái)統(tǒng)計(jì)頂點(diǎn)總數(shù)的缺點(diǎn),由此,其能夠基于頂點(diǎn)坐標(biāo)與紋理坐標(biāo)的一致性線性存儲(chǔ),最大地利用了內(nèi)存空間。
[0212]此外,由于新的3D描述文件中,提供了 X軸、y軸以及z軸的最大值與最小值。因此不需要在客戶端解析頂點(diǎn)坐標(biāo)時(shí)進(jìn)行統(tǒng)計(jì),而可以一下子確定相應(yīng)3D模型的所需要的視口長(zhǎng)寬比例以及正交變換所需要的各項(xiàng)參數(shù)。
[0213]需要說(shuō)明的是,對(duì)于上述方法實(shí)施例而言,為了簡(jiǎn)單描述,故將其都表述為一系列的動(dòng)作組合,但是本領(lǐng)域技術(shù)人員應(yīng)該知悉,本申請(qǐng)并不受所描述的動(dòng)作順序的限制,因?yàn)橐罁?jù)本申請(qǐng),某些步驟可以采用其他順序或者同時(shí)進(jìn)行。其次,本領(lǐng)域技術(shù)人員也應(yīng)該知悉,說(shuō)明書中所描述的實(shí)施例均屬于優(yōu)選實(shí)施例,所涉及的動(dòng)作和模塊并不一定是本申請(qǐng)所必須的。
[0214]本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本申請(qǐng)的實(shí)施例可提供為方法、系統(tǒng)、或計(jì)算機(jī)程序產(chǎn)品。因此,本申請(qǐng)可采用完全硬件實(shí)施例、完全軟件實(shí)施例、或結(jié)合軟件和硬件方面的實(shí)施例的形式。
[0215]而且,本申請(qǐng)可采用在一個(gè)或多個(gè)其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲(chǔ)介質(zhì)(包括但不限于磁盤存儲(chǔ)器、CD-ROM、光學(xué)存儲(chǔ)器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。
[0216]最后應(yīng)說(shuō)明的是:以上所述僅為本發(fā)明的優(yōu)選實(shí)施例而已,并不用于限制本發(fā)明,盡管參照前述實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說(shuō)明,對(duì)于本領(lǐng)域的技術(shù)人員來(lái)說(shuō),其依然可以對(duì)前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對(duì)其中部分技術(shù)特征進(jìn)行等同替換。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
【權(quán)利要求】
1.一種移動(dòng)終端3D模型實(shí)現(xiàn)方法,其特征在于,包括: 終端解析器獲取并解析3D描述文件,所述3D描述文件中包括: 3D模型的材質(zhì)信息X軸、y軸、z軸的最大和最小值、頂點(diǎn)坐標(biāo)總數(shù)、頂點(diǎn)坐標(biāo)、紋理坐標(biāo)以及紋理圖片信息; 讀取X軸、y軸和z軸的最大和最小值; 讀取頂點(diǎn)坐標(biāo)總數(shù),根據(jù)頂點(diǎn)總數(shù)分配緩存空間,并將具體的頂點(diǎn)坐標(biāo)與紋理坐標(biāo)信息放入到所述緩存空間之中; 基于所述X軸、y軸、z軸的最大和最小值初始化渲染器; 查詢3D描述文件并判斷其中是否包含三角形繪制模式,當(dāng)獲取到三角形繪制模式時(shí),基于所述三角形的繪制模式和頂點(diǎn)坐標(biāo)的總數(shù)、頂點(diǎn)坐標(biāo)、紋理坐標(biāo)信息以及紋理圖片繪制相對(duì)應(yīng)的3D模型。
2.根據(jù)權(quán)利要求1所述的移動(dòng)終端3D模型實(shí)現(xiàn)方法,其特征在于,所述初始化渲染器,包括: 根據(jù)手機(jī)屏幕大小創(chuàng)建并分配視口大??;根據(jù)X軸、y軸和z軸的最大和最小值設(shè)置正交投影變換。
3.根據(jù)權(quán)利要求2所述的移動(dòng)終端3D模型實(shí)現(xiàn)方法,其特征在于,根據(jù)X軸、y軸和z軸的最大和最小值設(shè)置正交投影變換,包括: 獲取物體在X軸、y軸和z軸的總長(zhǎng)度,并分別基于各自的總長(zhǎng)度創(chuàng)建對(duì)應(yīng)的X軸、y軸、z軸的兩端坐標(biāo)。
4.根據(jù)權(quán)利要求1或2所述的移動(dòng)終端3D模型實(shí)現(xiàn)方法,其特征在于,所述3D描述文件中,分別基于一個(gè)標(biāo)識(shí)符來(lái)定義后續(xù)的數(shù)字為頂點(diǎn)信息、頂點(diǎn)坐標(biāo)信息和紋理坐標(biāo)信息。
5.根據(jù)權(quán)利要求1或2所述的移動(dòng)終端3D模型實(shí)現(xiàn)方法,其特征在于,所述紋理坐標(biāo)和頂點(diǎn)坐標(biāo)的個(gè)數(shù)與順序相對(duì)應(yīng),且所述緩存空間中,基于線性存儲(chǔ)的方式存儲(chǔ)所述紋理坐標(biāo)和頂點(diǎn)坐標(biāo)信息。
6.根據(jù)權(quán)利要求1所述的移動(dòng)終端3D模型實(shí)現(xiàn)方法,其特征在于,所述3D描述模型通過(guò)過(guò)濾器對(duì)BlenderfD的3D-0BJ文件轉(zhuǎn)換和過(guò)濾生成,包括: 讀取3D-0BJ文件中的頂點(diǎn)坐標(biāo)數(shù)據(jù),并統(tǒng)計(jì)其總數(shù)和X軸、y軸和z軸的最大和最小值; 讀取3D-0BJ文件中的紋理坐標(biāo)數(shù)據(jù)和索引數(shù)據(jù),并根據(jù)索引數(shù)據(jù)和頂點(diǎn)坐標(biāo)數(shù)據(jù)的順序生成與所述頂點(diǎn)坐標(biāo)順序相對(duì)應(yīng)的紋理坐標(biāo)數(shù)據(jù); 輸出包含頂點(diǎn)坐標(biāo)總數(shù)、X軸、y軸和z軸的最大和最小值、坐標(biāo)數(shù)據(jù)、頂點(diǎn)坐標(biāo)數(shù)據(jù)的3D描述文件。
7.根據(jù)權(quán)利要求1所述的移動(dòng)終端3D模型實(shí)現(xiàn)方法,其特征在于,當(dāng)從所述3D描述文件中獲取不到三角形繪圖模式時(shí),則啟用默認(rèn)的三角形繪圖模式進(jìn)行繪制。
8.一種移動(dòng)終端3D模型實(shí)現(xiàn)裝置,其特征在于,包括:終端解析器,用于終端解析器獲取并解析3D描述文件,所述3D描述文件中包括: 3D模型的材質(zhì)信息、X軸、y軸、z軸的最大和最小值、頂點(diǎn)坐標(biāo)總數(shù)、頂點(diǎn)坐標(biāo)、紋理坐標(biāo)以及紋理圖片信息; 讀取X軸、y軸和z軸的最大和最小值;讀取頂點(diǎn)坐標(biāo)總數(shù),根據(jù)頂點(diǎn)總數(shù)分配緩存空間,并將具體的頂點(diǎn)坐標(biāo)與紋理坐標(biāo)信息放入到所述緩存空間之中; 渲染器,用于基于所述X軸、y軸、Z軸的最大和最小值初始化; 繪制模塊,用于查詢3D描述文件并判斷其中是否包含三角形繪制模式,當(dāng)獲取到三角形繪制模式時(shí),基于所述三角形的繪制模式和頂點(diǎn)坐標(biāo)的總數(shù)、頂點(diǎn)坐標(biāo)、紋理坐標(biāo)信息以及紋理圖片繪制相對(duì)應(yīng)的3D模型。
9.根據(jù)權(quán)利要求8所述的移動(dòng)終端3D模型實(shí)現(xiàn)裝置,其特征在于,所述渲染器進(jìn)一步用于根據(jù)手機(jī)屏幕大小創(chuàng)建并分配視口大??;根據(jù)X軸、y軸和Z軸的最大和最小值設(shè)置正交投影變換。
10.根據(jù)權(quán)利要求8或9所述的移動(dòng)終端3D模型實(shí)現(xiàn)裝置,其特征在于,所述渲染器,根據(jù)X軸、y軸和Z軸的最大和最小值設(shè)置正交投影變換,包括: 獲取物體在X軸、y軸和z軸的總長(zhǎng)度,并分別基于各自的總長(zhǎng)度創(chuàng)建對(duì)應(yīng)的X軸、y軸、z軸的兩端坐標(biāo)。
【文檔編號(hào)】G06F17/30GK103617220SQ201310598189
【公開日】2014年3月5日 申請(qǐng)日期:2013年11月22日 優(yōu)先權(quán)日:2013年11月22日
【發(fā)明者】陳軼, 吳遠(yuǎn)青, 王瑋, 潘騰, 郭偉, 王旭東 申請(qǐng)人:北京掌闊移動(dòng)傳媒科技有限公司