【问题标题】:GLUT mouse Tracking and DrawingGLUT 鼠标跟踪和绘图
【发布时间】:2016-06-28 05:43:13
【问题描述】:

我正在制作一个简单的 GLUT 程序,它可以跟踪鼠标并将点放在路径上。

这是我的代码:

void init()
{
    glClearColor( 0.0, 0.0, 1.0, 1.0);
    glMatrixMode( GL_PROJECTION);
    gluOrtho2D( 0.0, 400.0, 0.0, 400.0);
    for(int i=0;i<5000;i++)
    {
        arr[i][0]=0;
        arr[i][1]=0;
    }
    glPointSize(10.0);
}

void drawPoints()
{
    glBegin( GL_POINTS );
    glColor3f( 0.0,0.0,0.0 );
    for ( int i = 0; i < z; i++ )
    {
        glVertex2f( arr[i][0], arr[i][1]);
    }
    glEnd();
}

void myDisplay()
{
    glClear( GL_COLOR_BUFFER_BIT);
    drawPoints();
    glutSwapBuffers();
    glutPostRedisplay();
}


void myMouseMove( int x, int y)
{
        arr[z][0]=x;
        arr[z++][1]=y;
}



int main( int argc, char ** argv)
{
    glutInit( &argc, argv);
    glutInitDisplayMode( GLUT_DOUBLE| GLUT_RGB);
    glutInitWindowPosition( 100, 100);
    glutInitWindowSize(600,600);
    glutCreateWindow( "Testing");
    init();
    glutDisplayFunc( myDisplay);
    glutPassiveMotionFunc( myMouseMove);
    glutMainLoop();
    return 0;
}

但是我有几个问题:

  1. Y 坐标方向相反。
  2. 在光标位置之前绘制点(沿一个方向移动时)。
  3. 有没有更好的方法来做到这一点?

【问题讨论】:

    标签: opengl mouseevent glut


    【解决方案1】:

    被翻转的 Y 坐标实际上是预期的行为。只需在您的代码中纠正它,您就可以了。

    如果您想确保渲染的图像和鼠标光标完全同步,只需让 glut 隐藏鼠标光标,然后使用 OpenGL 自己渲染即可。

    【讨论】:

      【解决方案2】:

      您应该知道,在 OpenGL 中使用传统投影矩阵时:(0,0) 是左下角。大多数窗口系统会将 (0,0) 映射到左上角。

      在某些情况下,您只需将调用中的底部/顶部字段交换为 glOrtho (...)gluOrtho2D (...) 即可使它们匹配 - 这会产生其他后果,例如反转多边形绕组,因此它并不总是最好的方法.


      至于“在光标前绘制点”,我认为您可能是在描述输入延迟(尤其是在使用 VSYNC 时)。

      当您使用软件光标与硬件光标时,鼠标的位置可能会偏离一帧或多帧。关于缓冲区交换间隔(OpenGL 的 VSYNC 机制)对输入延迟的影响,有一些技术性讨论 here参见:Idiosyncrasies)。

      【讨论】:

        【解决方案3】:

        要修复反转,请执行 600 - y 设置 arr 元素。此外,您的 gluOrtho2D 的比例为 400 x 400,而您的窗口为 600 x 600,因此将 gluOrtho2D 比例更改为与窗口大小相同即可。

        【讨论】:

          猜你喜欢
          • 2018-12-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-12-09
          • 1970-01-01
          相关资源
          最近更新 更多