在MFC中用OpenGL绘图。我想用鼠标拖动来转变视角, 就是相机模型中,物体不动,只移动相机的位置。具体点就是改变函数
void gluLookAt(  GLdouble eyex, GLdouble eyey, GLdouble eyez, 
                 GLdouble centerx,GLdouble centery, GLdouble centerz, 
                 GLdouble upx, GLdouble upy, GLdouble upz
               );
中视点坐标(eyex,eyey,eyez)的位置。但怎么才能把鼠标捕捉到得坐标转化为视点坐标呢??

解决方案 »

  1.   

    GLdouble centerx,GLdouble centery, GLdouble centerz,
    中心点坐标肯定是可以确定的这个不用多说了吧。
    1.首先,把GLdouble centerx,GLdouble centery, GLdouble centerz与GLdouble eyex, GLdouble eyey, GLdouble eyez之间的连线作为一个向量,设定向量长度一定,比如说1000.0f。这样你的鼠标转动就有了一个长度为1000.0f的向量作为基础了。
    鼠标的移动实际上就变成了移动这个向量的一端GLdouble eyex, GLdouble eyey, GLdouble eyez。
    2.使用SetCapture函数锁定鼠标到你的OpenGL窗口(防止移动出窗口后,无法控制视图)。
    3.取得鼠标的当前位置用GetCurorPos,取得鼠标位置point以后根据point.x来确定水平面旋转多少A,根据point.y确定仰角上转动多少Y。
    4.通过A、Y你就可以确定GLdouble eyex, GLdouble eyey, GLdouble eyez的位置了。
    调用gluLookAt就可以看往那个方向。
    其实就是一个球坐标转换的问题,不过LookAt要的是点坐标,那就设定一个等距的长度来作为基准,例如上面说的1000.0f

      

  2.   

    用OpenGL太繁琐了 用OSG简单些