6 API接口函数一览

6.1 获取版本信息

getSDKVersion

函数名:String getSDKVersion ()

功能:获取SDK版本号

参数:无

返回值:SDK版本号

调用方式:PicovrSDK.getSDKVersion ()

6.2 Render相关

SetEyeBufferSize

函数名:void SetEyeBufferSize(int width, int height)

功能:设置eyebuffer的尺寸。请注意此接口应该在activity的onResume() 里调用生效,不能动态地修改。

参数:width,水平方向长度;Height:垂直方向长度。

返回值:无

调用方式:PicovrSDK.SetEyeBufferSize (1920,1920)

GetEyeBufferWidth

函数名:int GetEyeBufferWidth( )

功能:获取eyebuffer的宽度。

参数:无

返回值:eyebuffer的宽度

调用方式:PicovrSDK.GetEyeBufferWidth( )

GetEyeBufferHeight

函数名:int GetEyeBufferHeight( )

功能:获取eyebuffer的高度。

参数:无

返回值:eyebuffer的高度

调用方式:PicovrSDK.GetEyeBufferHeight( )

setProjectionFov

函数名:void setProjectionFov( float fovDegreesX, float fovDegreesY )

功能:设置渲染所用的fov值。目前只支持水平和垂直方向使用相同的值。请注意此接口应该在activity的onResume() 里调用生效,不能动态地修改。

参数:fovDegreesX: 水平方向的fov值;fovDegreesY: 垂直方向的fov值。

返回值:无

调用方式:PicovrSDK.setProjectionFov( 120f, 120f )

nativeSetMultisamples

函数名:void nativeSetMultisamples(long nativePtr, int samples)

功能:设置eyebuffer抗锯齿属性。请注意此接口是VRActivity的成员函数,应该在其子类的onCreate( )里调用,如果太晚可能会因为eyebuffer已经完成初始化而无法生效。

参数: nativePtr:指向NativeApp实例的指针。 在VRActivity的onCreate( )函数里,会调用getNativePtr( )并把返回值保存到成员变量nativePtr中,请直接将该变量作为参数传入;

samples:抗锯齿采样倍数,目前支持0,2,4。

返回值:无

调用方式:this.nativeSetMultisamples(this.nativePtr,4);

6.3 Sensor跟踪相关

startSensor

函数名:int startSensor (int index)

功能:开启sensor跟踪

参数:0

返回值:0: 调用成功;1:调用失败

调用方式:PicovrSDK.startSensor (0)

stopSensor

函数名:int stopSensor (int index)

功能:停止sensor跟踪

参数:0

返回值:0: 调用成功;1:调用失败

调用方式:PicovrSDK.stopSensor(0)

resetSensor

函数名:int resetSensor (int index)

功能:重置sensor跟踪,方向由系统决定,默认重置水平和垂直方向

参数:0

返回值:0: 调用成功;1:调用失败

调用方式:PicovrSDK.resetSensor (0)

resetSensorWithOption

函数名:int resetSensorWithOption (int index, int resetRot, int resetPos)

功能:选择性重置sensor姿态和位置

参数:index:0 ; resetRot: 0:不重置方向 1:重置方向 ; resetPos: 0:不重置位置 1:重置位置

返回值:0: 调用成功;1:调用失败

调用方式:PicovrSDK.resetSensorWithOption(0,1,1)

GetMainSensor

函数名:float [] GetMainSensor ()

功能:获取主Sensor的方向,位置数据。请在SDK正常运行以后再调用,如果SDK未正常初始化,会调用失败,返回默认值。

参数:无

返回值:float数组,包含{x,y,z,w,px,py,pz}

调用方式:PicovrSDK.GetMainSensor()

getHmdPose

函数名:float [] getHmdPose (float time)

功能:获取主Sensor的预测方向,位置数据。请在SDK正常运行以后再调用,如果SDK未正常初始化,会调用失败,返回默认值。

参数:time: 预测的时间,单位ms

返回值:float数组,包含{x, y, z, w, px, py, pz}

调用方式:例如 预测50ms以后的数据,PicovrSDK.getHmdPose( 50 )

getPredictedDisplayTime

函数名:float getPredictedDisplayTime( )

功能:预测下一帧画面刷新到屏幕上的时间间隔。

参数:无

返回值:毫秒

调用方式:例如 float predict = PicovrSDK.getPredictedDisplayTime( );

getPredictedHeadPoseState

函数名:int getPredictedHeadPoseState(float timeInMs, float[] data, long[] timeStamp)

功能:获取指定预测时间的姿态数据。

参数:timeInMs: 预测的时间,单位ms;

data: 包含获取的姿态数据,按顺序依次为{x, y, z, w, px, py, pz};

timestamp:包含获取姿态的时间戳,按顺序依次为{ poseTimeStampNs, poseFetchTimeNs, expectedDisplayTimeNs }。

返回值:姿态数据质量高低,按0~3依次增高

调用方式:例如 预测50ms以后的数据,PicovrSDK.getPredictedHeadPoseState( 50, poseData, poseTime);

nativeSetRenderPose

函数名:void nativeSetRenderPose(long nativePtr, float[] pose, long[] timeStamp)

功能:向SDK提交渲染场景所使用的姿态数据,此接口应该在onFrameEnd里调用。如果选择使用onFrameBegin 接口回调的姿态,则不需要再调用此接口。

参数:nativePtr,指向NativeApp的指针,在VRActivity创建的时候会存储在“nativePtr”字段里。

pose,姿态数据,依次为 {x, y, z, w, px, py, pz};

timestamp,姿态时间戳,依次为{ poseTimeStampNs, poseFetchTimeNs, expectedDisplayTimeNs }。

返回值:无

调用方式:例如nativeSetRenderPose(nativePtr,poseData,poseTime);

6.4 电量音量亮度服务相关

请注意,在实现这些功能之前,还需要申请修改系统设置的权限,请参考Android通用实现方案,此处不再详细说明。

Pvr_InitAudioDevice

函数名:void Pvr_InitAudioDevice (Context context)

功能:初始化音量服务

参数:Context

返回值:无

调用方式:SysActivity.Pvr_InitAudioDevice (context)

Pvr_GetMaxAudionumber

函数名:int Pvr_GetMaxAudionumber ()

功能:获取最大音量

参数:无

返回值:音量最大值

调用方式:SysActivity. Pvr_GetMaxAudionumber ()

Pvr_GetAudionumber

函数名:int Pvr_GetAudionumber ()

功能:获取当前音量

参数:无

返回值:当前音量值(范围是0~15)

调用方式:SysActivity.Pvr_GetAudionumber ()

Pvr_UpAudio

函数名:void Pvr_UpAudio ()

功能:提高音量

参数:无

返回值:无

调用方式:SysActivity.Pvr_UpAudio ()

Pvr_DownAudio

函数名:void Pvr_DownAudio ()

功能:降低音量

参数:无

返回值:无

调用方式:SysActivity.Pvr_DownAudio ()

Pvr_ChangeAudio

函数名:void Pvr_ChangeAudio (int num)

功能:设置音量

参数:设置的音量大小数值(音量值的范围是0~15)

返回值:无

调用方式:SysActivity.Pvr_ChangeAudio (num)

Pvr_GetCommonBrightness

函数名:int Pvr_GetCommonBrightness (Context context)

功能:获取当前通用设备亮度值

参数:Context

返回值:当前亮度值(亮度值的范围是0~255)

调用方式:SysActivity.Pvr_GetCommonBrightness (context)

Pvr_SetCommonBrightness

函数名:boolean Pvr_SetCommonBrightness (int num, Context context)

功能:设置当前通用设备亮度值

参数:亮度值(亮度值的范围是0~255),Context

返回值:true:成功, false:失败

调用方式:SysActivity.Pvr_SetCommonBrightness (num,context)

6.5 手柄相关

6.5.1 Pico Goblin/G2

主要类说明:

  1. HbManager.java

public void InitServices()

进行初始化,绑定 HummingBirdControllerService

public void Pause() , public void Resume()

程序进入后台时,注销广播接收器,解绑HummingBirdControllerService。Resume的时候再重新建立连接。

public void setHbListener(HbListener listener)

设置HbController的监听器

public HbController getHbController()

获取HbController对象

  1. HbController.java

HbController类从系统相关Service获取到手柄数据以后,会更新到内部变量中,可从功能接口获取,详细说明请参考表格6.1。

public void Start() , public void Stop()

控制 监听器注册和注销

public void update()

更新手柄数据,包括加速度,角速度,四元数,键值,并通知listener执行相应的回调函数

public void startUpdateThread(), public void stopUpdateThread()

控制HbController内部更新线程的开始与结束。在手柄连接状态下,该线程每隔15ms 调用update( )读取一次手柄数据。开发者可以直接利用该线程,也可根据需求直接调用update( )接口。

API Description
public int getConnectState() 获取手柄连接状态, 返回值 0:Disconnect 返回值 1:Connecting 返回值 2:Connected
public boolean getButtonState(ButtonNum b) 获取手柄指定按键状态, (false:抬起True:按下)
public int getBatteryLevel() 获取手柄电量, 返回值范围:1~5
public Orientation getOrientation() 获取手柄当前指向的四元数{x,y,z,w}SDK接口返回值参见com.picovr.client.Orientation类
public float[] getAccel() 获取手柄加速度数据{x,y,z}为Float[3]数组
public float[] getAngular() 获取手柄角速度数据{x,y,z}为Float[3]数组
public long getLastUpdateTimeStamp() 获取手柄最后一次更新数据的时间戳.
public boolean isTouching() 查询手柄TouchPad是否在触摸状态(false:未触摸,true:在触摸中)
public int[] getTouchPosition() 获取手柄TouchPad触摸坐标{x,y}
public int getTrigerKeyEvent() 获取手柄的Trigger键模拟数据(G2手柄有效) 返回值:0,抬起;1,按下

表6.1 HbController功能接口

  1. HbListener.java

※ public void onConnect();

手柄连接

※ public void onDisconnect();

手柄断开

※ public void onDataUpdate();

手柄数据有更新

※ public void onReCenter();

该接口已无实际功能,弃用

※ public void onBindService();

绑定系统HummingBirdControllerService成功

6.5.2 Pico Neo/Neo2/Neo3

以下是该jar包中的主要类说明:

  1. CVControllerManager.java

※ public void bindService() , public void unbindService()

负责绑定和解绑系统服务,在应用启动和暂停时调用,例如Activity的onResume,onPause时。

※ public void setListener(CVControllerListener listener)

设置监听器,用于回调手柄状态通知。

※ public CVController getMainController() , public CVController getSubController()

仅适用于Pico Neo上,可通过此接口获取主副手柄对象。

※ public CVController getLeftController() , public CVController getRightController()

仅适用于Pico Neo 2/Neo 3上,可通过此接口获取左右手柄对象。

注意,对于 Pico Neo 2/Neo 3,如果需要获取手柄的主副属性,可通过如下接口获取:

ControllerClient.getMainControllerIndex();

该接口返回值为手柄序号,返回0代表主手是左手,返回1代表主手是右手。

※public void updateControllerData(float[] hmdData)

仅适用于Pico Neo 2/Neo 3上,通过此接口主动更新手柄数据。

  1. CVController.java
  • 通过以下接口获取相关数据前需要调用CVControllerManager.updateControllerData(float[] hmdData)
@Override
public void onFrameBegin(HmdState hmdState) {
    float[] hmdOrientation = hmdState.getOrientation();
    float[] hmdPosition = hmdState.getPos();
    float[] hmdData = new float[7];
    hmdData[0] = hmdOrientation[0];
    hmdData[1] = hmdOrientation[1];
    hmdData[2] = hmdOrientation[2];
    hmdData[3] = hmdOrientation[3];

    hmdData[4] = hmdPosition[0];
    hmdData[5] = hmdPosition[1];
    hmdData[6] = hmdPosition[2];

    cvManager.updateControllerData(hmdData);
}
API Description
public int getConnectState() 获取手柄连接状态, 返回值 0:Disconnect, 返回值 1:Connect
public int getSerialNum() 获取手柄序号标识,Neo手柄是通用的,此序号仅作索引用,没有实际代表意义。Neo2/Neo3手柄硬件区分左右手,0代表左手,1代表右手。
public int get6DofAbility() 获取手柄6Dof能力, 返回值 1:仅支持3Dof, 返回值 0或2 :支持6Dof
public boolean getButtonState(ButtonNum b) 获取手柄指定按键状态 (false:抬起True:按下)
public int getBatteryLevel() 获取手柄电量,返回值范围:Pico Neo 0~10, Pico Neo2/Neo3 ,1~5
public float[] getOrientation() 获取手柄当前指向的四元数{x,y,z,w},接口返回Float[4]数组
public float[] getPosition() 获取手柄位置数据{x,y,z},接口返回Float[3]数组
public float[] getAcc() 获取手柄加速度数据{x,y,z}为Float[3]数组
public float[] getAgl() 获取手柄角速度数据{x,y,z}为Float[3]数组
public int getTriggerNum() 获取手柄Trigger键触发数据, 范围0~255
public int[] getTouchPad () 获取手柄TouchPad触摸坐标{x,y},接口返回int[2]数组。
public float[] getDataPredict(float var1) 获取手柄预测的方向位置数据, 参数:预测的时间,单位ms , 接口返回Float[7]的数组,包括{x, y, z, w, px, py, pz}
public static void vibrateCV2ControllerStrength(float strength,int time,int controllerSerialNum) 注: 该接口为ControllerClient接口,直接调用ControllerClient.vibrateCV2ControllerStrength即可。 设置手柄震动,参数:strength,震动强度,范围0~1 Time,震动时间,范围0~65535ms ControllerSerialNum,0 左手柄,1 右手柄

表6.2 CVController功能接口

  1. CVControllerListener.java

※ public void onBindSuccess();

绑定系统服务成功

※ public void onBindFail();

绑定系统服务异常断开

※ public void onThreadStart();

绑定系统服务成功,开始正常运行

※ public void onConnectStateChanged(int serialNum,int state);

手柄连接状态变化,serialNum:手柄序号,state:连接状态

※ public void onMainControllerChanged(int serialNum);

主控手柄更改,serialNum:主控手柄序号。在Pico Neo上,收到此通知后,可通过 getMainController 和 getSubController更新主副手柄对象。但是在Pico Neo2/Neo3上,getMainController始终获取到左手柄的对象,getSubController始终获取到右手柄的对象。

※ public void onChannelChanged(int device,int channel);

手柄通信频道有变化,device:手柄序号,channel:该手柄的通信频道

6.5.3 ArmModel模拟

SDK提供一套模拟ArmModel的算法,用于在手柄为3dof的情况下使用,可以模拟人体手臂的运动轨迹,计算出一个三维空间坐标,将该坐标应用于手柄模型的渲染,弥补6dof数据的缺失,能够使体验更加真实。

getPvrHandness

函数名:int getPvrHandness(Context context)

功能:获取系统设置中的左右手参数

参数:context

返回值:0,右手;1,左手。

调用方式:VrActivity.getPvrHandness(context)

SetArmModelParameter

函数名:void setArmModelParameter(int hand, int gazeType, float elbowHeight, float elbowDepth, float pointerTiltAngle);

功能:设置ArmModel参数

参数: hand 0:右手,1:左手,默认值0

gazeType 0:Never,1:During Motion,2:Always,默认值1

elbowHeight 默认值0.0f

elbowDepth 默认值0.0f

pointerTiltAngle 默认值15.0f

返回值:无

调用方式:PicovrSDK.setArmModelParameter(0,1,0,0,15)

setControllerData

函数名:void setControllerData (float[] orientation, float[] accel, float[] gyro, int[] keyData )

功能:向ArmModel传入手柄数据

参数: orientation ,四元数

accel ,加速度计数据

gyro ,陀螺仪数据

keyData ,按键数据

返回值:无

调用方式:PicovrSDK.setControllerData ( orientation, accel, gyro, keyData )

calcArmModelParameters

函数名:void calcArmModelParameters ()

功能:根据手柄数据计算ArmModel位置。注意应该在getPointerPose()之前调用。

参数:无

返回值:无

调用方式:PicovrSDK. calcArmModelParameters()

getPointerPose

函数名:void getPointerPose ( float[] rotation, float[] position)

功能:获取ArmModel计算出的手柄位置和指向

参数: rotation , 四元数

position ,三维空间坐标

返回值:无

调用方式:PicovrSDK.getPointerPose ( rotation, position)

6.6 SeeThrough Camera相关

GetSeethroughFrameFU

函数名:void GetSeethroughFrameFU(int eye, int textureId);

功能:获取seethrough图像数据到纹理

参数:eye: 0:左眼,1:右眼,

textureId:opengl texture句柄

返回值:无

调用方式:PicovrSDK.GetSeeThroughFrameFU(eye, textureId)

SetCameraImageRect

函数名:void SetCameraImageRect(int width, int height)

功能:设置seethrough图像的宽高,以像素为单位

参数:width 图像宽度,height 图像高度

返回值:无

调用方式:PicovrSDK.SetCameraImageRect(width, height);

StartCameraPreview

函数名:void StartCameraPreview(int value)

功能:开启关闭seethrough相机预览

参数:value 0:关,1:开

返回值:无

调用方式:PicovrSDK.StartCameraPreview(value);