私のPCから実行されるC++プログラムを持っています。それは私の電話のAndroidアプリケーションに接続し、同時に私のPCのOpenGLで画像を開きます。現在、openGL の画像は、キーボード ボタンを使用して変換およびズームインされています。X 座標と Y 座標は、Android デバイスから端末にストリーミングされます。
これらの生の 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