Qualcomm AR SDK之替换模型(已解决模型贴图问题)
ARVR技术交流群:129340649
欢迎加入!
求从事移动应用开发以及基于移动终端的AR应用开发的朋友,一起做一些事!有兴趣可以给我私信,谢谢!
1、将模型转换为.obj格式,这个通过很多三维软件都可以实现,我用的是3Dmax。
2、将obj文件转换为.h文件
因为高通ARsdk识别的是这类的头文件。头文件中包含了这个模型的坐标数据。提取这些坐标数据通过OpenGL进行渲染就可以绘制出图形。这是后话。现在介绍怎么将obj文件转为头文件。首先从网上下载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文件拷贝进bin文件夹下。这样这个工具就可以用了。很简单吧。下面将你需要转换的obj文件也拷贝进bin文件夹中,例如是banana.obj,再运行下面的dos命令就可以了,见下图:
这样你会发现你的bin文件夹下就多生成了一个banana.h文件。
3、替换模型,这里我们以ImageTargets为例,将生成的banana.h文件替换程序中的teapot.h。
首先来简单看一下生成的头文件的内容:
<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>
由于篇幅有限制截取这么一点。其实已经够了,下面的都是类似这样的坐标值。那主要有哪些呢?看下面这些就可以了,在程序里面需要用到的就是这些。opengl的基础知识,这里就不赘述了。
<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>
切入正题:
准备工作:把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可得结果。
最后效果图如下:
更新:最近在一个美女程序猿的帮助下解决了模型贴图的问题,现在简单说下具体流程,并附上官方方法:
高通采用的是UV贴图,正常展UV即可,但是坐标有问题,贴上去的就上面的图一样。下面是官方的解决方法:
就是将贴图垂直翻转,注意不是旋转。你可以使用PS,或者画图工具
最后的效果下图所示:
^_^本团队专业从事移动增强现实应用开发以及解决方案,有合作请私信联系!^_^
Qualcomm AR SDK之替换模型(已解决模型贴图问题)相关推荐
- 高通增强现实SDK开发实例,COCOACHINA首发。qualcomm ar sdk
先来说一些前言吧 AR: 增强现实,台湾翻译叫做扩张实境. 具体坛子里也有介绍请参考: 猛击这里看参考 目前有很多公司在做这方面得研究,也有很多收费的SDK或者开发包,但是高通最近公布了免费的开发包, ...
- osg 节点渲染 重新渲染模型 (已解决)
以下内容来自: 1.<OpenSceneGraph三维渲染引擎编程指南>肖鹏 刘更代 徐明亮 清华大学出版社 2.<OpenSceneGraph三维渲染引擎设计与实践>王锐 钱 ...
- (已解决)bootstrap录播图切换按钮出不来(变成矩形)解决方案 ...还有彩蛋哦
前戏 前端时间,笔者被前端框架虐的体无完肤,不过说真的,我的UI确实菜的抠脚,所以今天想在传说中bootstrap挽回一点面子,它不是吹自己是最简单最牛逼的框架吗, 遇到我这样的人才,它也只能笑笑不敢 ...
- 【已解决】ADT中通过Android SDK Manager去安装x86的image时无法下载
[已解决]ADT中通过Android SDK Manager去安装x86的image时无法下载 [问题] 折腾: [已解决]ADT中调试Android项目但是无法打开对应的AVD即没有弹出对应的And ...
- 基于高通AR SDK的Demo总结(一)——常规3D模型的行为脚本
下载高通AR SDK以及在Unity中的基本搭建不再阐述,具体给出dzyi大神的文章以便参阅:http://blog.csdn.net/dzyi_/article/details/22892641 这 ...
- java用虹软人脸识别SDK实现人脸识别,运行ArcSoft的Java版本Demo出错,未检出人脸(已解决)
java用虹软人脸识别SDK实现人脸识别,运行ArcSoft的Java版本Demo出错,未检出人脸问题已解决!!! 原因: 虹软人脸识别SDK版本问题! 下载的java版本的demo的SDK是arcs ...
- 结构建模设计——Solidworks软件之在已建模型的基础上进行特征修改及模型报错的解决方法实战
[系列专栏]:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来! <QT开发实战> <嵌入式通用开发实战> <从0到1学习嵌入式Linux开发> <A ...
- 中文分词最佳记录刷新了,两大模型分别解决中文分词及词性标注问题丨已开源...
伊瓢 发自 中关村 量子位 报道 | 公众号 QbitAI 中文分词的最佳效果又被刷新了. 在今年的ACL 2020上,来自创新工场大湾区人工智能研究院的两篇论文中的模型,刷新了这一领域的成绩. WM ...
- Unity Vuforia 之 AR 识别物体抖动的简单解决思路参考
Unity Vuforia 之 AR 识别物体抖动的简单解决思路参考 目录 一.简单介绍 二.问题 三.简单解决思路 附录:Vuforia SDK 的功能如下 一.简单介绍 目前世界上主流的AR ...
最新文章
- android 高德地图纠偏,高德地图纠偏算法(android ,ios)
- PM2 node进程管理工具 自动部署小结
- Codeforces Round #324 (Div. 2) B. Kolya and Tanya 快速幂
- devops工作流程_DevOps会偷我的工作吗?
- day 7-13 数据库的数据类型
- 20160403_C++初始化列表与赋值
- JPack发布0.5.0
- 《勤哲Excel服务器专业开发》
- Photoshop教程五:图层混合模式
- PythonTkinter 练习11之 自编工具 扫描地址段IP
- vtune下载 windows_VtuneApi32e.dll
- 深度Linux的安装
- 2022临床助理医师考试专业知识模拟题
- 小酷智慧地图3D导览v1.0.84 打卡定位 地图打卡
- ege函数库_ege图形库基本说明
- 云栖重磅!阿里云启动视频云V5计划,全面赋能生态合作伙伴
- Python 虚拟环境的使用
- 美团面试 一面+二面
- 江苏大学创新创业学分计算机学院,江苏大学土木工程与力学学院本科生创新创业学分认定实施细则(试行)...
- wpa_supplicant 源码分析 --conf 配置文件