2011-05-05 82 views
0

我正在使用OpenGL在3D空间中拖动3D对象。 由于我在OpenGL中是全新的,我不明白别人对鼠标拖动的看法。事实上,我需要一个示例代码+解释,只是解释对我来说是不够的(除非它足够简单和足够详细)。 我也读过其他论坛,但我仍然不明白。如何在3D空间中使用鼠标拖动对象

如这些论坛,我不明白,在所有...

http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=53232 http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat &数= 296160

我的问题是如何写?

回答

0

鼠标移动在屏幕坐标(2D)中,而物体在世界空间(3D)中移动。因此,在翻译这些坐标之前,您需要将对象移动限制为直线或平面。

设置好移动平面后,将屏幕坐标转换为世界坐标就如同将光线投射到场景中,并与移动平面相交。

所以这是一个两步过程。您发布的这些链接提供了更多细节。如果这还不够,请告诉我们你有什么和你卡在哪里。

+0

如何限制对象移动? 你如何与运动平面相交的世界坐标? 我知道如何设置屏幕坐标到世界坐标。 其实我还没有开始,因为我不知道如何开始... 我刚完成绘图对象。 – Tifa 2011-05-05 08:44:00

+0

void mouseDrag(int x,int y) {int button; int state; GLfloat translateX; GLfloat translateY; 如果((状态== GLUT_DOWN)&&(按钮== GLUT_LEFT_BUTTON))//翻译 {平移X + =(400-X)/ 1000.0f; 平移Y + =(400-Y)/ 1000.0f;} gl_draw(平移X,平移Y);我使用glTranslatef(translateX,translateY,-6.0f);我使用glTranslatef(translateX,translateY,-6.0f);我想用glTranslatef(translateX,translateY,-6.0f); gl_draw()翻译对象。 和main(),glutMotionFunc(mouseDrag); – Tifa 2011-05-06 05:18:15

+0

但我不断收到此错误:错误\t 2错误C2664: 'glutMotionFunc':无法从 '重载函数' 到 '无效(__cdecl *)(INT,INT)' \t˚F转换参数1:\ UTM课程\ OpenGL教程\ VidTut \立方\ main.cpp中\t 475,我认为它是指mouseDrag()函数。但错误在哪里 – Tifa 2011-05-06 05:20:56