2015-11-22 330 views
0

我有一个1000x1000像素的屏幕尺寸,我试图获得opengl坐标。我明白了OpenGL的坐标系如下:将Glut鼠标坐标转换为opengl

(-1,1)  |  (1,1) 
      | 
--------(0,0)------- 
      | 
      | 
(-1,-1) | (1,-1) 

void mouse(int btn, int state, int x, int y){ 
    float mx = x ; 
    float my = y ; 
    ox = (mx/1000 -0.5); 
    oy = -(my/1000 -0.5); 
    switch(btn){ 
     case GLUT_LEFT_BUTTON: 
      if(state==GLUT_DOWN){ 
       printf("%f\n",mx); 
       printf("%f\n",my); 
       //p1->setPoint(x, y, 1.0); 
      } 
      break; 
    } 

}; 

我的窗口分辨率1000×1000作为。目前的行为跟踪鼠标,但不完全。它靠近鼠标,在接近0,0时更精确。我认为我必须将-0.5更改为-1,但最终会翻转所有内容。

+0

加入1-完全抵消和倒过来我 –

+0

除以500而不是1000 –

+0

谢谢我刚把它和2相乘。 –

回答

3
void mouse(int btn, int state, int x, int y){ 
    float mx = x ; 
    float my = y ; 
    ox = (mx/500-1.0); 
    oy = -(my/500 -1.0); 
    switch(btn){ 
     case GLUT_LEFT_BUTTON: 
      if(state==GLUT_DOWN){ 
       printf("%f\n",mx); 
       printf("%f\n",my); 
      } 
      break; 
    } 

}; 

牛=(glutx /(屏幕x的一半) - 1

OY = - ((gluty /(半屏幕Y的) - 1)

+1

这段代码将给出值注ween -0.5和1.5。你需要减去1.0,而不是0.5。 –

+0

感谢您在说明中更改了它,但忘记更改代码 –

相关问题