亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
一区二区三区蜜桃| 国产一区二区精品在线观看| 国产精品福利一区二区| 精品第一国产综合精品aⅴ| 91精品国产麻豆国产自产在线 | 免费成人深夜小野草| 一区二区在线观看视频| 国产精品久久久久久久久久久免费看 | 丝袜美腿一区二区三区| 亚洲美女视频在线| 亚洲欧美另类综合偷拍| 亚洲裸体xxx| 一区二区三区在线看| 亚洲精品成a人| 亚洲在线一区二区三区| 亚洲综合一二区| 亚洲一区二区三区四区不卡| 亚洲午夜在线视频| 图片区小说区国产精品视频| 免费成人av资源网| 国产伦精一区二区三区| 成人精品鲁一区一区二区| www..com久久爱| 91国内精品野花午夜精品| 欧美日韩中字一区| 日韩小视频在线观看专区| 国产亚洲1区2区3区| 国产精品伦理在线| 一区二区三区高清在线| 蜜桃av一区二区| 国产乱码精品一品二品| 91视频在线观看| 91精品福利在线一区二区三区| 久久综合九色综合欧美就去吻| 国产精品视频免费看| 亚洲与欧洲av电影| 久久精品国产网站| 97久久久精品综合88久久| 91精品国产综合久久精品麻豆| 26uuu亚洲综合色| 最近中文字幕一区二区三区| 日韩精彩视频在线观看| 国产伦精一区二区三区| 欧美性受xxxx| 国产亚洲欧美色| 一区二区三区色| 韩国在线一区二区| 91福利视频久久久久| 欧美大片一区二区| 日韩理论电影院| 久久精品国产一区二区| 91蜜桃免费观看视频| 日韩午夜激情电影| 亚洲乱码国产乱码精品精98午夜| 蜜臀av一级做a爰片久久| av日韩在线网站| 日韩精品一区在线观看| 综合久久久久综合| 久久草av在线| 欧美性一二三区| 日本一区二区在线不卡| 亚洲成a人片在线观看中文| 国产成人亚洲综合a∨婷婷| 欧美性猛交xxxx乱大交退制版| 久久精品亚洲乱码伦伦中文 | 成人免费视频一区| 日韩一区二区三区视频在线 | 成人综合在线观看| 日韩一区二区电影| 亚洲精品一二三区| 国产69精品久久久久毛片| 56国语精品自产拍在线观看| 综合电影一区二区三区 | 欧美色男人天堂| 国产精品免费视频一区| 久久国产精品一区二区| 91福利视频久久久久| 国产精品女同互慰在线看| 激情图片小说一区| 欧美猛男男办公室激情| 一区二区在线电影| 成人av小说网| 久久久久久久综合色一本| 日韩黄色小视频| 欧洲色大大久久| 国产精品毛片无遮挡高清| 国产麻豆一精品一av一免费| 欧美一级久久久| 日日夜夜精品视频免费| 91极品美女在线| 怡红院av一区二区三区| 97精品电影院| 国产精品激情偷乱一区二区∴| 国产精品性做久久久久久| 久久久久久一二三区| 国内外精品视频| 久久免费午夜影院| 激情av综合网| 久久亚洲私人国产精品va媚药| 美女在线视频一区| 日韩欧美专区在线| 日韩高清在线一区| 欧美一区二区三区四区五区| 丝瓜av网站精品一区二区| 欧美日韩一卡二卡| 无吗不卡中文字幕| 欧美一级搡bbbb搡bbbb| 麻豆91在线看| 精品少妇一区二区三区| 精品一区二区三区在线观看国产| 日韩欧美成人午夜| 国产一区二区三区不卡在线观看| ww亚洲ww在线观看国产| 国产一区二区在线看| 久久久99精品免费观看不卡| 国产v综合v亚洲欧| 国产精品天干天干在线综合| 成人动漫一区二区三区| 亚洲日本一区二区| 色婷婷国产精品久久包臀| 一区二区三区美女| 5858s免费视频成人| 免费成人性网站| 国产日韩欧美一区二区三区乱码| 成人综合婷婷国产精品久久| 亚洲精品国产高清久久伦理二区| 欧美午夜精品免费| 奇米精品一区二区三区四区| 久久久蜜臀国产一区二区| 岛国一区二区在线观看| 一区二区三区成人| 日韩亚洲欧美一区二区三区| 国产成人在线色| 亚洲一区二区在线观看视频 | 国产精品国产三级国产专播品爱网 | 国产成人av电影在线观看| 欧美国产成人精品| 91国内精品野花午夜精品| 日韩av不卡在线观看| 国产日韩欧美综合一区| 色偷偷久久一区二区三区| 丝袜国产日韩另类美女| 久久精品一区八戒影视| 欧美性猛交xxxx乱大交退制版| 久久69国产一区二区蜜臀| 中文字幕欧美日韩一区| 欧美性一级生活| 国产一区二区三区av电影| 亚洲免费在线播放| 日韩美一区二区三区| av一区二区三区四区| 婷婷国产v国产偷v亚洲高清| 国产午夜精品久久久久久久 | 国产精品蜜臀在线观看| 欧美日韩高清一区二区| 国产精品系列在线观看| 亚洲地区一二三色| 久久久久久97三级| 欧美高清视频一二三区 | 欧美精品一区二区三区蜜桃| 91麻豆成人久久精品二区三区| 美女网站色91| 亚洲同性gay激情无套| 欧美大尺度电影在线| 色综合欧美在线视频区| 麻豆91在线播放免费| 一区二区三区视频在线看| 久久精品欧美一区二区三区不卡 | 欧美喷潮久久久xxxxx| 国产iv一区二区三区| 亚洲电影视频在线| 国产日韩欧美亚洲| 777奇米成人网| 在线精品亚洲一区二区不卡| 国产成人精品一区二区三区四区 | 视频一区国产视频| 最新日韩av在线| 久久免费午夜影院| 日韩一区二区免费电影| 欧美系列亚洲系列| 99久久伊人久久99| 国产一区美女在线| 美女视频免费一区| 亚洲国产另类av| 亚洲色图清纯唯美| 国产亚洲一区二区在线观看| 日韩一区二区电影在线| 欧美三级欧美一级| 一本一本大道香蕉久在线精品 | 韩国av一区二区三区| 日韩电影在线一区| 亚洲一区二区偷拍精品| 综合久久久久久| 国产精品国产三级国产有无不卡| 欧美精品一区二区三区一线天视频| 51精品国自产在线| 欧美色图片你懂的| 欧美在线免费观看亚洲| 91福利在线免费观看| 色综合久久88色综合天天|