使用带有glTranslate的x和y坐标 我有一个C++程序,它是从我的PC上运行的,它连接到我手机上的Android应用程序,同时在我的PC上OpenGL中打开一个图像。X和y坐标从我的android设备传输到终端
有没有办法获取这些原始x和y值,并使用它们在OpenGL中转换我的图像?因此,用户可以通过Android设备控制PC上的图像。我猜这些值需要以某种方式进行缩放和标准化 如果代码更清晰,我可以提供代码或部分代码使用带有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
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?如果你解决了它,那么你应该接受这个答案,即使它是你自己的。