Vuforia AR SDK之替換模型(已解決模型貼圖問題)

1但指、將模型轉(zhuǎn)換為.obj格式寡痰,這個通過很多三維軟件都可以實現(xiàn),我用的是3Dmax棋凳。
2拦坠、將obj文件轉(zhuǎn)換為.h文件
因為高通ARsdk識別的是這類的頭文件。頭文件中包含了這個模型的坐標(biāo)數(shù)據(jù)剩岳。提取這些坐標(biāo)數(shù)據(jù)通過OpenGL進(jìn)行渲染就可以繪制出圖形贞滨。這是后話。現(xiàn)在介紹怎么將obj文件轉(zhuǎn)為頭文件拍棕。首先從網(wǎng)上下載ActivePerl和obj2opengl.pl晓铆。ActivePerl是一個perl的腳本解釋器。obj2opengl.pl就是使用perl語言寫的一個腳本程序绰播。顧名思義骄噪,就可以知道這個腳本程序的作用就是將obj->opengl能夠使用的頭文件。這兩個可以在下面這個鏈接下載:
http://download.csdn.net/detail/ggtaas/4998573
http://download.csdn.net/detail/ggtaas/4998714
ActivePerl解壓之后直接安裝蠢箩,一般安裝在c盤的perl文件夾下链蕊,然后將第二個壓縮包解壓得到的obj2opengl.pl文件拷貝進(jìn)bin文件夾下事甜。這樣這個工具就可以用了。很簡單吧滔韵。下面將你需要轉(zhuǎn)換的obj文件也拷貝進(jìn)bin文件夾中逻谦,例如是banana.obj,再運(yùn)行下面的dos命令就可以了陪蜻,見下圖:


這樣你會發(fā)現(xiàn)你的bin文件夾下就多生成了一個banana.h文件邦马。
3、替換模型囱皿,這里我們以ImageTargets為例勇婴,將生成的banana.h文件替換程序中的teapot.h。
首先來簡單看一下生成的頭文件的內(nèi)容:

<span style="font-family:SimSun;font-size:14px;">/*                                                           
created with obj2opengl.pl                                   
                                                             
source file    : .\banana.obj                                
vertices       : 4032                                        
faces          : 8056                                        
normals        : 4032                                        
texture coords : 4420                                        
                                                             
                                                             
// include generated arrays                                  
#import ".\banana.h"                                         
                                                             
// set input data to arrays                                  
glVertexPointer(3, GL_FLOAT, 0, bananaVerts);                
glNormalPointer(GL_FLOAT, 0, bananaNormals);                 
glTexCoordPointer(2, GL_FLOAT, 0, bananaTexCoords);          
                                                             
// draw data                                                 
glDrawArrays(GL_TRIANGLES, 0, bananaNumVerts);               
*/                                                            
                                                              
unsigned int bananaNumVerts = 24168;                          
                                                              
float bananaVerts [] = {                                      
  // f 231/242/231 132/142/132 131/141/131                    
  0.172233487787643, -0.0717437751698985, 0.228589675538813,  
  0.176742968653347, -0.0680393472738536, 0.2284149434494,    
  0.167979223684599, -0.0670168837233226, 0.24286384937854,   
  // f 131/141/131 230/240/230 231/242/231                    
  0.167979223684599, -0.0670168837233226, 0.24286384937854,   
  0.166391290343292, -0.0686544011752973, 0.241920432968569,  
………………</span>  

由于篇幅有限制截取這么一點嘱腥。其實已經(jīng)夠了,下面的都是類似這樣的坐標(biāo)值拘悦。那主要有哪些呢?看下面這些就可以了齿兔,在程序里面需要用到的就是這些。opengl的基礎(chǔ)知識础米,這里就不贅述了分苇。

<span style="font-family:SimSun;font-size:14px;">// include generated arrays                                   
#import ".\banana.h"                                          
                                                              
// set input data to arrays                                   
glVertexPointer(3, GL_FLOAT, 0, <span style="color:#ff0000;">bananaVerts</span>);                 
glNormalPointer(GL_FLOAT, 0, <span style="color:#ff0000;">bananaNormals</span>);                  
glTexCoordPointer(2, GL_FLOAT, 0, bananaTexCoords);           
                                  <span style="color:#ff0000;">               </span>             
// draw data                                                  
glDrawArrays(GL_TRIANGLES, 0, bananaNumVerts);</span>  

切入正題:

準(zhǔn)備工作:把banana.h拷貝到j(luò)ni文件夾下。把banana.jpg拷貝到assets文件下屁桑。在ImageTargets文件夾打開Jni文件夾医寿。打開ImageTargets.cpp

1.#include"Teapot.h" ->#include"banana.h"

2.

glTexCoordPointer(2, GL_FLOAT, 0, (const GLvoid*)&teapotTexCoords[0]);

       glVertexPointer(3, GL_FLOAT, 0, (const GLvoid*) &teapotVertices[0]);

       glNormalPointer(GL_FLOAT, 0, (const GLvoid*) &teapotNormals[0]);

       glDrawElements(GL_TRIANGLES, NUM_TEAPOT_OBJECT_INDEX, GL_UNSIGNED_SHORT,

                      (const GLvoid*)&teapotIndices[0]);

改為:

glTexCoordPointer(2, GL_FLOAT, 0, (constGLvoid*) &bananaTexCoords[0]);

       glVertexPointer(3, GL_FLOAT, 0, (const GLvoid*) & bananaVerts [0]);

       glNormalPointer(GL_FLOAT, 0, (const GLvoid*) &bananaNormals[0]);

       glDrawArrays(GL_TRIANGLES, 0, bananaNumVerts);

3.
       glVertexAttribPointer(vertexHandle, 3, GL_FLOAT, GL_FALSE, 0, (constGLvoid*) &teapotVertices[0]);

       glVertexAttribPointer(normalHandle, 3, GL_FLOAT, GL_FALSE, 0, (constGLvoid*) &teapotNormals[0]);

       glVertexAttribPointer(textureCoordHandle, 2, GL_FLOAT, GL_FALSE, 0, (constGLvoid*) &teapotTexCoords[0]);

改為:

  glVertexAttribPointer(vertexHandle,3, GL_FLOAT, GL_FALSE, 0, (const GLvoid*) &bananaVerts[0]);

       glVertexAttribPointer(normalHandle,3, GL_FLOAT, GL_FALSE, 0, (const GLvoid*) &bananaNormals[0]);

       glVertexAttribPointer(textureCoordHandle,2, GL_FLOAT, GL_FALSE, 0, (const GLvoid*) &bananaTexCoords[0]); 

4.
glDrawElements(GL_TRIANGLES,NUM_TEAPOT_OBJECT_INDEX, GL_UNSIGNED_SHORT, (const GLvoid*)&teapotIndices[0]);

改為:

glDrawArrays(GL_TRIANGLES, 0,bananaNumVerts); 

5. 設(shè)置 kObjectScale= 120.f;

 為了使模型的大小適當(dāng),否則模型太小了蘑斧。 

6.打開src文件夾靖秩,com文件夾,qualcomm文件夾竖瘾,打開ImageTargets.java沟突。在private void loadTextures()添加: mTextures.add(Texture.loadTextureFromApk("banana.jpg",getAssets())); 如下所示:

    private voidloadTextures()

    {

       mTextures.add(Texture.loadTextureFromApk("banana.jpg",getAssets())); 

       //mTextures.add(Texture.loadTextureFromApk("TextureTeapotBrass.png", getAssets()));

       //mTextures.add(Texture.loadTextureFromApk("TextureTeapotBlue.png", getAssets()));

       //mTextures.add(Texture.loadTextureFromApk("TextureTeapotRed.png", getAssets()));       

    } 

7.在cygwin一直cd到imagetargets目錄后NDK-build可得結(jié)果。

最后效果圖如下:


更新:最近在一個美女程序猿的幫助下解決了模型貼圖的問題捕传,現(xiàn)在簡單說下具體流程惠拭,并附上官方方法:
高通采用的是UV貼圖,正常展UV即可庸论,但是坐標(biāo)有問題职辅,貼上去的就上面的圖一樣。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末聂示,一起剝皮案震驚了整個濱河市域携,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌催什,老刑警劉巖涵亏,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宰睡,死亡現(xiàn)場離奇詭異,居然都是意外死亡气筋,警方通過查閱死者的電腦和手機(jī)拆内,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宠默,“玉大人麸恍,你說我怎么就攤上這事〔蠼茫” “怎么了抹沪?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長瓤球。 經(jīng)常有香客問我融欧,道長,這世上最難降的妖魔是什么卦羡? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任噪馏,我火速辦了婚禮,結(jié)果婚禮上绿饵,老公的妹妹穿的比我還像新娘欠肾。我一直安慰自己,他們只是感情好拟赊,可當(dāng)我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布刺桃。 她就那樣靜靜地躺著,像睡著了一般吸祟。 火紅的嫁衣襯著肌膚如雪瑟慈。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天欢搜,我揣著相機(jī)與錄音封豪,去河邊找鬼。 笑死炒瘟,一個胖子當(dāng)著我的面吹牛吹埠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播疮装,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼缘琅,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了廓推?” 一聲冷哼從身側(cè)響起刷袍,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎樊展,沒想到半個月后呻纹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體堆生,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年雷酪,在試婚紗的時候發(fā)現(xiàn)自己被綠了淑仆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡哥力,死狀恐怖蔗怠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情吩跋,我是刑警寧澤寞射,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站锌钮,受9級特大地震影響桥温,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜梁丘,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一策治、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧兰吟,春花似錦、人聲如沸茂翔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽珊燎。三九已至惭嚣,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間悔政,已是汗流浹背晚吞。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留谋国,地道東北人槽地。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像芦瘾,于是被迫代替她去往敵國和親捌蚊。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容