Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用带有glTranslate的x和y坐标 我有一个C++程序,它是从我的PC上运行的,它连接到我手机上的Android应用程序,同时在我的PC上OpenGL中打开一个图像。X和y坐标从我的android设备传输到终端_C++_Opengl_Glut - Fatal编程技术网

使用带有glTranslate的x和y坐标 我有一个C++程序,它是从我的PC上运行的,它连接到我手机上的Android应用程序,同时在我的PC上OpenGL中打开一个图像。X和y坐标从我的android设备传输到终端

使用带有glTranslate的x和y坐标 我有一个C++程序,它是从我的PC上运行的,它连接到我手机上的Android应用程序,同时在我的PC上OpenGL中打开一个图像。X和y坐标从我的android设备传输到终端,c++,opengl,glut,C++,Opengl,Glut,有没有办法获取这些原始x和y值,并使用它们在OpenGL中转换我的图像?因此,用户可以通过Android设备控制PC上的图像。我猜这些值需要以某种方式进行缩放和标准化 如果代码更清晰,我可以提供代码或部分代码 using namespace std; #define USE_TOMS_OGL class device_info { public: char *name; vrpn_Analog_Remote *ana; }; const

有没有办法获取这些原始x和y值,并使用它们在OpenGL中转换我的图像?因此,用户可以通过Android设备控制PC上的图像。我猜这些值需要以某种方式进行缩放和标准化

如果代码更清晰,我可以提供代码或部分代码

using namespace std;
#define USE_TOMS_OGL


class device_info {
    public:
    char            *name;

    vrpn_Analog_Remote  *ana;


};
const unsigned MAX_DEVICES = 2;

float translateX = 0.0;
float translateY = 0.0;
float translateZ = 1.0;
float imgScale = 0.8;
float panX = 0.125; 
float panY = 0.125; 
float zoomFactor = 0.01; 



using namespace std;

struct Image {                   // stores image data
   unsigned long sizeX;
   unsigned long sizeY;
   char *data;
};

void display(void)
{


    // Translation and Scaling
    glTranslatef(translateX, translateY, translateZ);
    glScalef(imgScale, imgScale, 0.0);

    glEnable(GL_TEXTURE_2D);
    glBindTexture(GL_TEXTURE_2D, texture);


void keyboard(unsigned char key, int x, int y)
{
   switch (key) {
      case 27:
         exit(0);
         break;
      case 'x':
        imgScale += zoomFactor;
        glutPostRedisplay();
         break;
      case 'z':
            imgScale -= zoomFactor;
            glutPostRedisplay();
         break;
      case 'w':
         translateY += panY;
         glutPostRedisplay();
         break;
      case 's':
         translateY -= panY;
         glutPostRedisplay();
         break;
      case 'a':
         translateX -= panX;
         glutPostRedisplay();
         break;
      case 'd':
         translateX += panX;
         glutPostRedisplay();
         break;
      default:
         break;
   }
}

void IdleFunc(void) {
    if (accepted != 1)
    {

      unsigned i;

      // Let all the devices do their things
      for (i = 0; i < num_devices; i++) {

      device_list[i].ana->mainloop();
      //cerr << i;
      }

    //  printf("Idle function test ");

    } 
    glutPostRedisplay();
}


//Callback handlers

void    VRPN_CALLBACK handle_analog (void *userdata, const vrpn_ANALOGCB a)
{
    int i;
    const char *name = (const char *)userdata;


    printf("Input from %s:\n  \n        %5.0f", name, a.channel[0]);
    for (i = 1; i < a.num_channel; i++) {
    printf(" %5.0f \n", a.channel[1]);
    }

    printf(" \n");
}













 // main interactive loop

  printf("Press ^C to exit.\n");
  while ( ! done ) {
#ifdef USE_TOMS_OGL
      glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
    glutInitWindowSize(400,300);
    glutInitWindowPosition(200,100);
    glutCreateWindow("ImageViewer");


    init();
    glutDisplayFunc(display);

    glutKeyboardFunc(keyboard);
    glutIdleFunc(IdleFunc);
    glutMainLoop();
#else
      unsigned i;

      // Let all the devices do their things
      for (i = 0; i < num_devices; i++) {

      device_list[i].ana->mainloop();
      //cerr << i;
      }
      //cerr << endl;
#endif

  }
 return 0;
}  


// a.channel[0] =  x
// a.channel[1] =  y
// a.channel[2] =  Zoom
使用名称空间std;
#定义使用TOMS\u OGL
类设备信息{
公众:
字符*名称;
vrpn_模拟_远程*ana;
};
const unsigned MAX_DEVICES=2;
float translateX=0.0;
浮动平移Y=0.0;
浮动平移Z=1.0;
浮动imgScale=0.8;
浮动盘x=0.125;
浮点数=0.125;
浮动缩放因子=0.01;
使用名称空间std;
结构映像{//存储映像数据
无符号长sizeX;
未签名的长码;
字符*数据;
};
作废显示(作废)
{
//平移和缩放
glTranslatef(translateX、translateY、translateZ);
glScalef(imgScale,imgScale,0.0);
glEnable(GL_纹理_2D);
glBindTexture(GL_TEXTURE_2D,纹理);
无效键盘(无符号字符键,整数x,整数y)
{
开关(钥匙){
案例27:
出口(0);
打破
案例“x”:
imgScale+=动物因子;
再发现();
打破
案例“z”:
imgScale-=动物因子;
再发现();
打破
案例“w”:
translateY+=公司;
再发现();
打破
案例s:
translateY-=公司;
再发现();
打破
案例“a”:
translateX-=panX;
再发现();
打破
案例“d”:
translateX+=panX;
再发现();
打破
违约:
打破
}
}
void IdleFunc(void){
如果(已接受!=1)
{
未签名的i;
//让所有的设备做他们的事情
对于(i=0;imainloop();
//cerr mainloop();

//cerr解决了这个问题。我添加了这个代码

// Translate image on screen using data from device    

    yVal = a.channel[1];
    yVal = yVal/10000;
    translateY -= yVal;

    xVal = a.channel[0];

if (xVal >0 & xVal<250){

  xVal = xVal - 300;

}        

    xVal = xVal/15000;
    translateX += xVal;
//使用来自设备的数据翻译屏幕上的图像
yVal=a.通道[1];
yVal=yVal/10000;
translateY-=yVal;
xVal=a.channel[0];

如果(xVal>0&xValAs请求,则代码已添加。a.channel[0]=x a.channel[1]=y a.channel[2]=Zoom@TomLumbardܤ你能把代码浓缩到相关部分吗?是的,我已经删除了我所要求的不必要的代码。我说的“a.channel[*]“需要以某种方式全球化,以便我可以以某种方式将其添加到我的panX或panY?如果你解决了它,那么你应该接受这个答案,即使它是你自己的。