我知道如何测试点和三角形之间的交点。
...但是我不明白,如何使用鼠标坐标将点的起始位置精确地移动到屏幕平面上,因此点角度应该根据鼠标光标在屏幕上的位置而改变,这也应该有效完全不管我在我的 OpenGL 应用程序中使用哪个透视角度,所以点角度在不同的透视角度上会有所不同...... gluPerspective() 是我正在谈论的函数。
我知道如何测试点和三角形之间的交点。
...但是我不明白,如何使用鼠标坐标将点的起始位置精确地移动到屏幕平面上,因此点角度应该根据鼠标光标在屏幕上的位置而改变,这也应该有效完全不管我在我的 OpenGL 应用程序中使用哪个透视角度,所以点角度在不同的透视角度上会有所不同...... gluPerspective() 是我正在谈论的函数。
是的,我想移动屏幕平面上的点,例如,我可以使用 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);
}
您需要生成一条穿过鼠标位置垂直于屏幕的射线(线)。
我建议您先了解一些有关 3d 几何和 2d 投影的基本信息,然后再进一步了解。
查看维基百科
谷歌上的图书搜索已经提出了相当多的书名。
Foley & Van Dam 虽然是权威书籍 - 在Amazon.co.uk或Amazon.com上