** 公司需要在項(xiàng)目中做一個(gè)AR的簡(jiǎn)單實(shí)現(xiàn),對(duì)這塊不怎么熟悉,搜索資料后發(fā)現(xiàn) Vuforia 和 EasyAR 可以簡(jiǎn)單使用! (注:構(gòu)建文件基本都是使用 C++)**
一.Vuforia
1.搜索 Vuforia ,下載相關(guān) SDK 和 Samples;
圖片.png
2.這個(gè)就有點(diǎn)坑了,想運(yùn)行 sample demo,需要把下載好的sample拷貝至sdk目錄下的sample文件夾下,如圖:
圖片.png
3.也可以修改修改 Samples demo中Build Settings ->Search Paths ->Header Search Paths/Library Search Paths.(暫未試過(guò));
4.官網(wǎng)申請(qǐng)一個(gè) license keys , 并將 license keys 添加到項(xiàng)目中的SampleApplicationSession.mm中的 Vuforia::setInitParameters(mVuforiaInitFlags,"你的key"),如圖:
圖片.png
圖片.png
5.可以運(yùn)行了,思密達(dá)!
更換自己模型步驟
**注意:進(jìn)行第一步驟時(shí)候,盡量將上傳的圖片名稱和創(chuàng)建的識(shí)別標(biāo)示卡名稱相同,不知道是否是我操作失誤,我只有在名稱相同之時(shí),才能進(jìn)行運(yùn)行顯示成功!**
1.選擇一張 .jpg 或 .png 圖片,上傳到 Vuforia 的標(biāo)示卡識(shí)別頁(yè)面中,然后下載 .xml 和 .dat 文件;如圖:
圖片.png
2.將下載的 .xml 和 .dat 文件,導(dǎo)入到demo中的 Resources/Assets/ImageTargets 文件中;
**注意:進(jìn)行第一步驟時(shí)候,盡量將上傳的圖片名稱和創(chuàng)建的識(shí)別標(biāo)示卡名稱相同,不知道是否是我操作失誤,我只有在名稱相同之時(shí),才能進(jìn)行運(yùn)行顯示模型成功!**
3.在 ImageTargetsEAGLView.mm 中修改如下代碼, 其中 "tarmac"不變;
int targetIndex = 0; // "stones"
if (!strcmp(trackable.getName(), "ngx"))
targetIndex = 1;
else if (!strcmp(trackable.getName(), "tarmac"))
targetIndex = 2;
4.在 ImageTargetsViewController.mm 中修改 doLoadTrackersData 方法中的如下代碼,其中 "tarmac"不變;
dataSetStonesAndChips = [self loadObjectTrackerDataSet:@"ngx.xml"];
dataSetTarmac = [self loadObjectTrackerDataSet:@"Tarmac.xml"];
** 注意:進(jìn)行完上一步驟時(shí),運(yùn)行程序,發(fā)現(xiàn)拍攝所上傳的圖片,可以看到小茶壺!**
注意:mac端搜索 Perl 并無(wú)此工具,我是在 windows系統(tǒng) 搜索下載生成相關(guān) .h 文件!
5.下載一個(gè) Perl 工具,利用終端命令行打開此工具,執(zhí)行你所有的 .obj 文件,會(huì)生成對(duì)應(yīng)的 .h文件 (.obj文件 和 貼圖可以找建模工程師或者UI設(shè)計(jì)師要) , 導(dǎo)入 .h 文件 .obj 文件 以及貼圖;
圖片.png
6.在 ImageTargetsEAGLView.mm 中導(dǎo)入 .h文件 , 加入香蕉的貼圖;
圖片.png
7.在 ImageTargetsEAGLView.mm 文件中的 renderFrameWithState 方法中,修改并渲染你的模型;
if (offTargetTrackingEnabled) {
glVertexAttribPointer(vertexHandle, 3, GL_FLOAT, GL_FALSE, 0, (const GLvoid*)buildingModel.vertices);
glVertexAttribPointer(normalHandle, 3, GL_FLOAT, GL_FALSE, 0, (const GLvoid*)buildingModel.normals);
glVertexAttribPointer(textureCoordHandle, 2, GL_FLOAT, GL_FALSE, 0, (const GLvoid*)buildingModel.texCoords);
} else {
glVertexAttribPointer(vertexHandle, 3, GL_FLOAT, GL_FALSE, 0, (const GLvoid*)shengdanVerts);
glVertexAttribPointer(normalHandle, 3, GL_FLOAT, GL_FALSE, 0, (const GLvoid*)shengdanNormals);
glVertexAttribPointer(textureCoordHandle, 2, GL_FLOAT, GL_FALSE, 0, (const GLvoid*)shengdanTexCoords);
}
8.在 ImageTargetsEAGLView.mm 文件中的 namespace 中修改放大參數(shù);(根據(jù)自己需要修改)
const float kObjectScaleNormal = 0.2f;
const float kObjectScaleOffTargetTracking = 0.012f;
9.模型繪制修改:
if (offTargetTrackingEnabled) {
glDrawArrays(GL_TRIANGLES, 0, (int)buildingModel.numVertices);
} else {
glDrawElements(GL_TRIANGLES, NUM_TEAPOT_OBJECT_INDEX, GL_UNSIGNED_SHORT, (const GLvoid*)teapotIndices);
glDrawArrays(GL_TRIANGLES, 0, shengdanNumVerts);
}
10.運(yùn)行程序,實(shí)現(xiàn)需要模型顯示需求了! (若模型正反面顛倒,更改參數(shù) rotatePoseMatrix 相關(guān));
二.EasyAR
1.搜索 EasyAR ,然后 在 下載 區(qū) 下載 SDK ;
2.注冊(cè) key ,然后在 OpenGLView.mm 文件中填寫 key;
3.運(yùn)行! 更改模型需要自己搭建模型!
待更新