2

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

...但是我不明白,如何使用鼠标坐标将点的起始位置精确地移动到屏幕平面上,因此点角度应该根据鼠标光标在屏幕上的位置而改变,这也应该有效完全不管我在我的 OpenGL 应用程序中使用哪个透视角度,所以点角度在不同的透视角度上会有所不同...... gluPerspective() 是我正在谈论的函数。

4

3 回答 3

2

好吧,我会试一试,猜猜你的意思。猜测是您想用鼠标选择对象。查看:

glUn项目

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

如果您遇到问题,Google会提供更多信息。

干杯!

于 2009-05-23T20:15:25.350 回答
1

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

抱歉不清楚:/

--

编辑:是的,我得到了它与那个 nehe 教程一起工作!谢谢,我不知道会这么容易!

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

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);
}
于 2009-05-24T10:59:08.057 回答
0

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

我建议您先了解一些有关 3d 几何和 2d 投影的基本信息,然后再进一步了解。

查看维基百科

谷歌上的图书搜索已经提出了相当多的书名。

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

于 2009-05-24T11:13:14.537 回答