在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)的位置。但怎么才能把鼠标捕捉到得坐标转化为视点坐标呢??
void gluLookAt( GLdouble eyex, GLdouble eyey, GLdouble eyez,
GLdouble centerx,GLdouble centery, GLdouble centerz,
GLdouble upx, GLdouble upy, GLdouble upz
);
中视点坐标(eyex,eyey,eyez)的位置。但怎么才能把鼠标捕捉到得坐标转化为视点坐标呢??
解决方案 »
- 编译vc6.0程序遇到的问题
- 高难度问题,Debug下程序没有任何问题,Release下做某一操作(点击菜单)程序崩溃。
- VC2003 CEdit如何修改字体
- 读取视频文件播放时间的问题
- 关于CWnd的一个成员函数
- 有没有有关VC++与数据库的教程呀
- 我在VC下用了SkinLoad进行界面优化,我的程序中有定时器,每40ms刷新一次,执行了200多次后,程序报了Access Violation
- 如何在com中定义多维数组的属性?get和set如何写??
- 如何传递数组参数
- 请问如何处理进程被关闭时的动作???你会吗?(如果你做过系统安全方面的软件你不进来就不够意思)
- update更新数据库 求指教
- 参数的传递
中心点坐标肯定是可以确定的这个不用多说了吧。
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