.. _6 API接口函数一览: 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对象 2. 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功能接口 3. 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上,通过此接口主动更新手柄数据。 2. CVController.java - 通过以下接口获取相关数据前需要调用CVControllerManager.updateControllerData(float[] hmdData) .. code-block:: java @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功能接口 3. 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);