怎样在opengl中如何判断鼠标和摄像机连线的延长线与某个平面相交并求其交点?(代码)
2个回答
2013-12-06
展开全部
哈哈,这简单!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);
纯手打,代码调试没问题,祝成功!
函数名称: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);
纯手打,代码调试没问题,祝成功!
2013-12-06
展开全部
在OpenGL中,填加了一个人物模型,我将人物模型的位置与摄像机目标点的位置绑定,现在想让摄像机以人物视角为主,即以人物为中心进行旋转,旋转后的摄像机位置该怎么计算啊???各位大神求助啊!最好能给出这段的代码,旋转的角度已经知道是弧度的angle,关键是后面的运算,,不会。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询