rotation - Gridmap Node set_cell_item() 瓦片对象的旋转

标签 rotation godot

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

set_cell_item(x: int, y: int, z: int, item: int, orientation: int = 0)

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

使用 then 使我的瓷砖在 Z 轴上旋转,我希望它在 y 轴上旋转。文档指向我

get_orthogonal_index()

但我不知道如何使用它

最佳答案

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

This function considers a discretization of rotations into 24 points on unit sphere, lying along the vectors (x,y,z) with each component being either -1, 0, or 1, and returns the index of the point best representing the orientation of the object. It is mainly used by the GridMap editor. For further details, refer to the Godot source code.

24 次旋转是什么并不容易形象化。然而,足以说它们是 The Rotational Symmetries of the Cube .换句话说,它们是所有你可以拿一个不起眼的立方体并旋转它的方法,这样它在旋转后看起来是一样的(它被旋转了,但作为一个不起眼的立方体,它看起来是一样的)。

现在,问题是这些旋转的顺序是什么?

好了,不用再想了,多亏了 looking at Godot source code 的魔力,这些是旋转:

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

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

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

第一个,根本没有旋转:

Basis( 1,  0,  0,  0,  1,  0,  0,  0,  1),  //  0

请注意 x 轴是 1,0,0,这意味着它朝向 x。 y 轴是 0,1,0……你是 guested 朝向 y,0,0,1 因为 z 就是 z。所以没有轮换,正如预期的那样。

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

因为你想绕 y 轴旋转,让我们选择保持 y 轴不变的那些:

    Basis( 1,  0,  0,  0,  1,  0,  0,  0,  1),  //  0
    Basis(-1,  0,  0,  0,  1,  0,  0,  0, -1),  // 10
    Basis( 0,  0,  1,  0,  1,  0, -1,  0,  0),  // 16
    Basis( 0,  0, -1,  0,  1,  0,  1,  0,  0),  // 22

按照顺序……0 是没有旋转。 10 是半圈,因为另一个轴被翻转了。因此,可以是 0、22、10、16 或 0、16、10、22,具体取决于您想要正旋转还是负旋转。

关于rotation - Gridmap Node set_cell_item() 瓦片对象的旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67443086/

相关文章:

javascript - 我如何在 Javascript 中旋转图像?

JavaScript/jQuery : How to get actual original position of an element (DIV) after it's been rotated

ios 在 View 执行期间禁用/启用旋转

javascript - SVG 圆起点

css - 使用 jQuery 创建背景图像循环

testing - 如何在 Godot 引擎中编写测试

vector - Godot 3d 获得前向矢量

c# - 是否可以使用适当的命名空间创建新的 C# 脚本?

godot - 在 Area2D 中覆盖 KinematicBody2D 运动?