我正在 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()
但我不明白如何使用它
该值从 0 到 24,其中 0 表示不旋转。的文档get_orthogonal_index 说:
\n\n该函数考虑将旋转离散化为单位球体上的 24 个点,沿着向量 (x,y,z),每个分量为 -1、0 或 1,并返回最能代表 方向的点的索引物体。它主要由GridMap编辑器使用。更多细节请参考Godot源代码。
\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\nRun Code Online (Sandbox Code Playgroud)\n这些都是Basis。它们通过指定轴的方向来描述方向。
前三个数字是 x 轴,后面三个数字是 y 轴,最后三个数字是 z 轴。
\n第一个,根本不旋转:
\nBasis( 1, 0, 0, 0, 1, 0, 0, 0, 1), // 0\nRun Code Online (Sandbox Code Playgroud)\n请注意,x 轴是1,0,0,这意味着它朝向 x。y 轴是0,1,0\xe2\x80\xa6 你向 y 方向客座,并且0,0,1z 只是 z。因此,正如预期的那样,没有轮换。
正如您所看到的,前四个索引为您提供旋转,保持 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\nRun Code Online (Sandbox Code Playgroud)\n根据顺序\xe2\x80\xa6 0 不旋转。10 是半圈,因为另一个轴被翻转。因此,可以是 0、22、10、16 或 0、16、10、22,具体取决于您想要正旋转还是负旋转。
\n