尤物精品在线_h网站在线播放_国产精品一区二区三区不卡_国产精品久久久久免费视频_乱一色一毛一片_www.欧美国产

搜索新聞

UNITY3D中調用WISEGLOVE數據手套的方法

來源:投影時代 更新日期:2016-05-15 作者:pjtime資訊組

    本文介紹了在UNITY3D中調用WISEGLOVE數據手套的方法。 通過該方法可以讀取手套的傳感器角度值和傳感器原始值,可以根據需求執行進一步應用。本程序調用了WISEGLOVE SDK, 并對SDK的主要函數作了調用聲明。

    在UNITY3D中使用WISEGLOVE虛擬現實數據手套可分為三步:

    

    1. 在Start ()中 初始化手套

    2. 在Updata()中循環讀取傳感器數據(數值或者角度)

    3. 關閉手套調用端口

    

    // 聲明:本范例程序適合WiseGlove數據手套,如需了解WiseGlove數據手套,請訪問www.wiseglove.com
// 北京鑫天視景科技有限公司編制
// 2014/6/20

using UnityEngine;
using System.Collections;
using System.Runtime.InteropServices;
using System.Threading;

    
public class WiseGloveData_sample : MonoBehaviour {
//聲明數據手套調用函數
// bool wgInit(); 自動初始化數據手套函數
[DllImport("WiseGloveU3D",EntryPoint = "wgInit")]
extern static int wgInit();
//bool wgInitManu(int comport); 指定端口的初始化函數
[DllImport("WiseGloveU3D",EntryPoint = "wgInitManu")]
extern static int wgInitManu(int comport);
//int wgGetGetNumOfSensor();  獲取手套的傳感器的數量
[DllImport("WiseGloveU3D",EntryPoint = "wgGetGetNumOfSensor")]
extern static int wgGetGetNumOfSensor();
//void wgClose(); //關閉手套調用端口
[DllImport("WiseGloveU3D",EntryPoint = "wgClose")]
extern static int wgClose();
//bool wgGetData(unsigned short *data);  //讀取手套傳感器值,該值在數組里按照sensor0, sensor1,..., sensor(n)的方式排列
[DllImport("WiseGloveU3D",EntryPoint = "wgGetData")]
extern static void wgGetData([MarshalAs(UnmanagedType.LPArray,SizeParamIndex=1)]int[] retData);
//bool wgGetScaledData(unsigned short *data);//讀取手套傳感器歸一化值,該值在數組里按照sensor0, sensor1,..., sensor(n)的方式排列
[DllImport("WiseGloveU3D",EntryPoint = "wgGetScaledData")]
extern static void wgGetScaledData([MarshalAs(UnmanagedType.LPArray,SizeParamIndex=1)]int[] retData);
//bool wgGetAngle(float *data); //讀取手套傳感器角度值,該值在數組里按照sensor0, sensor1,..., sensor(n)的方式排列
[DllImport("WiseGloveU3D",EntryPoint = "wgGetAngle")]
extern static void wgGetAngle([MarshalAs(UnmanagedType.LPArray,SizeParamIndex=1)]float[] retAngle);
//int wgLoadCalib(char *filename);//加載標定數據, 如果需要人工干預標定的情況下
[DllImport("WiseGloveU3D",EntryPoint = "wgLoadCalib")]
extern static void wgLoadCalib([MarshalAs(UnmanagedType.LPArray,SizeParamIndex=1)]char[] filename);
//int wgSaveCalib(char *filename);//保存標定數據
[DllImport("WiseGloveU3D",EntryPoint = "wgSaveCalib")]
extern static void wgSaveCalib([MarshalAs(UnmanagedType.LPArray,SizeParamIndex=1)]char[] filename);
//void wgSetCalibMode(int mode);  設置標定模式是自動還是人工干預
[DllImport("WiseGloveU3D",EntryPoint = "wgSetCalibMode")]
extern static int wgSetCalibMode(int mode);
//void wgSetCalib(int index, unsigned short min, unsigned short max,float angle); 為指定傳感器設置標定值
[DllImport("WiseGloveU3D",EntryPoint = "wgSetCalib")]
extern static int wgSetCalib(int index, ushort min, ushort max, float angle);
//void wgSetMin_adj(int index, float min_adj); //為指定傳感器指定邏輯最小值
[DllImport("WiseGloveU3D",EntryPoint = "wgSetMin_adj")]
extern static int wgSetMin_adj(int index, float min_adj);
//void wgSetMax_adj(int index, float max_adj);//為指定傳感器指定邏輯最大值
[DllImport("WiseGloveU3D",EntryPoint = "wgSetMax_adj")]
extern static int wgSetMax_adj(int index, float max_adj);
//void wgResetCalib(); 復位標定數據
[DllImport("WiseGloveU3D",EntryPoint = "wgResetCalib")]
extern static int wgResetCalib();


//聲明外部變量,以便把手套角度和模型綁定
public Transform Thumb = null;     //大拇指
public Transform Index = null;     //食指
public Transform Middle = null;     //中指
public Transform Ring = null;     //無名指
public Transform Little = null;     //小指

float[] ret_angle; 
int openstate;
void Start () 
{
openstate=wgInit(); //自動掃描系統中的手套 并且初始化
//openstate=wgInitManu(comport); //確定手套端口的情況下,可以使用本函數指定端口,可以提高初始化效率
ret_angle=new float[14];  //存儲傳感器角度值,當然5傳感器手套,只取數組前5個值即可,適合5 14 15 18 19傳感器手套
Debug.Log("open state:"+ openstate.ToString());
}

    
void Update () {

if (openstate == 1) {//讀取手套角度值 
wgGetAngle (ret_angle);  //獲取角度值,保存到ret_angle數組里
//在三維模型中 讓物體均繞X軸旋轉
Thumb.localRotation = Quaternion.Euler (ret_angle [0], 0, 0);
Index.localRotation = Quaternion.Euler (ret_angle [1], 0, 0);
Middle.localRotation = Quaternion.Euler (ret_angle [2], 0, 0);
Ring.localRotation =   Quaternion.Euler (ret_angle [3], 0, 0);
Little.localRotation = Quaternion.Euler (ret_angle [4], 0, 0);
}

//按下R鍵,開始重新標定
if (Input.GetKey (KeyCode.R)) {
wgResetCalib();
}

//如果前面標定好了, 按下C鍵則禁止自動標定,保持前面標定好的結果
if (Input.GetKey (KeyCode.C)) {
wgSetCalibMode(1); //禁止自動標定    //0 - 自動標定
}

if (Input.GetKey (KeyCode.Q)) {
Application.Quit(); //禁止自動標定    //0 - 自動標定
}
}
//顯示各傳感器的當前角度值
void OnGUI()
{
string s;
int offset = 20;
s = "WiseGlove demo for Unity3D, please visit www.wiseglove.com for more!";
GUI.Label(new Rect(200,offset,700,30+offset), s);
offset += 30;
s = "Press 'R' to recalib 'C' to manu calib, and 'Q' to exit program";
GUI.Label(new Rect(20,offset,500,30+offset), s);
offset += 30;

for (int i = 0; i < 5; i++)
{
int temp = (int)ret_angle[i];
s = "Sensor " + i.ToString() + " angle = " + temp.ToString();
GUI.Label(new Rect(10,offset,400,20+offset), s);
offset += 20;
}

int ges = CheckGloveStatus ();

s = "Gesture:" + ges.ToString();
GUI.Label(new Rect(10,offset,400,20+offset), s);
}

void OnDestroy () {

    if (openstate == 1) { //關閉手套調用端口
wgClose ();
Debug.Log ("Glove is closed!");
}
else
Debug.Log ("Glove is NOT closed!");
}

//獲取數據手套當前的手勢,例如:0x1f-石頭 0x17-剪子, 0x00-布, 0x1c-OK
int CheckGloveStatus()
{
int gesture = 0; //0x1f;  // b1 1111
//大拇指第0位,。。。小指第4位
if (ret_angle [0] > 150 / 2)
gesture += 0x01;  // 
if (ret_angle [1] > 270 / 2)
gesture += 0x02;  // 
if (ret_angle [2] > 270 / 2)
gesture += 0x04;  // 
if (ret_angle [3] > 270 / 2)
gesture += 0x08;  // 
if (ret_angle [4] > 270 / 2)
gesture += 0x10;  // 
return gesture;
}
}

廣告聯系:010-82755684 | 010-82755685 手機版:m.pjtime.com官方微博:weibo.com/pjtime官方微信:pjtime
Copyright (C) 2007 by PjTime.com,投影時代網 版權所有 關于投影時代 | 聯系我們 | 歡迎來稿 | 網站地圖
返回首頁 網友評論 返回頂部 建議反饋
快速評論
驗證碼: 看不清?點一下
發表評論
主站蜘蛛池模板: 国产性生交XXXXX免费五月天色 | 国产亚洲成av人片在线观看桃 | 亚洲一级片av | 国产精品午夜在在线观看 | 中文字幕国产在线观看 | av制服丝袜无码一区二区 | 久久免费视频一区二区 | 狠狠躁夜夜躁人人爽超碰女h | 黄色免费网站在线观看 | 91欧美一区二区三区综合在线 | 午夜视频欧美 | 久久精品xxx| 欧美18—19sex性护士中国 | 亚洲一级特黄大片在线播放 | 丰满熟妇乱又伦精品 | 无码专区中文无码野外 | 中文国产日韩欧美二视频 | 99国内精品久久久久久久夜夜嗨 | 国产激情免费视频在线观看 | 中文字幕一区二区在线观看视频 | 91老司机深夜福利精品视频在线观看 | 成年人免费看 | 亚洲第一视频 | 黄色一级片久久 | 国内精品综合久久久40p | 丰满人妻一区二区三区无码av | 日本成人影院 | 韩日精品一区 | 97超爽成人免费视频在线播放 | 日韩精品一区二区在线天天狠天 | 国产亚洲中文字幕 | 亚洲精品久久久久久宅男 | 中文字幕在线免费播放 | 国产精品久久三区 | 婷婷五月开心色婷在线尤物 | 国产日韩一区二区三免费高清 | 精品中文字幕在线 | 综合国产在线 | 看全黄大色黄大片美女爽一次 | 国产精品18久久久久久vr | 天堂网在线.www天堂在线资源 |