亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? inputdevice.cpp

?? FreeWRLduneInputDevice和FreeWRL一起可以讓用戶用帶有6DoF的輸入設備檢索3D VRML/X3D數據。它基于FreeWRL的"/tmp/inpdev"擴展傳感器輸入接口和w
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
/* * InputDevice.cpp  * Copyright (c) 1996-1999 Vojtech Pavlik, 2001-2002 J. "MUFTI" Scheurich  *//* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */#include "InputDevice.h"#include <string.h>#include <math.h>#ifdef WIN32double copysign (double x, double y)   {   if (y>=0)      return fabs(x);   else      return -fabs(x);   }#endiffloat InputDevice::accelerate(float value,int num_axis)   {   float result=0;   if (get_acceleration(num_axis)!=1.0)      {#  ifdef HAVE_POWF      result=copysign(powf(get_acceleration(num_axis),fabs(value))-1,value);#  else      result=copysign(pow((double)get_acceleration(num_axis),fabs(value))-1,                      value);#  endif      }   result+=value*get_factor(num_axis);//printf("result %f num_axis %d\n",result*get_sign(num_axis),num_axis);   return result*get_sign(num_axis);   }static int max_position(float f1,float f2,float f3)   {   if (fabs(f1) >= fabs(f2))       if (fabs(f1) >= fabs(f3))         return 0;   if (fabs(f2) >= fabs(f3))       if (fabs(f2) >= fabs(f1))         return 1;   if (fabs(f3) >= fabs(f2))      if (fabs(f3) >= fabs(f1))         return 2;   }static int min_position(float f1,float f2,float f3)   {   if (fabs(f1) <= fabs(f2) )      if (fabs(f1) <= fabs(f3))         return 0;   if (fabs(f2) <= fabs(f3))       if (fabs(f2) <= fabs(f1))         return 1;   if (fabs(f3) <= fabs(f2))       if (fabs(f3) <= fabs(f1))         return 2;   }// test if value belongs to the greater values in 1, 2 (or 3) dimensionsbool InputDevice::max_value(int index,TransformMode* tm)   {   if (tm->tdimension==TM_3D)      return(true);   if (tm->tdimension==TM_2D)      if (index<3)         {         if (index!=min_position(value[0],value[1],value[2]))            return true;         }      else         if (index!=(3+min_position(value[3],value[4],value[5])))            return true;   if (tm->tdimension==TM_1D)      if (index<3)         {         if (index==max_position(value[0],value[1],value[2]))            return true;         }      else         if (index==(3+max_position(value[3],value[4],value[5])))            return true;   return false;   }   void InputDevice::set_firstflag(void)   {   for (int i=0;i<7;i++)      if (!get_zero_on_release(i))         firstflag[i]=true;   }// return value, if device deliver zero if you release it,// otherwise return difference to last valuefloat InputDevice::get_value(int index,bool check_only,int num_axis)   {   // value > zerosize ?   float zerosize=get_zero_size_fraction(num_axis)*maxvalue(num_axis);   if (fabs(value[index]) < zerosize)      return 0;   float val;   // subtract nullsize from value   if (value[index]>0)      val=value[index]-zerosize;   else      val=value[index]+zerosize;   if (get_zero_on_release(num_axis))      return(accelerate(val,num_axis));   else      {      float ret;      if (firstflag[index])         {         ret=0.0;         if (check_only)            {            if (val!=0)               {               firstflag[index]=false;               oldvalue[index]=val;               }            return(0);            }         firstflag[index]=false;         }      else         ret=accelerate(val,num_axis)-             accelerate(oldvalue[index],num_axis);      if (!check_only)         oldvalue[index]=val;      return ret;      }       }#define INPUT_DEVICE_GET(functionname,index,num_axis) \float functionname (TransformMode* tm,bool check_only) \   { \   if (tm==NULL) \      return get_value(index,check_only,num_axis); \   if (max_value(index,tm)) \      return get_value(index,check_only,num_axis); \   else \      return 0; \   }//printf("no zero on release numaxis %d ret %f\n",num_axis,ret); INPUT_DEVICE_GET(InputDevice::get_x,0,num_axis_x)INPUT_DEVICE_GET(InputDevice::get_y,1,num_axis_y)INPUT_DEVICE_GET(InputDevice::get_z,2,num_axis_z)INPUT_DEVICE_GET(InputDevice::get_xrot,3,num_axis_xrot)INPUT_DEVICE_GET(InputDevice::get_yrot,4,num_axis_yrot)INPUT_DEVICE_GET(InputDevice::get_zrot,5,num_axis_zrot)INPUT_DEVICE_GET(InputDevice::get_angle,6,num_axis_angle)Vec3f& InputDevice::get_vector(TransformMode* tm)   {   static Vec3f v;   v.x=get_x(tm);   v.y=get_y(tm);   v.z=get_z(tm);   if (get_number_axes()==4)      v[2]=-v[2];   TMode mode=tm->tmode;   if (mode==TM_TRANSLATE)       {      if (get_number_axes()==2)         if (tm->t2axes==TM_NEAR_FAR)             {            float temp=v[2];            v[2]=-v[1];            v[1]=temp;            }       }    else if (mode==TM_ROCKET)       {      v[0]=0;      v[1]=0;      }    else if (mode==TM_HOVER)       {      if (get_number_axes()==3)          {         v[0]=0;         }       else if (get_number_axes()==2)          if (tm->t2axes==TM_NEAR_FAR)             {            v[2]=-v[1];            v[0]=0;            v[1]=0;            }       else if (tm->t2axes==TM_UP_DOWN)             {            v[1]=v[1];            v[0]=0;            v[2]=0;            }                   }    else if (mode==TM_SCALE)      {      v[0]=-v[0];      v[2]=-v[2];      if (get_number_axes()==2)          if (tm->t2axes==TM_NEAR_FAR)             {            float temp=v[2];            v[2]=-v[1];            v[1]=temp;            }                   }    else if (mode==TM_CENTER)      {      if (get_number_axes()==2)          if (tm->t2axes==TM_NEAR_FAR)             {            float temp=v[2];            v[2]=-v[1];            v[1]=temp;            }                   }    return v;   }EulerAngles& InputDevice::get_eulerAngles(TransformMode* tm, bool check_only)   {   bool rotationOnly=false;   bool rocketOnly=false;   bool hoverOnly=false;   static EulerAngles euler;      // check for constraints on 2 axes or 3 axes or 4 axes devices   if (get_number_axes()<=4)      if (tm!=NULL)         if (tm->tmode==TM_ROTATE)            rotationOnly=true;         else if (tm->tmode==TM_ROCKET)            rocketOnly=true;   if (tm!=NULL)      if (tm->tmode==TM_HOVER)         hoverOnly=true;   if (rotationOnly)      {       if (get_number_axes()==4)         {         euler.x=/*RAD2DEG*/(-get_y(tm, check_only));         euler.y=/*RAD2DEG*/( get_xrot(tm, check_only));         euler.z=/*RAD2DEG*/(-get_x(tm, check_only));         }      else if (get_number_axes()==3)         {         euler.x=/*RAD2DEG*/(-get_y(tm, check_only));         euler.y=/*RAD2DEG*/( get_z(tm, check_only));         euler.z=/*RAD2DEG*/(-get_x(tm, check_only));         }      else if (get_number_axes()==2)         {         if (tm->t2axes==TM_NEAR_FAR)            {            euler.x=/*RAD2DEG*/(-get_y(tm, check_only));            euler.y=/*RAD2DEG*/(get_x(tm, check_only));            euler.z=0;            }         else             {            euler.x=/*RAD2DEG*/(-get_y(tm, check_only));            euler.y=0;            euler.z=/*RAD2DEG*/(-get_x(tm, check_only));            }         }      }   else if (rocketOnly)      {      if (get_number_axes()==4)         {         euler.x=/*RAD2DEG*/(-get_y(tm, check_only));         euler.y=/*RAD2DEG*/(-get_xrot(tm, check_only));         euler.z=/*RAD2DEG*/(-get_x(tm, check_only));         }      else if (get_number_axes()==3)         {         if (tm->t2axes==TM_NEAR_FAR)            {             euler.x=/*RAD2DEG*/(-get_y(tm, check_only));            euler.y=/*RAD2DEG*/(-get_x(tm, check_only));            euler.z=0;            }         else            {             euler.x=/*RAD2DEG*/(-get_y(tm, check_only));            euler.y=0;            euler.z=/*RAD2DEG*/(-get_x(tm, check_only));            }         }      }   else if (hoverOnly)      {      if (get_number_axes()==4)         {         euler.x=0;         euler.y=/*RAD2DEG*/(-get_xrot(tm, check_only));         euler.z=0;         }      else if (get_number_axes()==3)         {         euler.x=0;         euler.y=/*RAD2DEG*/(-get_x(tm, check_only));         euler.z=0;         }      else if (get_number_axes()==2)         {         euler.x=0;         euler.y=/*RAD2DEG*/(-get_x(tm, check_only));         euler.z=0;         }      else         {         euler.x=0;         euler.y=/*RAD2DEG*/( get_yrot(tm, check_only));         euler.z=0;         }      }   else      {      euler.x=/*RAD2DEG*/( get_xrot(tm, check_only));      euler.y=/*RAD2DEG*/( get_yrot(tm, check_only));      euler.z=/*RAD2DEG*/(-get_zrot(tm, check_only));      }      euler.w=EulOrdXYZs;   return euler;   }Quaternion& InputDevice::get_quaternion(TransformMode* tm, bool check_only)   {   static Quaternion inputrot;   EulerAngles euler=get_eulerAngles(tm,check_only);      inputrot=Eul_ToQuat(euler);   inputrot.normalize();   return inputrot;   }Quaternion& InputDevice::get_localQuaternion(TransformMode* tm, bool check_only)   {   static Quaternion inputrot;   EulerAngles euler=get_eulerAngles(tm,check_only);   euler.x=-euler.x;      euler.z=-euler.z;      inputrot=Eul_ToQuat(euler);   inputrot.normalize();   return inputrot;   }bool InputDevice::allzero(void)   {   if ((get_x(NULL,true)==0) && (get_y(NULL,true)==0) && (get_z(NULL,true)==0)       && (get_xrot(NULL,true)==0)        && (get_yrot(NULL,true)==0)        && (get_zrot(NULL,true)==0)      )      return true;   else      return false;   }// signswap of value from axisint InputDevice::get_sign(int axis_number)   {   if ((sign_swap==NULL) || (axis_number>=number_axes))      return 1;   else      if (sign_swap[axis_number])         return -1;      else         return 1;   }void InputDevice::set_sign_swap(int axis_number,bool value)   {   if (axis_number<number_axes)      {      if (sign_swap==NULL)         {         sign_swap=new bool[number_axes];         for (int i=0;i<number_axes;i++)            sign_swap[i]=false;         }      sign_swap[axis_number]=value;      }   else      fprintf(stderr,"axis number %d do not exist \n",axis_number);   }// factor: multiplied to the axis value returned from device// deliver 1.0 if factor is not setfloat InputDevice::get_factor(int axis_number)   {   if ((factor==NULL) || (axis_number>=number_axes))      return 1.0;   else      return factor[axis_number];   }void InputDevice::set_factor(int axis_number,float value)   {   if (axis_number<number_axes)      {      if (factor==NULL)         {         factor=new float[number_axes];         for (int i=0;i<number_axes;i++)            factor[i]=1.0;         }      factor[axis_number]=value;      }   else      fprintf(stderr,"axis number %d do not exist \n",axis_number);   }void InputDevice::set_factor(char* string,float value)   {   for (int i=0;i<sizeof(axesinfo)/sizeof(char*);i++)      if (stringncmp(string,axesinfo[i])==0)         {         set_factor(getAxisFromInformation(string),value);         break;         }   if (stringncmp(string,"all")==0)      {      if (stringncmp(string,"allrot")!=0)         {         set_factor(num_axis_x,value);         set_factor(num_axis_y,value);         set_factor(num_axis_z,value);         }      if (stringncmp(string,"allxyz")!=0)         {         set_factor(num_axis_xrot,value);         set_factor(num_axis_yrot,value);         set_factor(num_axis_zrot,value);             }      }   }// acceleration: additional acceleration for devices without acceleration// deliver 1.0 (no acceleration) if acceleration is not setfloat InputDevice::get_acceleration(int axis_number)   {   if ((acceleration==NULL) || (axis_number>=number_axes))      return 1.0;   else      return acceleration[axis_number];   }void InputDevice::set_acceleration(int axis_number,float value)   {   if (axis_number<number_axes)      {      if (acceleration==NULL)         {         acceleration=new float[number_axes];         for (int i=0;i<number_axes;i++)            acceleration[i]=1.0;         }      acceleration[axis_number]=value;      }   else      fprintf(stderr,"axis number %d do not exist \n",axis_number);   }void InputDevice::set_acceleration(char* string,float value)   {   for (int i=0;i<sizeof(axesinfo)/sizeof(char*);i++)      if (stringncmp(string,axesinfo[i])==0)         {         set_acceleration(getAxisFromInformation(string),value);         break;         }   if (stringncmp(string,"all")==0)      {      if (stringncmp(string,"allrot")!=0)         {         set_acceleration(num_axis_x,value);         set_acceleration(num_axis_y,value);         set_acceleration(num_axis_z,value);         }      if (stringncmp(string,"allxyz")!=0)         {         set_acceleration(num_axis_xrot,value);         set_acceleration(num_axis_yrot,value);         set_acceleration(num_axis_zrot,value);             }      }   }// return true if axis number deliver zero when device is releasedbool InputDevice::get_zero_on_release(int axis_number)   {   if ((zero_on_release==NULL) || (axis_number>=number_axes))      return true;   else      return zero_on_release[axis_number];   }void InputDevice::set_zero_on_release(int axis_number,bool value)   {   if (axis_number<number_axes)      {      if (zero_on_release==NULL)         {         zero_on_release=new bool[number_axes];         for (int i=0;i<number_axes;i++)            zero_on_release[i]=true;         }      zero_on_release[axis_number]=value;      }   else      fprintf(stderr,"axis number %d do not exist \n",axis_number);   }void InputDevice::set_zero_on_release(char* string,bool value)   {   for (int i=0;i<sizeof(axesinfo)/sizeof(char*);i++)      if (stringncmp(string,axesinfo[i])==0)         {         set_zero_on_release(getAxisFromInformation(string),value);         break;         }   if (stringncmp(string,"all")==0)      {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品一区二区三区四区高清| 亚洲午夜免费视频| 国产中文字幕一区| 日韩午夜在线观看视频| 久久国产欧美日韩精品| 99re66热这里只有精品3直播 | 国产一区二区不卡| 久久综合九色综合97_久久久| 亚洲国产日韩av| 在线不卡一区二区| 精品一区二区三区免费观看 | 精品88久久久久88久久久| 国产一区二三区| 国产精品成人免费精品自在线观看 | 国产成人欧美日韩在线电影| 91精品国产综合久久精品图片| 亚洲人成网站影音先锋播放| 在线看不卡av| 久久疯狂做爰流白浆xx| 国产精品国产自产拍在线| 欧美在线看片a免费观看| 精品综合免费视频观看| ...中文天堂在线一区| 欧美乱熟臀69xxxxxx| 国产成人午夜高潮毛片| 久久久精品中文字幕麻豆发布| 久久激情五月激情| 国产精品久久久久毛片软件| 欧美喷潮久久久xxxxx| 亚洲人成网站精品片在线观看| 国产91露脸合集magnet| 亚洲成人久久影院| 国产精品久久久久久久第一福利| 国产99久久久久| 香蕉久久一区二区不卡无毒影院| 在线观看国产91| 国产一区二区电影| 午夜精品福利久久久| 欧美精品久久天天躁| 国产91精品一区二区麻豆亚洲| 国产亚洲精品精华液| 欧美群妇大交群中文字幕| 国产.欧美.日韩| 美脚の诱脚舐め脚责91| 一区二区三区自拍| 国产女主播一区| 99久久精品99国产精品| 亚洲私人影院在线观看| 久久色中文字幕| 欧美精品一卡两卡| 日韩av中文在线观看| 久久伊人蜜桃av一区二区| 欧美揉bbbbb揉bbbbb| 91视频观看视频| 国产成都精品91一区二区三| 免费xxxx性欧美18vr| 亚洲成人免费观看| 亚洲综合男人的天堂| 亚洲人成精品久久久久| 欧美激情一区二区三区| 欧美草草影院在线视频| 91精品国产乱| 欧美日韩国产首页在线观看| 色哟哟一区二区在线观看| 国产aⅴ综合色| 国产成人超碰人人澡人人澡| 紧缚奴在线一区二区三区| 亚洲欧美一区二区在线观看| 国产欧美日韩在线| 久久久99久久| 欧美四级电影在线观看| 一本色道久久加勒比精品| 91小视频在线观看| 色综合咪咪久久| 一本一道久久a久久精品| 91国偷自产一区二区三区成为亚洲经典 | 美脚の诱脚舐め脚责91| 日韩精品成人一区二区在线| 亚洲一区日韩精品中文字幕| 伊人一区二区三区| 亚洲综合色成人| 亚洲成av人片一区二区三区| 五月婷婷久久丁香| 免费观看久久久4p| 精品亚洲成a人| 粉嫩av一区二区三区在线播放| 日韩avvvv在线播放| 日本视频中文字幕一区二区三区| 国产精品麻豆久久久| 欧美裸体bbwbbwbbw| 日韩一级大片在线观看| 日韩一区二区三区电影在线观看| www.欧美日韩| 91黄色激情网站| 成人丝袜高跟foot| 一本到不卡免费一区二区| 国产一区二区在线观看视频| 亚洲国产一二三| 亚洲男人的天堂在线观看| 一区二区三区四区在线免费观看| www国产成人| 中文字幕一区二区三区四区| 亚洲综合激情另类小说区| 日韩精品五月天| 国产精品69毛片高清亚洲| 91老司机福利 在线| 日韩一区二区精品在线观看| 日本一区二区电影| 亚洲午夜一区二区三区| 精久久久久久久久久久| 欧美aⅴ一区二区三区视频| 国产一区二区免费视频| 日日摸夜夜添夜夜添精品视频| 亚洲午夜av在线| 久久精品二区亚洲w码| 99精品桃花视频在线观看| 欧美视频精品在线观看| 在线国产亚洲欧美| 久久亚区不卡日本| 亚洲国产乱码最新视频| 国产精品自产自拍| 欧美午夜电影在线播放| 国产日韩欧美精品综合| 久久丝袜美腿综合| 亚洲国产精品久久人人爱蜜臀| 亚洲va韩国va欧美va| 丰满少妇在线播放bd日韩电影| 国产精品一级片| 在线播放国产精品二区一二区四区| 欧美另类一区二区三区| 欧美一区二区三区色| 椎名由奈av一区二区三区| 日本在线不卡一区| 蜜臀精品一区二区三区在线观看 | 蜜臀va亚洲va欧美va天堂| 波波电影院一区二区三区| 99久久精品免费看国产免费软件| av一区二区三区四区| 日韩无一区二区| 精品电影一区二区| 亚洲一区二区在线播放相泽| 国产aⅴ精品一区二区三区色成熟| 成熟亚洲日本毛茸茸凸凹| 欧美一级爆毛片| 偷拍与自拍一区| 91久久国产综合久久| 亚洲色图制服诱惑| 成人黄色片在线观看| 欧美va亚洲va在线观看蝴蝶网| 国产婷婷色一区二区三区四区 | 精品无人码麻豆乱码1区2区 | 成人久久视频在线观看| 日韩免费电影网站| 午夜激情综合网| 韩国中文字幕2020精品| 91麻豆精品久久久久蜜臀| 久久久精品人体av艺术| 亚洲精品视频在线观看免费| 国产成人免费av在线| 精品久久久久久久久久久院品网 | 蜜臀精品久久久久久蜜臀| 国产成人一区二区精品非洲| 日韩一级二级三级| 国产精品国产三级国产普通话蜜臀 | 国产精品伊人色| eeuss鲁片一区二区三区在线观看| 在线观看不卡视频| 亚洲午夜一区二区| 欧美日本在线一区| 婷婷综合五月天| 欧美日高清视频| 日韩综合一区二区| 欧美白人最猛性xxxxx69交| 麻豆成人91精品二区三区| 成人av资源在线| **性色生活片久久毛片| 日本韩国欧美一区| 伊人开心综合网| 欧美美女一区二区在线观看| 美国欧美日韩国产在线播放| 337p日本欧洲亚洲大胆色噜噜| 一级精品视频在线观看宜春院| 国产一区二区三区免费播放| 国产日韩高清在线| 99精品热视频| 亚洲一区二区高清| 日韩欧美综合在线| 国产成人亚洲综合a∨婷婷图片| 欧美偷拍一区二区| 日韩国产精品大片| 久久免费看少妇高潮| 99精品热视频| 国产精品乱码一区二区三区软件| 免费人成在线不卡| 久久综合久久综合久久| 成人深夜福利app| 一区二区三区在线观看欧美| 99精品欧美一区二区蜜桃免费| 337p日本欧洲亚洲大胆色噜噜| 青青草精品视频|