easyar 识别成功后,怎么回调java层代码
easyar是国内开发的一款ar技术sdk,最近开发时遇到问题--- easyar 识别成功后,怎么回调java层代码(其实回调方法sdk应该给出,现在没有只能自己写了)?
很简单,改几个地方就行了
在Renderer.java
public void onDrawFrame (GL10 gl) {
MainActivity. nativeRender ( this ) ;
}
//此方法用来c层回调,输出c代码层的信息
public void output (String out) {
Log. i ( "zdbb" , "zdbb.. c代码回调: " + out) ;
}
MainAtivity.java
public static native void nativeRender (Object obj) ;
helloar.cc (红色字体为关键)
extern "C" {
JNIEXPORT jboolean JNICALL JNIFUNCTION_NATIVE (nativeInit(JNIEnv* env , jobject object)) ;
JNIEXPORT void JNICALL JNIFUNCTION_NATIVE (nativeDestory(JNIEnv* env , jobject object)) ;
JNIEXPORT void JNICALL JNIFUNCTION_NATIVE (nativeInitGL(JNIEnv* env , jobject object)) ;
JNIEXPORT void JNICALL JNIFUNCTION_NATIVE (nativeResizeGL(JNIEnv* env , jobject object , jint w , jint h)) ;
JNIEXPORT void JNICALL JNIFUNCTION_NATIVE (nativeRender(JNIEnv* env , jobject obj , jobject log ));
JNIEXPORT void JNICALL JNIFUNCTION_NATIVE(nativeRotationChange(JNIEnv* env, jobject obj, jboolean portrait));
};
JNIEXPORT void JNICALL JNIFUNCTION_NATIVE (nativeRender(JNIEnv* env , jobject obj , jobject log) )
{
ar.render( env, log ) ;
}
void HelloARVideo ::render( JNIEnv* env, jobject obj )
{
glClearColor( 0.f , 0.f , 0.f , 1.f ) ;
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ) ;
Frame frame = augmenter_ .newFrame() ;
if ( view_size [ 0 ] > 0 ){
AR ::resizeGL( view_size [ 0 , view_size [ 1 ) ;
if ( camera_ && camera_ .isOpened())
view_size [ 0 ] = - 1 ;
}
augmenter_ .setViewPort( viewport_ ) ;
augmenter_ .drawVideoBackground() ;
glViewport( viewport_ [ 0 , viewport_ [ 1 , viewport_ [ 2 , viewport_ [ 3 ) ;
AugmentedTarget :: Status status = frame.targets() [ 0 .status() ;
if (status == AugmentedTarget :: kTargetStatusTracked ){
int id = frame.targets() [ 0 .target().id() ;
std :: string idStr = frame.targets() [ 0 .target().uid() ;
if ( active_target && active_target != id) {
video ->onLost() ;
delete video ;
video = NULL ;
tracked_target = 0 ;
active_target = 0 ;
}
if (! tracked_target ) {
/*
* 回调java代码
*/ jclass cls = env->GetObjectClass(obj);
jmethodID jmid = env->GetMethodID(cls, "output", "(Ljava/lang/String;)V");
jstring info = env->NewStringUTF("你的选择没有错,我欠你的太多 ! ! ! ");
env->CallVoidMethod(obj, jmid,info);
jboolean *jboolean1 = new jboolean(false);
env->ReleaseStringUTFChars(info,env->GetStringUTFChars( info,jboolean1));
if ( video == NULL ) {
if (frame.targets() [ 0 .target().name() == std :: string ( "argame" ) && texid [ 0 ]) {
video = new ARVideo ;
video ->openVideoFile( "video.mp4" , texid [ 0 ]) ;
video_renderer = renderer [ 0 ;
}
else if (frame.targets() [ 0 .target().name() == std :: string ( "namecard" ) && texid [ 1 ]) {
video = new ARVideo ;
video ->openTransparentVideoFile( "transparentvideo.mp4" , texid [ 1 ]) ;
video_renderer = renderer [ 1 ;
}
else if (frame.targets() [ 0 .target().name() == std :: string ( "idback" ) && texid [ 2 ]) {
video = new ARVideo ;
video ->openStreamingVideo( "http://m21.oss-cn-qingdao.aliyuncs.com/1494836612692.mp4" , texid [ 2 ]) ;
video_renderer = renderer [ 2 ;
}
}
if ( video ) {
video ->onFound() ;
tracked_target = id ;
active_target = id ;
}
}
Matrix44F projectionMatrix = getProjectionGL( camera_ .cameraCalibration() , 0.2f , 500.f ) ;
Matrix44F cameraview = getPoseGL(frame.targets() [ 0 .pose()) ;
ImageTarget target = frame.targets() [ 0 .target().cast_dynamic< ImageTarget >() ;
if ( tracked_target ) {
video ->update() ;
video_renderer ->render(projectionMatrix , cameraview , target.size()) ;
}
} else {
if ( tracked_target ) {
video ->onLost() ;
tracked_target = 0 ;
}
}
}
easyar 识别成功后,怎么回调java层代码相关推荐
- JNI通过线程c回调java层的函数
1.参看博客:http://www.jianshu.com/p/e576c7e1c403 Android JNI 篇 - JNI回调的三种方法(精华篇) 2.参看博客: JNI层线程回调Java函数关 ...
- app接入支付宝后,支付成功后,回调不响应
1.在支付时使用的是 [[AlipaySDK defaultService] payOrder: fromScheme: callback:^(NSDictionary *resultDic) { N ...
- PHP处理微信支付成功后的回调处理
PHP处理微信支付成功后的回调处理 微信支付成功后我们可通过设置的回调地址中来处理 public function wx_notify(){$xml = file_get_contents(" ...
- html动态加载js方法,原生JS实现动态加载js文件并在加载成功后执行回调函数的方法...
本文实例讲述了原生JS实现动态加载js文件并在加载成功后执行回调函数的方法.分享给大家供大家参考,具体如下: 有的时候需要动态加载一个javascript文件,并且在加载成功后执行回调函数(例如文件中 ...
- 微信支付回调页面html,微信JSAPI支付成功后获取回调数据
微信JSAPI公众号支付是素材火群主提供的,支付成功后跳转到订单详情页,里面是微信支付成功后回调的数据,由第三方微信支付平台定时请求获取. 下载资源 下载积分: 780 积分 回调地址notify.p ...
- 【iOS-cocos2d-X 游戏开发之十三】cocos2dx通过Jni调用Android的Java层代码(上)
本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/android-game/725.html ☞ ...
- ajax删除成功后的回调,Ajax成功回调'删除'不触发在Firefox中
我有一个测试页面使用Ajax来向服务器发出一个http'删除'请求.以下JS代码在IE7中按照预期工作,但在Firefox中不起作用(除非我使ajax调用异步).Ajax成功回调'删除'不触发在Fir ...
- QQ分享成功后也回调onCancel()
做了一个QQ分享,都分享成功了,但在回调的时候却出问题了.不管是成功或者取消都回调onCancel()方法. 经常查资料和测试,原来是 Tencent.createInstance(你的ID, mCo ...
- 微信分享到朋友圈onMenuShareTimeline成功后的回调函数在某系ios手机下不执行的问题...
以下代码放入success内,setTimeout(function(){ //回调要执行的代码 }, 500); 转载于:https://www.cnblogs.com/liyuchen/p/903 ...
最新文章
- springmvc+spring+hibernate集成cxf
- 小程序获取设备信息以及实现短信验证码登录
- Realm的入门使用
- 必做作业3:原型化系统
- AD命令获取计算机、用户相关信息
- (C++)String的用法
- IIS7.5应用程序池集成模式和经典模式的区别介绍
- 百度编辑器UEditor的使用方法
- 闲聊:Android 平台网络游戏加速器·一(科普文)
- 兄弟7180dn拆机_兄弟DCP-7010拆机图解
- lvds接口屏线安装图解_液晶屏上的LVDS,TTL,RSDS三种接口的详解
- 整流五 - PWM整流器无差拍控制 一(重复控制算法)
- windows资源管理器经常出现无响应 window语言栏不见了
- 【图】max51开发板(手工焊接)
- macOS Monterey 如何设置PPT演讲者模式实现电脑看备注投影看播放内容
- 简单数据类型的转换和条件控制语句(if else)的使用
- 基于微信小程序电影交流平台源码成品(微信小程序毕业设计)
- matlab归一化和标准化
- 实验三 面向对象分析与设计
- JAVA配置多源数据库