我在opengl中做3d迷宫,2d喜欢碰撞
地图定义为 2dim 数组
---------x axis
|0 0 0
|0 1 0
|0 0 0
|
|z axis
那 1 是一个立方体
我把那个立方体分成4个立方体
.
_ _
|_|_|
|_|_|
dot 是我的相机点,x,z 坐标现在我去我的立方体。posX,Z 是这样计算的,但它并不重要,但你知道它是如何工作的,在这里
posZ -= (float) ((Math.cos(azimut * Math.PI / 180) * Math.cos(zenit * Math.PI / 180))) / 50;
posX += (float) ((Math.sin(azimut * Math.PI / 180) * Math.cos(zenit * Math.PI / 180))) / 50;
它在 display() 方法中计算每个 milisec 或 sth.. 我将它转换为 int 所以我有我的数组的正确坐标并将它保存到 newX,Z
newposZ = (int) posZ;
newposX = (int) posX;
if (maze[newposZ][newposX] == 1) {
我通过方位角检查我从哪里来.. 像这样(这是上图中的点位置在左上角立方体方位角是 180,如果面对墙直,但我想检查从 90 到 270..)
if (posX - newposX < 0.5 && posZ - newposZ < 0.5 && (azimut > 90 && azimut < 270) {
posZ = newposZ;
}
是的,我将 posZ (可以说 1.1)更改为投射的 newposZ (说 1),所以一切都很好 相机撞到墙上,但是方位角检查是个坏主意,因为在下一步中我检查到同一个 minicube,但是从就这样离开了
if (posX - newposX < 0.5 && posZ - newposZ < 0.5 && (azimut > 0 && azimut > 180) {
posX = newposX;
}
这很糟糕,因为在某个角度(角度 90 到 180,因为两者都相同..)它同时将 posX 和 posZ 设置为 newposX、newposZ .. 其中一个变量是固定的,但其他变量不应该是如果你明白我的意思了吗
如果我只检查 -45 到 45 度,它可以正常工作,但我想从 -90 做 +90 任何人都可以帮忙吗?