Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl Glut鼠标坐标_Opengl_Glut - Fatal编程技术网

Opengl Glut鼠标坐标

Opengl Glut鼠标坐标,opengl,glut,Opengl,Glut,我试图获得一个点的笛卡尔坐标,因为我使用了一个简单的函数,这个函数导出了一个窗口坐标,比如(100200)。我想把它转换成笛卡尔坐标,问题是窗口大小是可变的,所以我真的不知道如何实现它 编辑: 作品: 我试着通过做这样的事情来使用GUNPROJECT GLdouble modelMatrix[16]; glGetDoublev(GL_MODELVIEW_MATRIX,modelMatrix); GLdouble projMatrix[16]; glGetDoublev(GL_PROJECTION

我试图获得一个点的笛卡尔坐标,因为我使用了一个简单的函数,这个函数导出了一个窗口坐标,比如(100200)。我想把它转换成笛卡尔坐标,问题是窗口大小是可变的,所以我真的不知道如何实现它

编辑:

作品:

我试着通过做这样的事情来使用GUNPROJECT

GLdouble modelMatrix[16];
glGetDoublev(GL_MODELVIEW_MATRIX,modelMatrix);
GLdouble projMatrix[16];
glGetDoublev(GL_PROJECTION_MATRIX,projMatrix);


double position[3];
 gluUnProject(
  x,
   y,
  1,
 modelMatrix,
 projMatrix,
 viewport,
 &position[0], //-> pointer to your own position (optional)
 &position[1], // id
 &position[2] // 
 );

 cout<<position[0];
GLdouble-modelMatrix[16];
glGetDoublev(GL_模型视图_矩阵,模型矩阵);
GLdouble projMatrix[16];
glGetDoublev(GL_投影矩阵,projMatrix);
双位[3];
GlunProject(
x,,
Y
1.
模型矩阵,
projMatrix,
视口,
&位置[0],//-指向您自己位置的指针(可选)
&位置[1],//id
&位置[2]//
);

cout鼠标坐标已经是笛卡尔坐标,即窗口空间的坐标。我认为您正在寻找的是到OpenGL场景的世界空间的转换。窗口中的2D鼠标坐标缺少一些信息,例如深度

所以你能做的实际上是从“摄影机”到场景的光线。为此,您需要执行从屏幕空间到世界空间的反投影。为此,您需要投影矩阵P和视图矩阵V(gluLookAt或类似工具生成的内容),形成乘积P*V并将其反转,即(P*V)^-1=V^-1*P^-1。注意倒装不是换位。矩阵的求逆是通过高斯-乔丹消去法完成的,最好是通过一些旋转。任何关于线性代数的数学教科书都能解释这一点

然后你需要两个向量来形成一条射线。为此,采用两个具有相同XY坐标但深度不同(例如0和1)的屏幕空间位置,并进行反投影:

(P*V)^-1 * (x, y, {0, 1})
结果向量的差值提供光线方向


整个反投影过程已被包装到gluUnProject中。但是,我建议不要以GLU形式使用它,而是查看源代码以从中学习,或者使用GLM提供的现代替代品。

@user697110:您何时执行这些步骤,以及您获得了哪些投影和模型视图矩阵(即在程序的哪个点从OpenGL获取它们)?@user697110:当时你读了一些投影和模型视图,但可能不是视图转换后出现的那个。这将是矩阵堆栈中的最后一个,当然不是您想要的。发布你的完整代码(在pastebin.com上),我会修改它以使其正常工作。谢谢你的帮助,但我刚刚发现,毕竟在这项工作中,我们不需要使用缩放、旋转或可变窗口,因此它只会使工作更简单。无论如何谢谢你的帮助