从鼠标坐标三维点三角交点?

时间:2009-05-23 20:00:13

标签: c++ opengl 3d mouse intersection

我知道如何测试点和三角形之间的交点。

...但我不明白,我怎样才能通过使用我的鼠标坐标精确地将点的起始位置移动到屏幕平面上,因此点角度应根据鼠标光标在屏幕上的位置而改变,无论我在OpenGL应用程序中使用哪个透视角度,这应该都能完美地工作,因此在不同的透视角度下,点角度会有所不同... gluPerspective()是我正在谈论的函数。

3 个答案:

答案 0 :(得分:2)

好吧,要小心一把,猜猜你的意思。猜测是你想用鼠标选择对象。退房:

glUnProject

这会将屏幕坐标转换回3d世界坐标。

如果遇到问题,

Google会提供更多信息。

干杯!

答案 1 :(得分:1)

是的,我想在屏幕平面上移动点,所以例如我可以使用3d坐标在我鼠标当前的那个点上渲染一个立方体,然后我从那个位置拍摄一条线到那个地方我的鼠标指向的位置,所以它会击中我的3D世界中的三角形,以及我如何用鼠标选择该对象。

抱歉不清楚:/

-

编辑:我得知它正在使用那个教程!谢谢,我不知道会那么容易!

这是我现在使用的代码,效果很好:

void GetOGLPos(int x, int y, GLdouble &posX, GLdouble &posY, GLdouble &posZ){
    GLint viewport[4];
    GLdouble modelview[16];
    GLdouble projection[16];
    GLfloat winX, winY, winZ;

    glGetDoublev(GL_MODELVIEW_MATRIX, modelview);
    glGetDoublev(GL_PROJECTION_MATRIX, projection);
    glGetIntegerv(GL_VIEWPORT, viewport);

    winX = (float)x;
    winY = (float)viewport[3]-(float)y;
    glReadPixels(x, int(winY), 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winZ);

    gluUnProject(winX, winY, winZ, modelview, projection, viewport, &posX, &posY, &posZ);
}

答案 2 :(得分:0)

您需要生成穿过垂直于屏幕的鼠标位置的光线(线)。

我建议您在进一步了解之前获取有关三维几何和二维投影的一些基本信息。

查看Wikipedia

book search on Google提出了不少标题。

Foley& Van Dam虽然是最权威的书 - 在Amazon.co.ukAmazon.com