鼠标坐标的3d点三角形交点?
Posted
技术标签:
【中文标题】鼠标坐标的3d点三角形交点?【英文标题】:Point-triangle intersection in 3d from mouse coordinates? 【发布时间】:2009-05-23 20:00:12 【问题描述】:我知道如何测试点和三角形的交点。
...但是我不明白,如何使用鼠标坐标将点的起始位置精确地移动到屏幕平面上,因此点角度应该根据鼠标光标在屏幕上的位置而改变,也无论我在我的 OpenGL 应用程序中使用哪个透视角度,这都应该可以正常工作,因此不同透视角度的点角度会有所不同...... gluPerspective() 是我正在谈论的函数。
【问题讨论】:
“移动点的起始位置”是什么意思?一个点就是一个点。明白我的意思吗? ;) 你能澄清你的问题吗?您是在问如何精确移动一个点? 【参考方案1】:好吧,试一试,猜猜你的意思。猜测是您想用鼠标选择对象。签出:
glUnProject.
这会将屏幕坐标转换回 3d 世界坐标。
如果您遇到问题,Google 会提供更多信息。
干杯!
【讨论】:
【参考方案2】:是的,我想移动屏幕平面上的点,例如,我可以使用 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);
【讨论】:
【参考方案3】:您需要生成一条穿过鼠标位置垂直于屏幕的射线(线)。
我建议您先了解一些有关 3d 几何和 2d 投影的基本信息,然后再进一步了解。
查看Wikipedia
book search on Google 想出了很多头衔。
Foley & Van Dam 虽然是权威的书 - 这里是 Amazon.co.uk 或这里是 Amazon.com
【讨论】:
以上是关于鼠标坐标的3d点三角形交点?的主要内容,如果未能解决你的问题,请参考以下文章