Gridmap Node set_cell_item() 平铺对象的旋转

Jac*_*ias 2 rotation godot

我正在 Godot 中使用 gridmap 3D 开发程序地图,

set_cell_item(x: int, y: int, z: int, item: int, orientation: int = 0)
Run Code Online (Sandbox Code Playgroud)

在最后一个属性上,我可以设置对象的方向...但看起来范围从 -1 到 1...所以,只有 3 个选项?

使用 then 使我的图块在 Z 轴上旋转,我希望它在 y 轴上旋转。文档指出我

get_orthogonal_index()

但我不明白如何使用它

The*_*aot 6

该值从 0 到 24,其中 0 表示不旋转。的文档get_orthogonal_index 说:

\n
\n

该函数考虑将旋转离散化为单位球体上的 24 个点,沿着向量 (x,y,z),每个分量为 -1、0 或 1,并返回最能代表 方向的点的索引物体。它主要由GridMap编辑器使用。更多细节请参考Godot源代码。

\n
\n

24 次旋转的含义并不容易想象。然而,只要说它们是立方体的旋转对称性就足够了就足够了。换句话说,它们都是你可以采取一个不伦不类的立方体并旋转它的方法,这样它在旋转后看起来是一样的(它被旋转了,但作为一个不伦不类的立方体,它看起来是一样的)。

\n

现在的问题是这些轮换的顺序是什么?

\n

好吧,不用再想了,感谢查看 Godot 源代码的魔力的魔力,这些是旋转:

\n
    //     --- x ---   --- y ---   --- z ---\n    Basis( 1,  0,  0,  0,  1,  0,  0,  0,  1),  //  0\n    Basis( 0, -1,  0,  1,  0,  0,  0,  0,  1),  //  1\n    Basis(-1,  0,  0,  0, -1,  0,  0,  0,  1),  //  2\n    Basis( 0,  1,  0, -1,  0,  0,  0,  0,  1),  //  3\n    Basis( 1,  0,  0,  0,  0, -1,  0,  1,  0),  //  4\n    Basis( 0,  0,  1,  1,  0,  0,  0,  1,  0),  //  5\n    Basis(-1,  0,  0,  0,  0,  1,  0,  1,  0),  //  6\n    Basis( 0,  0, -1, -1,  0,  0,  0,  1,  0),  //  7\n    Basis( 1,  0,  0,  0, -1,  0,  0,  0, -1),  //  8\n    Basis( 0,  1,  0,  1,  0,  0,  0,  0, -1),  //  9\n    Basis(-1,  0,  0,  0,  1,  0,  0,  0, -1),  // 10\n    Basis( 0, -1,  0, -1,  0,  0,  0,  0, -1),  // 11\n    Basis( 1,  0,  0,  0,  0,  1,  0, -1,  0),  // 12\n    Basis( 0,  0, -1,  1,  0,  0,  0, -1,  0),  // 13\n    Basis(-1,  0,  0,  0,  0, -1,  0, -1,  0),  // 14\n    Basis( 0,  0,  1, -1,  0,  0,  0, -1,  0),  // 15\n    Basis( 0,  0,  1,  0,  1,  0, -1,  0,  0),  // 16\n    Basis( 0, -1,  0,  0,  0,  1, -1,  0,  0),  // 17\n    Basis( 0,  0, -1,  0, -1,  0, -1,  0,  0),  // 18\n    Basis( 0,  1,  0,  0,  0, -1, -1,  0,  0),  // 19\n    Basis( 0,  0,  1,  0, -1,  0,  1,  0,  0),  // 20\n    Basis( 0,  1,  0,  0,  0,  1,  1,  0,  0),  // 21\n    Basis( 0,  0, -1,  0,  1,  0,  1,  0,  0),  // 22\n    Basis( 0, -1,  0,  0,  0, -1,  1,  0,  0)   // 23\n
Run Code Online (Sandbox Code Playgroud)\n

这些都是Basis。它们通过指定轴的方向来描述方向。

\n

前三个数字是 x 轴,后面三个数字是 y 轴,最后三个数字是 z 轴。

\n

第一个,根本不旋转:

\n
Basis( 1,  0,  0,  0,  1,  0,  0,  0,  1),  //  0\n
Run Code Online (Sandbox Code Playgroud)\n

请注意,x 轴是1,0,0,这意味着它朝向 x。y 轴是0,1,0\xe2\x80\xa6 你向 y 方向客座,并且0,0,1z 只是 z。因此,正如预期的那样,没有轮换。

\n

正如您所看到的,前四个索引为您提供旋转,保持 z 轴不变。因此,您会看到绕 z 轴的旋转。

\n

由于您想要绕 y 轴旋转,因此让我们选择保持 y 轴不变的旋转:

\n
    Basis( 1,  0,  0,  0,  1,  0,  0,  0,  1),  //  0\n    Basis(-1,  0,  0,  0,  1,  0,  0,  0, -1),  // 10\n    Basis( 0,  0,  1,  0,  1,  0, -1,  0,  0),  // 16\n    Basis( 0,  0, -1,  0,  1,  0,  1,  0,  0),  // 22\n
Run Code Online (Sandbox Code Playgroud)\n

根据顺序\xe2\x80\xa6 0 不旋转。10 是半圈,因为另一个轴被翻转。因此,可以是 0、22、10、16 或 0、16、10、22,具体取决于您想要正旋转还是负旋转。

\n