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

(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之前(这个等下说);
IMG_1062.jpg
                                       《这个图片是原创的图片》
(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;
运行图如下再次运行的时候,发现贴图总是有些不对。
高通ARIOS源码开发之更换识别卡片以及更换模型《》
《这是本人做的效果,模型图片有点问题没有修改!》

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值