2012-04-19 4 views
-1

У меня есть программа C++, которая запускается с моего компьютера, она подключается к моему Android-приложению на моем телефоне и одновременно открывает изображение в OpenGL на моем компьютере. В настоящий момент изображение в openGL транслируется и масштабируется с помощью клавиш клавиатуры. Координаты X и y передаются с моего устройства Android на терминал.Использование координат x и y с glTranslate

Есть ли способ взять эти необработанные значения x и y и использовать их для перевода моего изображения в OpenGL? Таким образом, пользователь управляет изображениями на ПК с устройства Android. Я предполагаю, что значения нужно будет масштабировать и нормализовать каким-то образом?

Я могу предоставить свой код или его части, если это станет понятным.

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 
+0

Просьба показать нам код –

+0

В соответствии с запросом код был добавлен. –

+0

a.channel [0] = x a.channel [1] = y a.channel [2] = Zoom –

ответ

1

Решено. Ive добавил этот код.

// 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; 

xVal и Yval разделены на масштаб, чтобы использовать экран.

+0

, если вы его решили, тогда вы должны принять этот ответ, даже если он ваш. – slayton

Смежные вопросы