Qt openGL,可移动的二维点到三维点

Qt openGL,可移动的二维点到三维点,qt,opengl,projection,glu,Qt,Opengl,Projection,Glu,我有一个Qt/openGL应用程序,我在屏幕上显示2D元素,其坐标取决于3D对象坐标。没关系,当我移动我的3D世界时,我的2D元素跟随得很好。 现在,我想在Y轴屏幕上移动2D元素,以便在openGL中更改3D对象的Y坐标。所以3D物体的X和Z不会改变,只会改变它的高度Y 怎么做 我试着用gluUnproject和新的2D坐标,但是这个函数返回新的X1,Y1,Z1,你不能告诉它,我已经知道X和Z,只给我Y1,给那些X和Z。如果,我取返回的Y1,用它和我的X和Z,当然,它不起作用,因为如果我用glu

我有一个Qt/openGL应用程序,我在屏幕上显示2D元素,其坐标取决于3D对象坐标。没关系,当我移动我的3D世界时,我的2D元素跟随得很好。 现在,我想在Y轴屏幕上移动2D元素,以便在openGL中更改3D对象的Y坐标。所以3D物体的X和Z不会改变,只会改变它的高度Y

怎么做

我试着用gluUnproject和新的2D坐标,但是这个函数返回新的X1,Y1,Z1,你不能告诉它,我已经知道X和Z,只给我Y1,给那些X和Z。如果,我取返回的Y1,用它和我的X和Z,当然,它不起作用,因为如果我用gluProjectX,Y1,Z,它不会给我2D点

我也试过了:我的3D对象有两个点X,Y,Z和X,Y+1,Z。我在这两个点上使用gluProject,这给了我winX,winY,winZ和winX1,winY1,winZ1当然winX=winX1。我推导出deltaY=abswinY-winY1,它相当于我的两个3D点之间Y轴上1个openGL单位的像素。它工作得很好,但前提是我不做太大的旋转,所以这不是一个好的解决方案


有什么想法吗?

我想要一些关于这个想法的反馈:gluUnproject根据2D坐标返回一个点,第三个z坐标指定窗口坐标的深度。我的建议是使用gluUnproject两次,一次使用0.0,一次使用1.0作为Z坐标,然后减去这两个世界坐标以创建一个向量起点,gluUnproject使用0.0,然后使用此向量计算给定y的所需x和Z。你也可以自己计算这个向量,这是学习这类数学的好方法,速度更快。我真的不理解你的想法。事实上,问题是当你说,然后使用这个向量来计算给定y的期望x和z。也许我的问题不清楚,但我知道我的3D对象X和Z坐标,它们是固定的X0,Z0,不需要改变。我有一个开始的3D Y,我投射这个初始3D点X0,Y,Z0得到一个2D点。然后,我想移动这个2D点,它的y 2D坐标,但只改变y 3D点。问题是gluunproject给出了新的X1,Y1,Z1,使用X0,Y1,Z0作为新的3D点是错误的。我用你的想法进行了计算,但我看不出从减法得到的向量代表什么以及如何使用它。例如,如果我的2D点是x,y,0和x,y,1,我用gluunproject得到:x,y,Z代表x,y,0和100*x,100*y,10*Z代表x,y,1。那我该怎么办呢?