怎样在opengl中如何判断鼠标和摄像机连线的延长线与某个平面相交并求其交点?(代码)

2020-06-09 社会 40阅读
哈哈,这简单!GL中有一个通过二维坐标获取场景中物体的三维坐标的函数。比如,你在场景中画了一只兔子,当你拿鼠标选择一个二维坐标(比如鼠标的位置),该函数就可以自动获取这个二维坐标在兔子表面对应的三维坐标值。
函数名称:gluUnProject
函数原型:
intAPIENTRYgluUnProject(
GLdoublewinx,
GLdoublewiny,
GLdoublewinz,
constGLdoublemodelMatrix[16],
constGLdoubleprojMatrix[16],
constGLintviewport[4],
GLdouble*objx,
GLdouble*objy,
GLdouble*objz);
函数解释:此函数的具体用途是将一个OpenGL视区内的二维点转换为与其对应的场景中的三[来源:GameRes.com]维坐标。
注意:需要提供的二维坐标(winx,winy,winz),winz变化从0到1,通常直接取0,而且在windows下编程要注意屏幕坐标是左上角为原点,而opengl中是左上角为原点(只考虑xy平面),因此winy为窗口高度减去从屏幕上获取的坐标y之后的值。最后输出的三维参数存储在objx,objy,objz中。而中间三个参数就是从opengl中获取的视图、透视、视口矩阵了。
调用示例:
glGetDoublev(GL_MODELVIEW_MATRIX,modelview);
glGetDoublev(GL_PROJECTION_MATRIX,projection);
glGetIntegerv(GL_VIEWPORT,viewport);
gluUnProject((GLdouble)mousex,(GLdouble)window.bottom-mousey,0,
modelview,projection,viewport,
&objx,&objy,&objz);
纯手打,代码调试没问题,祝成功!
声明:你问我答网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系fangmu6661024@163.com