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_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¶
主要类说明:
- HbManager.java
public void InitServices()
进行初始化,绑定 HummingBirdControllerService
public void Pause() , public void Resume()
程序进入后台时,注销广播接收器,解绑HummingBirdControllerService。Resume的时候再重新建立连接。
public void setHbListener(HbListener listener)
设置HbController的监听器
public HbController getHbController()
获取HbController对象
- 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功能接口
- 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包中的主要类说明:
- 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上,通过此接口主动更新手柄数据。
- 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功能接口
- 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);