获得立方体的面

Posted

技术标签:

【中文标题】获得立方体的面【英文标题】:Getting the face of a cube 【发布时间】:2009-08-19 17:46:45 【问题描述】:

我想计算立方体上的哪个面被点击了。我已经将鼠标置于 3D 状态,我可以在鼠标的位置以 3D 形式绘制东西。

我现在需要做的就是计算正在触摸立方体的哪个面。

EG。我有一个函数,当我将大小、位置和鼠标位置传递给它时,它会返回人脸。上、下、左、右、前、后。

听起来很简单,但我没有最模糊的。

谢谢大家, 沉默C

【问题讨论】:

【参考方案1】:

不确定您使用的是什么 API,但 OpenGL 有一个 selection API,它可以为您执行此操作

【讨论】:

【参考方案2】:

您只需为立方体的每个面计算一个line plane intersection,并使用由相机位置和鼠标在视图平面上的位置定义的线。扔掉平面上但不在立方体表面上的所有交点,并选择最近的一个。

如果您将立方体表示为十二个三角形,您也可以使用线三角形交点。但在这两种情况下,您都必须提供更多信息才能获得更具体的答案。

【讨论】:

所以定义的线是从相机到鼠标,对吧? 另外,我假设我会补偿旋转,对吧? 从相机通过鼠标到无穷远的线与一个或多个面相交(如果只有一个立方体,通常是两个)。忽略退化的情况,如边、顶点和任何平行于线的面。剔除背面的面孔可能是值得的。用户几乎肯定想要最近的人脸,但您可能希望提供一种在人脸中进行选择的功能,以便用户可以根据需要选择隐藏的对象。

以上是关于获得立方体的面的主要内容,如果未能解决你的问题,请参考以下文章

UVA 503 Parallelepiped walk

UVaLive 3401 Colored Cubes (暴力)

颜色和纹理如何协同工作?

行进立方体 - 获得倾斜的表面

Three.js之根据顶点信息绘制立方体并给面设置颜色

现代 OpenGL:如何获得立方体的矢量位置?