资讯 社区 文档
技术能力
语音技术
文字识别
人脸与人体
图像技术
语言与知识
视频技术

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方法替代

上一篇
ARApplication
下一篇
ARScriptVM