找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

查看: 911|回复: 10

[Unity3D] (Android)Vuforia开辟 基本 三-调换 模子

[复制链接]

该用户从未签到

3

主题

29

帖子

12

积分

LV.1

Rank: 1

积分
12
QQ
发表于 2016-5-30 22:40:47 | 显示全部楼层 |阅读模式
ARVR技巧交换群:129340649

接待参加!


1、将模子转换为.obj格局,这个经由过程良多三维软件都可以实现,我用的是3Dmax。
2、将obj文件转换为.h文件
由于高通ARsdk辨认的是这类的头文件。头文件中包括了这个模子的坐标数据。提取这些坐标数据经由过程OpenGL进行衬着就可以绘制出图形。这是后话。此刻先容怎么将obj文件转为头文件。起首从网高低载ActivePerl和obj2opengl.pl。ActivePerl是一个perl的剧本说明器。obj2opengl.pl就是应用perl说话写的一个剧本法式。顾名思义,就可以知道这个剧本法式的感化就是将obj->opengl可以或许应用的头文件。这两个可以鄙人面这个链接下载:
>>ActivePerl解压之后直接安装,一般安装在c盘的perl文件夹下,然后将第二个紧缩包解压获得的obj2opengl.pl文件拷贝进bin文件夹下。如许这个东西就可以用了。很简略吧。下面将你须要转换的obj文件也拷贝进bin文件夹中,例如是banana.obj,再运行下面的dos号令就可以了,见下图:

(Android)Vuforia开辟 基本 三-调换 模子

(Android)Vuforia开辟
基本
三-调换
模子

如许你会发明你的bin文件夹下就多天生了一个banana.h文件。
3、调换模子,这里我们以ImageTargets为例,将天生的banana.h文件调换法式中的teapot.h。
起首来简略看一下天生的头文件的内容:
  1. <span style="font-family:SimSun;font-size:14px;">/*                                                         
  2. created with obj2opengl.pl                                 
  3.                                                               
  4. source file    : .\banana.obj                              
  5. vertices       : 4032                                       
  6. faces          : 8056                                       
  7. normals        : 4032                                       
  8. texture coords : 4420                                       
  9.                                                               
  10.                                                               
  11. // include generated arrays                                 
  12. #import ".\banana.h"                                       
  13.                                                               
  14. // set input data to arrays                                 
  15. glVertexPointer(3, GL_FLOAT, 0, bananaVerts);               
  16. glNormalPointer(GL_FLOAT, 0, bananaNormals);               
  17. glTexCoordPointer(2, GL_FLOAT, 0, bananaTexCoords);         
  18.                                                               
  19. // draw data                                                
  20. glDrawArrays(GL_TRIANGLES, 0, bananaNumVerts);              
  21. */                                                        
  22.                                                               
  23. unsigned int bananaNumVerts = 24168;                        
  24.                                                               
  25. float bananaVerts [] = {                                    
  26.   // f 231/242/231 132/142/132 131/141/131                  
  27.   0.172233487787643, -0.0717437751698985, 0.228589675538813,
  28.   0.176742968653347, -0.0680393472738536, 0.2284149434494,  
  29.   0.167979223684599, -0.0670168837233226, 0.24286384937854,
  30.   // f 131/141/131 230/240/230 231/242/231                  
  31.   0.167979223684599, -0.0670168837233226, 0.24286384937854,
  32.   0.166391290343292, -0.0686544011752973, 0.241920432968569,
  33. ………………</span>
复制代码

因为篇幅有限制截取这么一点。实在已经够了,下面的都是相似如许的坐标值。那重要有哪些呢?看下面这些就可以了,在法式里面须要用到的就是这些。opengl的基本常识,这里就不赘述了。
  1. <span style="font-family:SimSun;font-size:14px;">// include generated arrays                                 
  2. #import ".\banana.h"                                       
  3.                                                               
  4. // set input data to arrays                                 
  5. glVertexPointer(3, GL_FLOAT, 0, <span style="color:#ff0000;">bananaVerts</span>);               
  6. glNormalPointer(GL_FLOAT, 0, <span style="color:#ff0000;">bananaNormals</span>);               
  7. glTexCoordPointer(2, GL_FLOAT, 0, bananaTexCoords);         
  8.                                   <span style="color:#ff0000;">               </span>           
  9. // draw data                                                
  10. glDrawArrays(GL_TRIANGLES, 0, bananaNumVerts);</span>
复制代码

切进正题:
预备工作:把banana.h拷贝到jni文件夹下。把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. 设置 kObjectScale= 120.f;
为了使模子的巨细恰当,不然模子太小了。
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可得成果。
最后后果图如下:

(Android)Vuforia开辟 基本 三-调换 模子

(Android)Vuforia开辟
基本
三-调换
模子





(Android)Vuforia开辟 基本 三-调换 模子

(Android)Vuforia开辟
基本
三-调换
模子

更新:比来在一个美男法式猿的辅助下解决了模子贴图的题目,此刻简略说下具体流程,并附上官方方式:

高通采取的是UV贴图,正常展UV即可,可是坐标有题目,贴上往的就上面的图一样。下面是官方的解决方式:

(Android)Vuforia开辟 基本 三-调换 模子

(Android)Vuforia开辟
基本
三-调换
模子

就是将贴图垂直翻转,留意不是扭转。你可以应用PS,或者绘图东西

(Android)Vuforia开辟 基本 三-调换 模子

(Android)Vuforia开辟
基本
三-调换
模子

最后的后果下图所示:

(Android)Vuforia开辟 基本 三-调换 模子

(Android)Vuforia开辟
基本
三-调换
模子

(Android)Vuforia开辟 基本 三-调换 模子

(Android)Vuforia开辟
基本
三-调换
模子

(Android)Vuforia开辟 基本 三-调换 模子

(Android)Vuforia开辟
基本
三-调换
模子

该用户从未签到

1

主题

10

帖子

10

积分

LV.1

Rank: 1

积分
10
QQ
发表于 2016-6-22 01:21:35 | 显示全部楼层
增强现实,增强现实,增强现实。重要的事情说三遍

该用户从未签到

2

主题

31

帖子

13

积分

LV.1

Rank: 1

积分
13
QQ
发表于 2016-7-28 20:08:29 | 显示全部楼层
楼主写的很不错,关于AR的知识受教了

该用户从未签到

3

主题

49

帖子

50

积分

LV.2

Rank: 2

积分
50
QQ
发表于 2016-7-29 02:59:23 | 显示全部楼层
楼主辛苦了。。回帖是一种美德

该用户从未签到

1

主题

12

帖子

12

积分

LV.1

Rank: 1

积分
12
QQ
发表于 2016-8-1 10:37:21 | 显示全部楼层
楼主辛苦了,帮楼主顶起来

该用户从未签到

3

主题

21

帖子

25

积分

LV.1

Rank: 1

积分
25
QQ
发表于 2016-8-1 21:28:03 | 显示全部楼层
想了解下AR增强现实的相关内容来看看

该用户从未签到

2

主题

32

帖子

30

积分

LV.1

Rank: 1

积分
30
QQ
发表于 2016-8-10 06:58:57 | 显示全部楼层
嗯,很不错的样子!!

该用户从未签到

1

主题

14

帖子

3

积分

LV.1

Rank: 1

积分
3
QQ
发表于 2016-8-22 03:34:29 | 显示全部楼层
这里竟然还有这么一个关于AR的网站的收藏了

该用户从未签到

2

主题

47

帖子

44

积分

LV.1

Rank: 1

积分
44
QQ
发表于 2016-9-4 16:15:04 | 显示全部楼层
看帖怎么能不会呢??

该用户从未签到

0

主题

39

帖子

31

积分

LV.1

Rank: 1

积分
31
QQ
发表于 2018-4-1 18:37:08 | 显示全部楼层
增强现实希望发展越来越好
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

关闭

站长推荐上一条 /1 下一条

快速回复 返回顶部 返回列表