openglandroid中的立方体旋转问题

openglandroid中的立方体旋转问题,android,opengl-es,Android,Opengl Es,每当我旋转立方体时,我想检测人脸(哪个人脸在用户前面)。用+Z向量计算每个人脸法线的标量积(点积)。标量积最大的那张脸面对着观众。datenwolf的回答有正确的想法,但在书面上并不完全正确。让P表示用于绘制立方体的模型视图投影矩阵的3x3上三角子矩阵。然后P的第三行(为了方便参数称之为v)表示您的视图方向,未规范化。现在,要检查一个面是否指向相机,假设单位法线向外,只需检查其法线与v的点积是否小于0(未最大化)。这是因为: dot(a, b) = |a| |b| cos(theta) 其中

每当我旋转立方体时,我想检测人脸(哪个人脸在用户前面)。

用+Z向量计算每个人脸法线的标量积(点积)。标量积最大的那张脸面对着观众。

datenwolf的回答有正确的想法,但在书面上并不完全正确。让P表示用于绘制立方体的模型视图投影矩阵的3x3上三角子矩阵。然后P的第三行(为了方便参数称之为v)表示您的视图方向,未规范化。现在,要检查一个面是否指向相机,假设单位法线向外,只需检查其法线与v的点积是否小于0(未最大化)。这是因为:

 dot(a, b) = |a| |b| cos(theta)

其中θ是它们之间的角度。只有当它们指向相反的方向时,这才是负的,这是一个面指向相机的必要和充分条件,假设它实际位于相机前面。

记住你的旋转角度,并根据它们的范围进行测试。例如,-45..45将是正面。还要考虑到,如果将立方体倒置,则沿宽度方向的边将反转。