[教程] 高通ARIOS源码开发之更换识别卡片以及更换模型

bbmnqhiboqq 2014-03-22 10:42:31
高通IOS源码开发之更换识别卡片
(1)下载IOS版本SDK,https://developer.vuforia.com/resources/sdk/ios,下载后,完成安装;
(2)下载案例,以https://developer.vuforia.com/re ... -targets-sample-app为例子,下载之后,文件夹保存在QualcommSDKSamples/vuforia-sdk-ios-2-0-32/samples文件夹下;
(3)用Xcode打开该案例工程,用真机运行,如果没问题,那么则进行下一步;(基本上没问题,这里需要开发者帐号,就99美元)
(4)寻找到Xcode代码,我们要更换其中的MARKER以及替换模型,Imagetarget目录下ImageTargetsAppDelegate.m文件,点开,发现代码,此处是加载识别卡片的信息,那么识别信息的文件从哪儿来呢?
// Provide a list of targets we're expecting - the first in the list is the default
[qUtils addTargetName"Stones & Chips" atPath"StonesAndChips.xml"];
[qUtils addTargetName"Tarmac" atPath"Tarmac.xml"];

(5)首先到高通官网https://developer.vuforia.com/user/register注册一个帐号(注册的时候,密码要有大小写和数字),不然,一直不让注册成功的哦
(6)第二,到TargetManager识别卡片管理界面,创建一个Device DataBase,上传图片(不要超过2M),之后,下载,下载时候选择SDK(Unity Editor是适用于Unity平台的)
(7)将下载下来的.XML和.DAT文件拉入Xcode工程的Resources\Assets文件夹,并且添加[qUtils addTargetName:@"ar" atPath:@"ARInChina.xml"];(由于我的识别卡片的名字是ar,放在ARInChina.xml中,所以这样添加),之后运行,然后在真机上双击,发现,可以切换到识别ar卡片的menu,并且出现茶壶(如下图),原因是我将ar这张卡片的识别代码放在了Stones&Chips和Tarmac之前(这个等下说);

(8)更换完自己的卡片之后,大家就想要更换自己的模型,哎哟喂,这个该死的茶壶臭死了!那么,接下来,我们就是要换掉它!我们找到绑定模型到识别卡片的代码!EAGLView.mm中的如下代码:
int targetIndex = 0; // "stones"
if (!strcmp(trackable.getName(), "chips"))
targetIndex = 1;
else if (!strcmp(trackable.getName(), "tarmac"))
targetIndex = 2;
Object3D *obj3D = [objects3D objectAtIndex:targetIndex];

默认的第一章识别卡片为0号模型,由于之前将ar放在列表前面,默认的ar卡片上,出现的是茶壶;
(9)查找模型,并且转换:网上搜索OBJ模型(模型只有一张贴图,不然麻烦),以及obj2opengl.pl处理文件;
OBJ2OPENGL,打开之后,里面有已经转好的.h和贴图文件。也可以打开终端,将PL文件拉入处理OBJ即可,不过自己做的模型经过导出之后,最终的图片可是要经过那个PS垂直翻转的,不然,贴图混乱;
(10)将.h和JPG贴图文件拉入,我以其中的BANANA为例,拉进去,之后修改代码!在这里,为了方便,我将其它的模型都删除了,逻辑也去除了,只留一个ar识别卡片的识别,和模型!
修改代码如下:
1.引入#import"banana.h"头文件,并且获取banana的模型数据,以下为修改;
#import "banana.h"

const char* textureFilenames[] = {
"banana.jpg",
};

- (void) setup3dObjects
{
// build the array of objects we want drawn and their texture
// in this example we have 3 targets and require 3 models
// but using the same underlying 3D model of a teapot, differentiated
// by using a different texture for each
//
Object3D *obj3D = [[Object3D alloc] init];

obj3D.numVertices = bananaNumVerts;
obj3D.vertices = bananaVerts;
obj3D.normals = bananaNormals;
obj3D.texCoords = bananaTexCoords;

obj3D.numIndices = bananaNumVerts;
// obj3D.indices = bananaVerts;

obj3D.texture = [textures objectAtIndex:0];

[objects3D addObjectbj3D];
[obj3D release];
}

之后在renderFramQCAR的时候,将模型绑定于第一张MARKER,也就是我们的名为ar的识别卡
// Choose the texture based on the target name
int targetIndex = 0; // "stones"
// if (!strcmp(trackable.getName(), "chips"))
// targetIndex = 1;
// else if (!strcmp(trackable.getName(), "tarmac"))
// targetIndex = 2;
Object3D *obj3D = [objects3D objectAtIndex:targetIndex];

绑定之后,只缺渲染,将以下代码
glDrawElements(GL_TRIANGLES, obj3D.numIndices, GL_UNSIGNED_SHORT, (const GLvoid*)obj3D.indices);

注释掉,然后,修改为
glDrawArrays(GL_TRIANGLES, 0, obj3D.numIndices);

最终运行,发现,没有香蕉,仔细一看,香蕉很小,那么得放大比例,发现kObjectScale参数是放大的,将参数改为50;
运行图如下再次运行的时候,发现贴图总是有些不对。

于是乎,将图片拉进PS进行修改,经过卤煮风骚牛逼的PS操作--垂直翻转之后保存,再次导入Xcode工程,贴图正确--我会乱说??无图无真相!

好把!!到此为止了,希望对大家有所帮助把!
...全文
1877 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhoudi5083 2014-04-04
  • 打赏
  • 举报
回复
我的eaglview.mm里根本没有setup3dObjects方法啊。。。。我是3月份刚下载的高通SDK,是不是又改版过了??能不能把你的版本发给我研究一下?...zhoudiprivate@msn.com
tmqldebej 2014-03-23
  • 打赏
  • 举报
回复
楼主,威武
jevmnrlzr 2014-03-23
  • 打赏
  • 举报
回复
学习了

2,852

社区成员

发帖
与我相关
我的任务
社区描述
本论坛以AI、WoS 、XR、IoT、Auto、生成式AI等核心板块组成,为开发者提供便捷及高效的学习和交流平台。 高通开发者专区主页:https://qualcomm.csdn.net/
人工智能物联网机器学习 技术论坛(原bbs) 北京·东城区
社区管理员
  • csdnsqst0050
  • chipseeker
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧