初识Qualcomm Adreno SDK

初识Qualcomm Adreno SDK

概述

Adreno 是著名的Qualcomm Snapdragon SoC中的GPU计算单元。Qualcomm公司也为Adreno GPU硬件提供了单独独立的的SDK开发包。Adreno SDK可以帮助开发者优化基于Adreno图形芯片开发的游戏效果。其中包含了开发工具、依赖库以及大量实例、文档和教程。 
Qualcomm Adreno SDK
Adreno SDK已经涵盖了OpenGL ES 2.0、3.0、3.1版本,以及DirectX,并与Unity3D、Unreal Engine等游戏引擎深度整合。可以显著加速渲染复杂几何图形,无论是复杂3D游戏,华丽的用户界面,Web浏览器还是其他高级图形应用程序都没问题。

目前Adreno SDK版本升级到v3.9,为专业的Shader爱好者和并行计算开发者带来更多惊喜。


Adreno SDK v3.9 新特性

Adreno SDK现已支持OpenGL ES 3.1和Android扩展包,并提供了全新的代码和升级了桌面模拟器。这意味着目前SDK已经涵盖了OpenGL ES 2.0、3.0、3.1版本,以及AEP DirectX,文档和指南等内容。

针对并行计算和异构计算的开发者,SDK包还含一个升级版的Snapdragon OpenCL调试器,可以在Eclipse中支持Android L(5.0 Lollipop)。

除了上述丰富的更新之外,在Adreno SDK中还包含了一套详尽的《Adreno OpenGL ES开发指南》,作为一个单独的文件提供给开发者。 
这本Adreno OpenGL ES开发指南还涵盖了最新的Adreno GPU的4xx系列规范。

可以到Qualcomm的开发者网站下载Adreno SDK v3.9


Adreno GPU

既然我们介绍的是Adreno SDK,那么当然要先介绍一下我们的明星Adreno GPU啦。

Adreno是Qualcomm GPU处理器,是美国Qualcomm公司收购AMD绘图掌上设置技术推出的移动图形处理器,目前发布的分别有Adreno 130、Adreno 200、Adreno 203、Adreno 205、Adreno 220、Adreno 225、Adreno 302、Adreno 305、Adreno 306、Adreno 320、Adreno 330、Adreno 420、Adreno 430系列。

随着移动设备的功能日趋强大、使用移动设备的情况日趋复杂,图形复杂的游戏、动画以及应用等对GPU的需求也越来越高。所以Qualcomm一直致力于改进其Adreno图形芯片。

Adreno GPU特色

  • 第一个支持OpenGL ES 3.0
  • 支持遮挡查询、纹理压缩
  • 统一渲染架构(ALU自动分配)
  • DeferRender技术(延迟渲染)
  • FlexRender技术(系统自动选择DirectRender或DeferRender)
  • PCF阴影处理
  • Tessellation(曲面细分)

Adreno 430 GPU

  • 支持超高品质的图形处理特性 – 例如:增强的光照和阴影特效;逼真的面孔渲染和动画特效;通过硬件曲面生成器和几何着色器实现更逼真的3D细节来达到超高清的分辨率
  • 图像处理性能比 Adreno 420 GPU提高30%
  • 功耗比Adreno 420 GPU降低20%
  • GPU通用计算(GPGPU)方面相对于Adreno 420提升高达100%
  • 动态硬件曲面细分旨在支持更加逼真的场景, 并且具有更低的内存使用和更低的功耗
  • 高级API支持,包括OpenGL ES 3.2 和 DirectX 11.2,能够帮助客户实现更复杂和更高效的移动3D图形应用程序和游戏
  • 支持新的 OpenGL ES 3.2* 特性比如计算着色器
  • 支持Android扩展包(Android Extension Pack),其中包括计算、曲面细分和几何着色器等来兼容新的游戏平台和PC。

工具集

  • SDK Browser
  • OpenGL ES模拟器和控制面板
  • 纹理压缩工具
  • FBX文件转换工具
  • 纹理转换工具
  • Qstrip
  • 文字生成器
  • Mesh转换工具
  • 资源打包工具
  • Shader 预处理工具
阅读更多
换一批

Qualcomm Hexagon SDK 之一

06-25

rn 作为Qualcomm官方为HexagonDSP推出的SDK,HexagonSDK1.2.2提供了两种开发方式:CMD(python)与eclipse,这次我选择了eclipse来作为我们开发的工具,这款HexagonDSP推出的eclipse会有什么让人惊奇的表现呢,这次我将从Get start为各位提供对这款软件的基础入门以及进阶。rnrn步骤一:新建工程 项目的建立:rnrn 第一步就是要打开Hexagon IDE,打开以后可以看到如图所示的界面:rn[img=http://img.bbs.csdn.net/upload/201606/25/1466864766_141351.png][/img]rnrn点击file->New->Hexagon file.rnrn[img=http://img.bbs.csdn.net/upload/201606/25/1466864819_922938.png][/img]rnrn接下来我们就可以看到一个对话框用来设置参数:rnrn[img=http://img.bbs.csdn.net/upload/201606/25/1466864914_870526.png][/img]rn[img=http://img.bbs.csdn.net/upload/201606/25/1466864950_29581.png][/img]rn在project name一栏中我们设置新工程名称为”factorial”,rn注意:”project location”的默认位置为workspace设定的位置,而”tools location”的默认位置为系统环境变量所设置的路径,在对话框中,我们可以更改这些路径。rnrn HexagonSDK location定义了SDK的路径rnrn Projecttype定义了输出表,我们在这里选择Executable(也就是exe可执行文件),也可以选择Empty executable作为工程类型,选择Hexagon GNU Tool工具链作为工程工具链。rnrn在这些步骤完成后,Hexagon IDE就已经为我们定义好了一个完整的工程:rn[img=http://img.bbs.csdn.net/upload/201606/25/1466865292_652091.png][/img]rnrn步骤二:开始编写代码rnrn 接下来,通过如下操作可在工程中添加factorial的程序代码:rn 右击Project Explorer中的工程并选择New->Source Filernrn[img=http://img.bbs.csdn.net/upload/201606/25/1466865363_919530.png][/img]rn我们可以看到如图所示的对话框:rnrn[img=http://img.bbs.csdn.net/upload/201606/25/1466865450_645216.png][/img]rnrn 接下来输入我们源程序的文件名(factorial.cpp)并选择文件模板(默认为C++ source template)rnrn 按下finish键之后,我们就创建了一个新的代码文件了。rnrn接下来,各位可以将如下代码粘贴到各位的代码中。这段代码将程序获得的数据通过命令行的方式算出其阶乘。rnrnrn

Qualcomm AR之Vuforia SDK框架

03-06

rnrn[size=16px]Vuforia AR sdk主要有以下几个核心部分rnrn[b]1.Camera[/b]rn获取图像。rnrn[b]2.Image Converter[/b]rn将从相机获得的图像格式转换为Vuforia处理需要的格式,Vuforia使用的是OpenGL图像格式。rnrn[b]3.Tracker[/b]rn将相机从真实世界中获得的图像,利用计算机视觉算法,对其进行特征点进行检测和跟踪。结果保存在会被视频背景渲染器所用到的状态对象(state object)中,且其可以在程序中调用。rnrn[b]4.video background renderer[/b]rn视频背景渲染器模型对保存在状态对象(state object)中的相机图像进行渲染。rnrn[b]5.Application Code[/b]rn在应用开发中,必须要初始化上述的四个部件。并且执行下面是下面三个重要步骤。rn步骤1:查询每一个新的目标的状态对象(state object)。rn步骤2:根据于新的输入数据,更新应用程序逻辑关系。rn步骤3:叠加渲染的增强图形。rn对于每帧图像,需要对状态对象进行更新,并调用应用的渲染方式进行渲染。rnrn[b]6.Device Databases[/b]rn需要使用在线的Target Manager创建设备数据库。在线制作设备数据库,其实就是对用户上传的图片,进行特征提取,用于后面的识别跟踪。计算图像坐标系与相机坐标系之间的关系。rnrn[b]7.Cloud Databases[/b]rn与Device Databases类似,可以用使用Target Manager或者使用 Vuforia Web Services API创建网络数据库。rnrn[b]8.User-Defined Targets[/b]rn用户自定义的目标组件,允许用户从当前相机中实时定义需要跟踪的目标。rn[b]rn9.Word Targets[/b]rnVuforia SDK同样支持文字目标的识别与跟踪。rnrn[b]Vuforia SDK的架构如下图[/b][/size]rn[img=http://img.bbs.csdn.net/upload/201703/06/1488807351_250804.png][/img]

Qualcomm AR SDK之替换模型

01-07

1、将模型转换为.obj格式,这个通过很多三维软件都可以实现,我用的是3Dmax。rnrn2、将obj文件转换为.h文件rnrn因为高通ARsdk识别的是这类的头文件。头文件中包含了这个模型的坐标数据。提取这些坐标数据通过OpenGL进行渲染就可以绘制出图形。这是后话。现在介绍怎么将obj文件转为头文件。首先从网上下载ActivePerl和obj2opengl.pl。ActivePerl是一个perl的脚本解释器。obj2opengl.pl就是使用perl语言写的一个脚本程序。顾名思义,就可以知道这个脚本程序的作用就是将obj->opengl能够使用的头文件。这两个可以在下面这个链接下载:rnrnhttp://download.csdn.net/detail/ggtaas/4998573rnrnhttp://download.csdn.net/detail/ggtaas/4998714rnrnActivePerl解压之后直接安装,一般安装在c盘的perl文件夹下,然后将第二个压缩包解压得到的obj2opengl.pl文件拷贝进bin文件夹下。这样这个工具就可以用了。很简单吧。下面将你需要转换的obj文件也拷贝进bin文件夹中,例如是banana.obj,再运行下面的dos命令就可以了,见下图:rn[img=http://img.bbs.csdn.net/upload/201401/07/1389081282_391210.png][/img]rnrn这样你会发现你的bin文件夹下就多生成了一个banana.h文件。rnrn3、替换模型,这里我们以ImageTargets为例,将生成的banana.h文件替换程序中的teapot.h。rnrn首先来简单看一下生成的头文件的内容:rn[code=text]/* rncreated with obj2opengl.pl rn rnsource file : .\banana.obj rnvertices : 4032 rnfaces : 8056 rnnormals : 4032 rntexture coords : 4420 rn rn rn// include generated arrays rn#import ".\banana.h" rn rn// set input data to arrays rnglVertexPointer(3, GL_FLOAT, 0, bananaVerts); rnglNormalPointer(GL_FLOAT, 0, bananaNormals); rnglTexCoordPointer(2, GL_FLOAT, 0, bananaTexCoords); rn rn// draw data rnglDrawArrays(GL_TRIANGLES, 0, bananaNumVerts); rn*/ rn rnunsigned int bananaNumVerts = 24168; rn rnfloat bananaVerts [] = rn // f 231/242/231 132/142/132 131/141/131 rn 0.172233487787643, -0.0717437751698985, 0.228589675538813, rn 0.176742968653347, -0.0680393472738536, 0.2284149434494, rn 0.167979223684599, -0.0670168837233226, 0.24286384937854, rn // f 131/141/131 230/240/230 231/242/231 rn 0.167979223684599, -0.0670168837233226, 0.24286384937854, rn 0.166391290343292, -0.0686544011752973, 0.241920432968569, rn……………… [/code]rn由于篇幅有限制截取这么一点。其实已经够了,下面的都是类似这样的坐标值。那主要有哪些呢?看下面这些就可以了,在程序里面需要用到的就是这些。opengl的基础知识,这里就不赘述了。rn[code=text]// include generated arrays rn#import ".\banana.h" rn rn// set input data to arrays rnglVertexPointer(3, GL_FLOAT, 0, bananaVerts); rnglNormalPointer(GL_FLOAT, 0, bananaNormals); rnglTexCoordPointer(2, GL_FLOAT, 0, bananaTexCoords); rn rn// draw data rnglDrawArrays(GL_TRIANGLES, 0, bananaNumVerts);[/code]rn切入正题:rnrn准备工作:把banana.h拷贝到jni文件夹下。把banana.jpg拷贝到assets文件下。在ImageTargets文件夹打开Jni文件夹。打开ImageTargets.cpp rnrn1.#include"Teapot.h" ->#include"banana.h"rnrn2.rnrnglTexCoordPointer(2, GL_FLOAT, 0, (const GLvoid*)&teapotTexCoords[0]);rnrn glVertexPointer(3, GL_FLOAT, 0, (const GLvoid*) &teapotVertices[0]);rnrn glNormalPointer(GL_FLOAT, 0, (const GLvoid*) &teapotNormals[0]);rnrn glDrawElements(GL_TRIANGLES, NUM_TEAPOT_OBJECT_INDEX, GL_UNSIGNED_SHORT,rnrn (const GLvoid*)&teapotIndices[0]);rnrn改为:rnrnglTexCoordPointer(2, GL_FLOAT, 0, (constGLvoid*) &bananaTexCoords[0]);rnrn glVertexPointer(3, GL_FLOAT, 0, (const GLvoid*) & bananaVerts [0]);rnrn glNormalPointer(GL_FLOAT, 0, (const GLvoid*) &bananaNormals[0]);rnrn glDrawArrays(GL_TRIANGLES, 0, bananaNumVerts);rnrn rnrn3.rnrn glVertexAttribPointer(vertexHandle, 3, GL_FLOAT, GL_FALSE, 0, (constGLvoid*) &teapotVertices[0]);rnrn glVertexAttribPointer(normalHandle, 3, GL_FLOAT, GL_FALSE, 0, (constGLvoid*) &teapotNormals[0]);rnrn glVertexAttribPointer(textureCoordHandle, 2, GL_FLOAT, GL_FALSE, 0, (constGLvoid*) &teapotTexCoords[0]);rnrn改为:rnrn glVertexAttribPointer(vertexHandle,3, GL_FLOAT, GL_FALSE, 0, (const GLvoid*) &bananaVerts[0]);rnrn glVertexAttribPointer(normalHandle,3, GL_FLOAT, GL_FALSE, 0, (const GLvoid*) &bananaNormals[0]);rnrn glVertexAttribPointer(textureCoordHandle,2, GL_FLOAT, GL_FALSE, 0, (const GLvoid*) &bananaTexCoords[0]); rnrn4.rnrn glDrawElements(GL_TRIANGLES,NUM_TEAPOT_OBJECT_INDEX, GL_UNSIGNED_SHORT, (const GLvoid*)&teapotIndices[0]);rnrn改为:rnrn glDrawArrays(GL_TRIANGLES, 0,bananaNumVerts); rnrn5. 设置 kObjectScale= 120.f;rnrn 为了使模型的大小适当,否则模型太小了。 rnrn6.打开src文件夹,com文件夹,qualcomm文件夹,打开ImageTargets.java。在private void loadTextures()添加: mTextures.add(Texture.loadTextureFromApk("banana.jpg",getAssets())); 如下所示:rnrn private voidloadTextures()rnrn rnrn mTextures.add(Texture.loadTextureFromApk("banana.jpg",getAssets())); rnrn //mTextures.add(Texture.loadTextureFromApk("TextureTeapotBrass.png", getAssets()));rnrn //mTextures.add(Texture.loadTextureFromApk("TextureTeapotBlue.png", getAssets()));rnrn //mTextures.add(Texture.loadTextureFromApk("TextureTeapotRed.png", getAssets())); rnrn rnrn7.在cygwin一直cd到imagetargets目录后NDK-build可得结果。rnrn最后效果图如下:rn[img=http://img.bbs.csdn.net/upload/201401/07/1389081395_271880.png][/img]rnrn[img=http://img.bbs.csdn.net/upload/201401/07/1389081405_791031.png][/img]rn问题:现在换模型是可以实现了,但是有的模型包含多个贴图,本人能力有限,还贴不好。希望有兴趣的可以一起研究交流一下,也希望高手可以指导一下,~_~谢谢!本人QQ:472947433rnrn如果大家觉得有什么问题或者建议的话也可以联系我!

没有更多推荐了,返回首页