最近在做OpenGL的一个作业,碰到了些问题,想求教下高手给点帮助,作业中一部分的要求具体如下:按住鼠标左键,在OpenGL创建的窗体里向上移动,窗体里的场景会放大(Zoom in),也就是更靠近场景中的物体,当左键抬起时停止;相反,如果按住鼠标左键,向下移动,则窗体里场景会缩小(Zoom out),也就是远离所观察到物体,然后当左键抬起时停止。 另外要求是用C来实现上述的功能的,希望最好能给点相应的代码片段,解释下实现该功能的过程,先多谢大家了

解决方案 »

  1.   

    在main函数中调用 glutMouseFunc(mouse);
    void
    mouse( int button, int state, int x, int y)中对点进行处理!当然,要保存点下去的点!
      

  2.   

    求出scale,然后在display的时候调用,当然,对应的:void
    display(void)与glutDisplayFunc( display );
      

  3.   

    嗯,当然,glutMouseFunc是肯定要用到的,不过还得再用glutMotionFunc以便在鼠标键在按下的时候调用回调函数,嗯,呵呵,这个zoom的功能我自己也已经弄出来了啊,实际上还是利用gluLookAt的函数,改变camera的x,y,z的参数,就可以实现zoom的功能了
      

  4.   

    void mouse(int button,int state,int x,int y)
    { switch(button)
    {
    case GLUT_LEFT_BUTTON:
    if (state==GLUT_DOWN)
          glutIdleFunc(idle1);
    break;
    case GLUT_LEFT_BUTTON:
       if (state==GLUT_UP)
          glutIdleFunc(idle2);
       break;
    default :break;

    }void idle1(void)
    { spin=spin+0.25;
    glutPostRedisplay();}同理写idle2 spin-=0.25;在绘图函数里加入glTranslatef(0.0,0.0,spin);
    不会给我留言 我给你说
      

  5.   

    你这是基于什么OS的作业?
    GLUT的东西我没用过,如果是win32的话,建议先捕捉MOUSE的消息,创建全局量,然后应用glScalef()即可完成简单的。
      

  6.   

    glut是个OpenGL的实例工具库,用的也很广泛了,提供一些OpenGL没有直接提供的功能,和简单的界面
    LZ去看看glut的文档,大概会用的函数就是那个影响mouse的函数吧