我正在为DirectX应用编写一段代码。它的意思是不显示不可见的面孔。通常,它只是使用Z缓冲区,但是我要进行网格的许多移动和旋转,因此我不希望这样做并且节省计算能力。我将在多维数据集上对此进行描述。您从正面看,所以只看到一张脸,不需要旋转左边的5张。如果您要从100 * 100网格中选择一个多维数据集的一面,那么最好不必转回您真正不需要的50k网格。因此,我存储了相机的X,Y,Z旋转(我未使用的Z旋转)以及面部的X,Y,Z旋转。在这个简化的多维数据集中,我将看到使该语句成立的面孔:

cRot //camera rotation in degrees

oRot //face rotation in degrees

if(oRot.x > cRot.x-90 && oRot.x < cRot.x+90
    && oRot.y > cRot.y-90 && oRot.y < cRot.y+90)

但是有一个问题。如果我将旋转,则相机可以达到330的示例。在这种状态下,我会看到立方体的正面和右侧。右侧旋转270,所以在IF语句中可以。问题是正面旋转0,这也是360度。

所以我的问题是如何使此语句起作用,因为当我使用模数时,它将在右侧出现故障,因此对于0 = 360它将不起作用。

最佳答案

您的意思是要检查oRot与cRot是否至少相差90度?

//integral
if ((360 + cRot - oRot) % 360 >= 90) ...

//floating point diff = abs(cRot - oRot); if (diff >= 90 && diff <= 270) ...

10-06 06:31