ARApplicationController
AR实例的总控制器类,封装了AR实例ARApplication的创建、脚本中消息发送和接收、脚本虚拟机 Script VM的管理、平台共享信息数据接口、算法和传感器数据接口等。
Public methods | |
---|---|
ARApplicationController | shared_instance 获取当前控制器的实例,它是一个单例 |
ARApplicationController | add_application_with_name 创建并添加一个Application的实例 |
ARApplicationController | get_current_ar_application 获取当前Application的实例 |
ARApplicationController | get_script_vm 获取当前ApplicationController中的Lua脚本虚拟机 |
ARApplicationController | send_message_to_native 往native sdk中发送消息 |
ARApplicationController | set_native_message_handler 注册从native层发来的消息的响应函数 |
ARApplicationController | environment 获取平台和当前运行环境相关的数据 |
ARApplicationController | native_data_pipe 获取native层视觉算法输出的当前帧的跟踪数据 / 传感器数据 |
shared_instance
static ARApplicationController& shared_instance();
获取当前控制器的实例,它是一个单例
示例:
sample code:
local app_controller = ARApplicationController:shared_instance()
add_application_with_name
version 190
ARApplication* add_application_with_name(const std::string &name);
创建并添加一个Application的实例
Parameters
- name | string : 指定创建的ARApplication的名字
Return
- ARApplication* : 所创建的application实例的指针
sample:
local application = app_controller:add_application_with_name("my_ar_application")
get_current_ar_application
version 190
ARApplication* get_current_ar_application();
获取当前Application的实例
sample:
local application = app_controller:get_current_ar_application()
get_script_vm
version 190
ARScriptVM* get_script_vm();
获取当前ApplicationController中的Lua脚本虚拟机
Return
- ARScriptVM& : 当前Application中的Lua脚本虚拟机对象的引用
sample:
local script_vm = app_controller:get_script_vm()
script_vm:require_module("ar.lua")
send_message_to_native
version 190
send_message_to_native(LUA_TABLE msg_data)
往native sdk中发送消息
Parameters
- msg_data | LUA_TABLE : 消息数据,类型是一个Lua 原生的Table,所包含的数据支持嵌套Table,支持number、string、ARVec3、ARVec4、ARMat44
sample:
local msg = {}
local mat44 = basketball_node:get_property_mat44("world_transform")
local pos = ae.ARVec3:new_local(100, 200, 300)
local pos2 = ae.ARVec4:new_local(100, 200, 300, 400)
msg["id"] = 21113
msg["msg"] = "send msg by lua table ok"
msg["key"] = "test"
msg["vec3"] = pos
msg["vec4"] = pos2
msg["mat44"] = mat44
app_controller:send_message_to_native(msg)
io.write("mesage sent to native:"..msg:to_string())
set_native_message_handler
version 190
set_native_message_handler(LUA_FUNCTION handler)
注册从native层发来的消息的响应函数
Parameters
- LUA_FUNCTION handler : 消息接收响应的回调,类型是一个Lua 原生的Function,这个Function有一个LUA_TABLE类型的参数
sample:
function on_message_from_native(msg)
io.write("got a message from native:"..msg:to_string())
end
app_controller:set_native_message_handler(on_message_from_native)
environment
version 190
LUA_TABLE environment();
获取平台和当前运行环境相关的数据,如SDK Version、URLScheme、OS Name 等等
Return
- LUA_TABLE : 返回值是一个Lua Table,userinfo字段包含当前运行环境相关的数据,如SDK Version, URLScheme, OS Name 等 ;caseinfo字段包含case相关输入,case适配版本等
字段说明如下
userinfo:
"app_version" : app版本
"channel" : 渠道号
"os_version" : 设备系统版本
"os_type" : 设备系统类型
"device_type" : 设备类型
"devide_id" : 设备id
"ar_key" : case的arkey
"ar_type" : case 的artype
"url_schema" : 用户的url_schema
"compatible_version ": case适配版本
sample:
local env = app_controller:environment()
local userinfo = env["userinfo"]
ARLOG("current app version : "..userinfo["app_version"])
native_data_pipe
version 190
LUA_TABLE native_data_pipe()
获取native层视觉算法输出的当前帧的跟踪数据 / 传感器数据,如ImageTracking、Slam InstantTracking算法输出的RT Matrix、IMU输出的rotation Matrix等
Return
- LUA_TABLE : native层透传的ImageTracking、Slam InstantTracking算法输出的RT Matrix、IMU输出的rotation Matrix等数据
sample:
local data = app_controller:native_data_pipe()
local track_data = data["track"]
ARLOG("track_data : "..track_data:to_string())
Deprecated methods(建议不再使用的方法)
add_application_with_type
ARApplication* add_application_with_type(int type, const std::string name);
从当前新的版本开始,引擎中不再根据跟踪算法的类型来区分不同的Application,已实现和具体视觉算法的解耦,新的AR场景开发中不建议使用,请使用add_application_with_name代替
require
void require(std::string& filename);
旧版本中引入已存在的Lua Module 文件的方法,新版本中已改为在ARScriptVM中提供,请使用ARScriptVM中的require方法替代