我正在为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) ...